📈

CodePipelineのソースにGitHubのリポジトリを利用する方法@CloudFormation

2022/05/17に公開

CodePipelineとGitHubのリポジトリを連携する方法の情報が意外と少なかったので、CloudFormationでの構築を含めて記事にしました。

今回実装したソースはGitHubに上げております。
https://github.com/engineer-taro/sample-aws-github-codePipeline-in-cfn

CodePipelineにGitHubのリポジトリを利用する際の実装の選択肢

  • OAuthトークンで連携する(非推奨)
  • GitHub Actionsを利用する
  • CodeStarを用いてGitHubとのコネクションを作成する ★今回はこちら

OAuthトークンを利用する方法は、現在非推奨となっております。
この辺りのドキュメントを参照してください。
https://docs.aws.amazon.com/ja_jp/codepipeline/latest/userguide/update-github-action-connections.html

GitHub Actionsを利用する方法ですが、こちらはプライベートリポジトリでフリープランの場合、実行時間に制限があります。
https://docs.github.com/ja/billing/managing-billing-for-github-actions/about-billing-for-github-actions

CodeStarを用いてGitHubとのコネクションを作成する。今回はこちらの方法を紹介しています。

構築手順

こちらのソースにて、構築を行っていきます。
https://github.com/engineer-taro/sample-aws-github-codePipeline-in-cfn

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