MAIL

平日9:00〜17:30 お問い合わせ

MENU

ブログ BLOG

2020/5/18 (Mon)

Github ActionsからCloudformationを展開するCICDを作ってみた

Github ActionsからCloudformationを展開するCICDを作ってみた
Tips

Github ActionsはGtihubが2019年11月に正式に公開したCICDサービスです。

似たようなサービスとしてはCircleCIあたりが有名ですね。

今回はCloudformationを展開するCICDをGithub Actionsで作ってみたいと思います。

■ リポジトリ構成

- .github
└─workflows
└─ cloudformation-deploy-dev.yml
- template.yml

■ Cloudformationテンプレート

まず、Cloudformationのテンプレートファイルを用意しました。
VPCを作る簡単なものになります。
 陳ブログ1.png

■ Github Actionsワークフローファイル

Github Actionsはリポジトリ内の.github/workflows/配下にあるYAMLファイルを読み取り、
自動的にworkflowを生成します。workfolwはgithubの[workflow]タブから確認できます。

 陳ブログ2.png

今回作ったworkflowはdevブランチのpushイベントを検知して、
自動的にcloudformationテンプレートをawsにデプロイするものになります。

workflowファイル全体
 陳ブログ3.png

分解して解説して行きたいと思います。

分解して解説

■ name
 陳ブログ4.png
 workflowの名称を定義する、省略する場合はworkflowのファイル名が使用されます。


■ on
 陳ブログ5.png
 workflowsをトリガーするGithubアクションを定義します。
 今回はdevブランチのpushイベンドが発生する際にworkflowが実行されます。


■ jobs
 陳ブログ6.png
 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場合以下のような構成になります
  陳ブログ7.png
 デフォルトの場合は全てのjobが並列処理されますが、
 `needs`構文を使えばjob間の依存関係を定義することも可能です。


■ steps
 陳ブログ8.png
 job内で実行されるsteps(仮想環境内で実行されるタスク)を定義します。
 stepsはstepの配列になります(`-`はyamlの構文で、配列を表します)。
 `name`はstep名を定義します。
 stepことに`uses`もしくは`run`のいずれを定義してあげる必要があります。
 `run`はbashコマンドを実行します。
 `uses`はGithub ActionsリポジトリもしくはGtihub Marketplaceで公開されているActionを直接使用するための構文です。

 `uses`で呼び出している`actions/checkout@v2`はGithubの公式のactionです。
 リポジトリをチェックアウトする機能を提供します。
 陳ブログ9.png

 aws-actions/configure-aws-credentials@v1はAWSの公式が提供しているActionです。
 AWSコマンドの認証機能を実装しています。まだ、ハードコートを回避できするため、
 githubの[Settings]-[Secrets]に設定されている環境変数を呼出すようにしています。
 陳ブログ10.png


■ envとrun
 陳ブログ10.5.png
 `env`は実行環境中で環境変更を設定できます。
 `run`は実行したいコマンドを書きます。
 ここではcloudformationをデプロイするコードを書きます。


■ Githubにプッシュ
 リモートリポジトリのdevブランチにプッシュすると、
 Gtihub Actionsがトリガーされていることを確認できます。

 実行中
  陳ブログ11.png

 実行後
  陳ブログ12.png

■ まとめ

今回はdevブランチにpushするたびに、cloudformation stackをcreate/updateしてくれるworkflowを作ってみました。
Gtihub Actionsは他にもいろいろ機能があるので、引き続きいろいろ検証してみたいと思います。

参考:
※公式ドキュメントhttps://help.github.com/ja/actions