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/git-auto-commit-action@v3.0.0
      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



