GitHub Actions── ビルドとデプロイプロセスの自動化
(3)
GitHub Actionsとは、github.
に統合した形で提供するCI
今回はブランチモデルとして、master
を使い、devel
ブランチを使います。
cpanfile.snapshotを自動で生成しよう
cpanfile.
は、carton install
を実行する環境によっては異なるものが生成されます。そのため、cpanfile
とともにcpanfile.
をコミットする方法で開発している場合、cpafile.
が頻繁に変化してしまうことがあります。これを防ぐために、cpanfile.
を集中的に生成しましょう。
ワークフローの定義
では、.github/
にワークフローを定義しましょう。
on:
push:
branches:
- devel
pull_request:
branches:
- devel
jobs:
cpan:
runs-on: ubuntu-latest
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
steps:
- uses: actions/checkout@v2
- name: Generate cpanfile.snapshot
working-directory: ./application
run: |
./generate-cpanfile-snapshot.sh
- uses: stefanzweifel/[email protected]
with:
commit_message: Updated cpanfile.snapshot
file_pattern: application/cpanfile.snapshot
前半のon
ブロックでは、devel
ブランチにpushされたときと、devel
宛てのPull Requestで変更を検知したときを指定しています。
後半のjobs
ブロックが、checkout
アクションを使ってソースコードをGitHub Actions上の仮想環境にチェックアウトしたあと、cpanfile.
を生成するgeneratecpanfile-snapshot.
というシェルスクリプトを呼び出します。そして、git-auto-commit-action
アクションによって、cpanfile.
が変更されていればコミットし、
cpanfile.snapshotを生成するシェルスクリプトの作成
前述したgenerate-cpanfile-snapshot.
では、carton install
を実行してcpanfile.
を生成しています。簡潔なコードなのでここでは割愛します。WEB+DB PRESS Vol.
いざ生成
これで、cpanfile.
を生成する準備ができました。perl.
とgenerate-cpanfilesnapshot.
をコミットしてpushすると、cpanfile.
が生成されます。
Amazon ECSへデプロイしよう
GitHubには、
ワークフローの定義
GitHubのテンプレートを使ってワークフローを作成しましょう。GitHubでリポジトリを開き、
編集を行う前に、
- アプリケーションのイメージが格納されるECRリポジトリ
(URIではなく名前を記入する) - リポジトリのリージョン名
- ECSクラスタ
YAMLファイルの各項目を次のように埋め、.github/
として保存します。
(省略)
- name: Build, tag, and push image to Amazon ECR
id: build-image
env:
ECR_REGISTRY: ${{ steps.login-ecr.outputs.registry }}
ECR_REPOSITORY: ECRリポジトリ
IMAGE_TAG: ${{ github.sha }}
run: |
docker build -t $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_T
AG ./application/
docker push $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG
echo "::set-output name=image::$ECR_REGISTRY/$ECR_REPO
SITORY:$IMAGE_TAG"
- name: Fill in the new image ID in the Amazon ECS task de
finition
id: task-def
uses: aws-actions/amazon-ecs-render-task-definition@v1
with:
task-definition: task-definition.json
container-name: app # ここではコンテナ名をappとする
image: ${{ steps.build-image.outputs.image }}
- name: Deploy Amazon ECS task definition
uses: aws-actions/amazon-ecs-deploy-task-definition@v1
with:
task-definition: ${{ steps.task-def.outputs.task-defin
ition }}
service: サービス名
cluster: クラスタ名
wait-for-service-stability: true
(省略)
今回は、master
ブランチにマージなどの変更が発生したときにデプロイしたいので、master
ブランチへのpushかマージがあったときにワークフローを起動するよう、
Amazon ECSタスク定義の作成
GitHub Actionsを使ってデプロイする場合、task-definition.
を用意する必要があります。手動で作成することもできますが、
Amazon ECSのトップ画面からecs-cli
コマンドを使ったときと同じに設定しておきます。こうして作成したタスク定義をrequiresAttributes
といったプロパティが自動で追加されていますが、
IAMユーザーのクレデンシャルの登録
イメージのpushやデプロイにはIAM
そして、AWS_
という名前で、AWS_
という名前で保存しましょう。
いざデプロイ
これで準備ができました。devel
ブランチからのPullRequestをmaster
ブランチにマージすると、
まとめ
今回は、
さて、
本誌最新号をチェック!
WEB+DB PRESS Vol.130
2022年8月24日発売
B5判/168ページ
定価1,628円
(本体1,480円+税10%)
ISBN978-4-297-13000-8
- 特集1
イミュータブルデータモデルで始める
実践データモデリング
業務の複雑さをシンプルに表現! - 特集2
いまはじめるFlutter
iOS/Android両対応アプリを開発してみよう - 特集3
作って学ぶWeb3
ブロックチェーン、スマートコントラクト、NFT