⌚ 2020/5/18 (Mon) 🔄 2024/3/20 (Wed)
Github ActionsからCloudformationを展開するCICDを作ってみた
Github ActionsはGtihubが2019年11月に正式に公開したCICDサービスです。
似たようなサービスとしてはCircleCIあたりが有名ですね。
今回はCloudformationを展開するCICDをGithub Actionsで作ってみたいと思います。
■ リポジトリ構成
- .github
└─workflows
└─ cloudformation-deploy-dev.yml
- template.yml
■ Cloudformationテンプレート
まず、Cloudformationのテンプレートファイルを用意しました。
VPCを作る簡単なものになります。
■ Github Actionsワークフローファイル
Github Actionsはリポジトリ内の.github/workflows/配下にあるYAMLファイルを読み取り、
自動的にworkflowを生成します。workfolwはgithubの[workflow]タブから確認できます。
今回作ったworkflowはdevブランチのpushイベントを検知して、
自動的にcloudformationテンプレートをawsにデプロイするものになります。
workflowファイル全体
分解して解説して行きたいと思います。
分解して解説
■ name
workflowの名称を定義する、省略する場合はworkflowのファイル名が使用されます。
■ on
workflowsをトリガーするGithubアクションを定義します。
今回はdevブランチのpushイベンドが発生する際にworkflowが実行されます。
■ jobs
1つのworkflowは1つ以上のjobから構成されます。
今回はbuildというjobでjobsを組立ます。
`run-on`はjobの実行環境を定義します。jobことに指定する必要があります。
Github Actionsは予めいくつかの仮想環境を用意されています。
詳しくはドキュメントをご参照ください。
https://help.github.com/ja/actions/reference/virtual-environments-for-github-hosted-runners
※複数のjobで構成するjobs場合以下のような構成になります
デフォルトの場合は全てのjobが並列処理されますが、
`needs`構文を使えばjob間の依存関係を定義することも可能です。
■ steps
job内で実行されるsteps(仮想環境内で実行されるタスク)を定義します。
stepsはstepの配列になります(`-`はyamlの構文で、配列を表します)。
`name`はstep名を定義します。
stepことに`uses`もしくは`run`のいずれを定義してあげる必要があります。
`run`はbashコマンドを実行します。
`uses`はGithub ActionsリポジトリもしくはGtihub Marketplaceで公開されているActionを直接使用するための構文です。
`uses`で呼び出している`actions/checkout@v2`はGithubの公式のactionです。
リポジトリをチェックアウトする機能を提供します。
aws-actions/configure-aws-credentials@v1はAWSの公式が提供しているActionです。
AWSコマンドの認証機能を実装しています。まだ、ハードコートを回避できするため、
githubの[Settings]-[Secrets]に設定されている環境変数を呼出すようにしています。
■ envとrun
`env`は実行環境中で環境変更を設定できます。
`run`は実行したいコマンドを書きます。
ここではcloudformationをデプロイするコードを書きます。
■ Githubにプッシュ
リモートリポジトリのdevブランチにプッシュすると、
Gtihub Actionsがトリガーされていることを確認できます。
■ まとめ
今回はdevブランチにpushするたびに、cloudformation stackをcreate/updateしてくれるworkflowを作ってみました。
Gtihub Actionsは他にもいろいろ機能があるので、引き続きいろいろ検証してみたいと思います。
参考:
※公式ドキュメントhttps://help.github.com/ja/actions