はじめに
以前作成したこちらのUI5アプリを今も活用しているのですが、BTPのトライアルアカウントで実行しているため、3か月ごとに新しいアカウントにデプロイしなおす必要があります。
ターミナルからデプロイしてもよいのですが、GitHub Actionsを使ってボタン1つでデプロイできるようにしてみました。
※当記事で作成したワークフローはほとんど、以下のブログを参考にしています
ワークフローの作成
プロジェクトのルートディレクトリに以下の構成でディレクトリとファイルを作成します。deploy.ymlのファイル名は何でも構いません。
.github
└── workflows
└── deploy.yml
deploy.ymlの中身は以下のようになっています。プロジェクトをビルドし、Cloud Foundryにデプロイするだけのシンプルなワークフローです。
name: Deploy
on: workflow_dispatch
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Setup Node.js environment
uses: actions/setup-node@v4
with:
node-version: 20
- name: Install MTA Build tool
run: npm install -g mbt
- name: Install dependency
run: npm install
- name: Build MTA
run: mbt build -p cf -t mta_archives --mtar mta.tar
- name: Upload Artifact
uses: actions/upload-artifact@v4
with:
name: mta
path: ./mta_archives/mta.tar
deploy:
needs: build
runs-on: ubuntu-latest
steps:
- name: Download Artifact
uses: actions/download-artifact@v4
with:
name: mta
path: ./
- name: Deploy to Cloud Foundry
uses: miyasuta/cf-cli-action@master
with:
cf_api: ${{ vars.CF_API }}
cf_username: ${{ secrets.CF_USER }}
cf_password: ${{ secrets.CF_PASSWORD }}
cf_org: ${{ vars.CF_ORG }}
cf_space: ${{ vars.CF_SPACE }}
command: deploy ./mta.tar
ワークフローの説明
buildジョブ
-
on: workflow_dispatch
: マニュアルでワークフローを起動したときに実行されるように設定しています。リモートリポジトリにプッシュしたときに動かしたい場合は"push"イベントを指定します。複数イベントを指定することも可能です。(参考:Events that trigger workflows) -
run: mbt build -p cf -t mta_archives --mtar mta.tar
: ビルドするときにmtarに"mta.tar"とジェネリックな名前を指定しています。このため、このワークフローは他のプロジェクトでもそのまま使用可能です。
deployジョブ
-
uses: miyasuta/cf-cli-action@master
: Cloud Foudnry CLIを実行するためのアクションです。参考にしたワークフローではguerric-p/cf-cli-actionを使用していたのですが、使用しているCloud Foudnry CLIのバージョンが低いため警告が出ており、cf deployコマンドも使えない状態でした。
そこで、guerric-p/cf-cli-actionの元になったリポジトリをforkし、インストールするCF CLIのバージョンを上げたところ、デプロイができるようになりました。残念ながら元のリポジトリは4年ほど前からメンテナンスが止まっているようです。
実行準備
Deployステップで使用する変数、およびシークレットをリポジトリに登録します。
- name: Deploy to Cloud Foundry
uses: miyasuta/cf-cli-action@master
with:
cf_api: ${{ vars.CF_API }}
cf_username: ${{ secrets.CF_USER }}
cf_password: ${{ secrets.CF_PASSWORD }}
cf_org: ${{ vars.CF_ORG }}
cf_space: ${{ vars.CF_SPACE }}
command: deploy ./mta.tar
Settings > Secrets and variables > Actionsから登録します。
Secretsタブで以下を設定します。
- CF_USER: Cloud Foundryのログインユーザ
- CF_PASSWORD: Cloud Foundryのログインパスワード
Variablesタブで以下を設定します。
- CF_API: デプロイ先のCloud FoundryのAPI
- CF_ORG: デプロイ先のCloud Foundry組織
- CF_SPACE: デプロイ先のCloud Foundryスペース
すべてシークレットにしてもよかったのですが、秘密にしたい情報とそうでない情報を分けてみました。新しいトライアルアカウントに変わったときは、Variablesの情報だけ設定し直せばOKです。
ワークフローの実行
"Actions"タブから"Deploy"ワークフローを選択して実行します。
"deploy"ジョブをクリックすると、デプロイ時のログが見えます。
おまけ
ワークフローを定義したymlファイルですが、構文エラーがあってもデプロイしてみないと気づくことができません。actionlintというツールを使うと、開発環境で構文をチェックすることができます。使い方は簡単で、プロジェクトのルートディレクトリで以下のコマンドを実行するだけです(Dockerが必要)。
docker run --rm -v "$(pwd):$(pwd)" -w "$(pwd)" rhysd/actionlint:latest
参考:GitHub CI/CD実践ガイド――持続可能なソフトウェア開発を支えるGitHub Actionsの設計と運用 - p76