GitHub ActionsでCloud Foundry(IBM Cloud)のデプロイを行う


前に書いたようにCloud Foundryのデプロイが遅すぎるのでGitHub ActionsでCIデプロイをすることにしました。

Cloud Foundry(IBM Cloud)にDiscord BOTをデプロイしようとした際にハマったメモ

ibmcloud CLIをインストールしてpushコマンドまで

cf pushまでの流れをまとめるとこんな感じです。

IBM CloudでNode.jsアプリケーションをデプロイするまでの流れ

  • ibmcloudとcfプラグインのインストール
$ curl -fsSL https://clis.cloud.ibm.com/install/linux | sh
$ ibmcloud cf install
  • ログインとpush
$ ibmcloud login -u USERNAME -p PASSWORD -r リージョン
$ ibmcloud target --cf
$ ibmcloud cf push

ibmcloud login -ssoとするとブラウザ経由でワンタイムパスを入れたり、リージョンをコマンド入力待ちになるためCI利用はしにくいですが、-u / -p / -rなどを指定して実行することでCIでも利用できます。

GitHub Actionsのログをマスクする

パスワードなどはシークレットに登録すれば良いですが、ログにIDなどが表示されます。
ログを一部表示にします。

    - name: add-mask
      run: |
        echo "::add-mask::${{ secrets.IBMCLOUD_TEST }}"
        echo "::add-mask::${{ secrets.IBMCLOUD_USER_ID }}"
        echo "::add-mask::${{ secrets.IBMCLOUD_USER_PASS }}"
        echo "::add-mask::${{ secrets.IBMCLOUD_USER_ACCOUNT_ID }}"
        echo "::add-mask::${{ secrets.IBMCLOUD_USER_NAME }}"

GitHub Actionsのログをマスクするメモの記事にまとめました。

yml全体

node.js.yml
name: Node.js CI

on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]

jobs:
  build:

    runs-on: ubuntu-latest

    strategy:
      matrix:
        node-version: [15.x]
        # See supported Node.js release schedule at https://nodejs.org/en/about/releases/

    steps:
    - uses: actions/checkout@v2

    - name: add-mask
      run: |
        echo "::add-mask::${{ secrets.IBMCLOUD_TEST }}"
        echo "::add-mask::${{ secrets.IBMCLOUD_USER_ID }}"
        echo "::add-mask::${{ secrets.IBMCLOUD_USER_PASS }}"
        echo "::add-mask::${{ secrets.IBMCLOUD_USER_ACCOUNT_ID }}"
        echo "::add-mask::${{ secrets.IBMCLOUD_USER_NAME }}"        

    - name: ibmcloud cli install
      run: |
        curl -fsSL https://clis.cloud.ibm.com/install/linux | sh
        ibmcloud cf install

    - name: ibmclound login
      run: ibmcloud login -u ${{ secrets.IBMCLOUD_USER_ID }} -p ${{ secrets.IBMCLOUD_USER_PASS }} -r us-south

    - name: ibmclound target --cf
      run: ibmcloud target --cf

    - name: ibmclound cf push
      run: ibmcloud cf push

    - name: Use Node.js ${{ matrix.node-version }}
      uses: actions/setup-node@v2
      with:
        node-version: ${{ matrix.node-version }}
    - run: npm install && npm start

これでGitHubにPush後にCI側でIBM Cloudにデプロイしてくれるようになりました。