CodePipelineのソースにGitHubのリポジトリを利用する方法@CloudFormation
CodePipelineとGitHubのリポジトリを連携する方法の情報が意外と少なかったので、CloudFormationでの構築を含めて記事にしました。
今回実装したソースはGitHubに上げております。
CodePipelineにGitHubのリポジトリを利用する際の実装の選択肢
- OAuthトークンで連携する(非推奨)
- GitHub Actionsを利用する
- CodeStarを用いてGitHubとのコネクションを作成する ★今回はこちら
OAuthトークンを利用する方法は、現在非推奨となっております。
この辺りのドキュメントを参照してください。
GitHub Actionsを利用する方法ですが、こちらはプライベートリポジトリでフリープランの場合、実行時間に制限があります。
CodeStarを用いてGitHubとのコネクションを作成する。今回はこちらの方法を紹介しています。
構築手順
こちらのソースにて、構築を行っていきます。
CloudFormationでCodePipelineを構成し、CodePipeline上ではSAMテンプレートによるデプロイを行う構成となっております。
1. GitHubリポジトリを作成する
自身の環境で、リポジトリを作成します。
後ほどCodePipelineのソースに設定するリポジトリになります。
2. CodePipelineと関連リソースをデプロイする
今回はCloudFormationでやってしまうので、詳細は割愛しますが、以下のリソースをデプロイします。
- CodeStarConnections (GitHubとのコネクションを確立します。CloudFormationでのデプロイ時点では、コネクションが確立されていません。)
- CodePipeline
- CodePipeline本体
- IAM Role
- IAM Policy (今回は雑に権限を振っていますが、実務では最小権限を心掛けます。)
- ソース配置用のS3Bucket
- CodeBuild
- CodeBuild本体
- IAM Role
- IAM Policy (今回は雑に権限を振っていますが、実務では最小権限を心掛けます。)
- ソース配置用のS3Bucket
2-1. Parameterを修正する
parametersを自身の環境に合わせて修正します。
command/parameters.json
[
{
"ParameterKey": "GitHubRepositoryID",
"ParameterValue": "userName/repositoryName" <- change your repositoryName
},
{
"ParameterKey": "SourceBranchName",
"ParameterValue": "codepipeline/dev" <- change target branch name
}
]
2-2. Shellを実行する
command/codePipeline.shを実行します。
bash command/codePipeline.sh
3. 手動でCodeStarのGitHubとのConnectionを確立する
Connectionの確立はマネジメントコンソール上で行います。
本来であればAWS CLIで実施したかったのですが、CodeStarのコマンド一覧(https://docs.aws.amazon.com/cli/latest/reference/codestar-connections/index.html)にそれらしいものが無かったため、マネジメントコンソールで行うことにしました。
3-1. マネジメントコンソールのCodePipelineの画面に移動する
「アクションに失敗しました」と、Connectionが利用できないのでCodePipelineのアクションが失敗している旨が表示されています。
左タブの通知 > 接続 を押下します。
3-2. CodePipelineとGitHubリポジトリを紐づける
保留中、となっている該当の接続名を選択肢、「保留中の接続を更新」を押下します。
「Authorize AWS Connector for GitHub」を押下。
「新しいアプリをインストールする」を押下。
Only select repositories にて今回作成したリポジトリを選択し、「Install」を押下。
接続を押下。
利用可能になっていたらOK。
4. 該当リポジトリの該当ブランチにソースをプッシュする。
先ほど設定したjsonのパラメータ値を参照に、該当リポジトリの該当ブランチにソースをプッシュします。
[
{
"ParameterKey": "GitHubRepositoryID",
"ParameterValue": "userName/repositoryName" <- change your repositoryName
},
{
"ParameterKey": "SourceBranchName",
"ParameterValue": "codepipeline/dev" <- change target branch name
}
]
感想
よくある構成だと思いますが、意外と記事が少なかったので書いてみました。
GitHub Actionsを使った方法が流行っている様子ですが、そちらの方法で出来ない場合の解決策として参考になれば幸いです。
また、間違っている点やより良い方法ありましたら、コメント頂けると嬉しいです。
Discussion