2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

GitHub Actionを使ってBTPにMTAアプリをデプロイする

Posted at

はじめに

以前作成したこちらのUI5アプリを今も活用しているのですが、BTPのトライアルアカウントで実行しているため、3か月ごとに新しいアカウントにデプロイしなおす必要があります。

ターミナルからデプロイしてもよいのですが、GitHub Actionsを使ってボタン1つでデプロイできるようにしてみました。

※当記事で作成したワークフローはほとんど、以下のブログを参考にしています

ワークフローの作成

プロジェクトのルートディレクトリに以下の構成でディレクトリとファイルを作成します。deploy.ymlのファイル名は何でも構いません。

.github
└── workflows
    └── deploy.yml

deploy.ymlの中身は以下のようになっています。プロジェクトをビルドし、Cloud Foundryにデプロイするだけのシンプルなワークフローです。

deploy.yml
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コマンドも使えない状態でした。

image.png

そこで、guerric-p/cf-cli-actionの元になったリポジトリをforkし、インストールするCF CLIのバージョンを上げたところ、デプロイができるようになりました。残念ながら元のリポジトリは4年ほど前からメンテナンスが止まっているようです。

変更内容
image.png

実行準備

Deployステップで使用する変数、およびシークレットをリポジトリに登録します。

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のログインパスワード

image.png

Variablesタブで以下を設定します。

  • CF_API: デプロイ先のCloud FoundryのAPI
  • CF_ORG: デプロイ先のCloud Foundry組織
  • CF_SPACE: デプロイ先のCloud Foundryスペース

image.png

すべてシークレットにしてもよかったのですが、秘密にしたい情報とそうでない情報を分けてみました。新しいトライアルアカウントに変わったときは、Variablesの情報だけ設定し直せばOKです。

ワークフローの実行

"Actions"タブから"Deploy"ワークフローを選択して実行します。
image.png

デプロイが成功すると以下の状態になります。
image.png

"deploy"ジョブをクリックすると、デプロイ時のログが見えます。
image.png

おまけ

ワークフローを定義したymlファイルですが、構文エラーがあってもデプロイしてみないと気づくことができません。actionlintというツールを使うと、開発環境で構文をチェックすることができます。使い方は簡単で、プロジェクトのルートディレクトリで以下のコマンドを実行するだけです(Dockerが必要)。

docker run --rm -v "$(pwd):$(pwd)" -w "$(pwd)" rhysd/actionlint:latest

参考:GitHub CI/CD実践ガイド――持続可能なソフトウェア開発を支えるGitHub Actionsの設計と運用 - p76

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?