GitHubのReleaseを起点にしてCodePipelineを走らせる方法
参考(AWS)
手順
- 前提として、Pipelineのソースに現状でGitHub(webhook)が設定されていること
- AWSのCLIが利用可能であるEC2の踏み台などが用意されている(ログイン済みCLIがあればローカルでも良い)
- リージョンは適宜書き換えてください
1. AWS用の踏み台EC2サーバーにログインする
ssh fumidai.com
2. 現在AWS CodePipelineに設定されてるすべてのWebhookを取得する
以下のコマンドを実行しする
aws codepipeline list-webhooks --region "ap-northeast-1"
3. 対象のWebhookの選択
表示されたJSONのwebhooks配列の中から今回変更したいWebhookを選んでurlを含みそのWebhook全体を控える(後で使う)(targetPipelineの値などでどれが対象か判別する)控えたurlの例 ⇢ https://ap-northeaset-1.webhooks.aws/trigger?t=testurl
画像
4. GitHubの設定を開く
GitHubのWebhookを設定しているリポジトリに移動し、リポジトリの Settings > Webhooksを開く
5. 対象のWebhookの選択
設定されているWebhookの一覧が表示されているので、その中から目的のWebhookを選んで開く
(開いてPayloadURLを上記で控えたURLと比較する)
6. Webhookの設定を更新する
-
目的のWebhookの設定(Webhooks/Manage Webhook)を開き、設定項目Which events would you like to trigger this webhook?の値を、Let me select individual eventsに変更する(現状はJust a push eventのはず)
7. 保存
- 下の方にUpdate webhookボタンがあるのでセーブする
このままだとWebhookは発行されても、AWS側でプッシュイベント以外がフィルタリングされているのでその設定を変更する
8. AWS側の設定用ファイルを用意する
- AWS CLIに戻り、設定アップデート用の適当なファイルを用意する
nano webhook_updater.json
(別にvimでも何でもいいです)
- 上記のファイルの中身に、アップデート用のJSONを記述する(取得した際のオブジェクトとは形式が違うので注意)
{
"webhook":{
"authenticationConfiguration": {
"SecretToken": "さっき取得したWebhookのSecretToken"
},
"name": "さっき取得したWebhookの名前 ⇢ 例pipeline--Source--unotovivepipeline--1234567890",
"authentication": "GITHUB_HMAC",
"targetPipeline": "さっき取得した(略",
"targetAction": "Source",
"filters": [
{
"jsonPath": "$.action", // ここが変更になった箇所、Webhookのフィルターを変えている
"matchEquals": "published" // ここが変更になった箇所、Webhookのフィルターを変えている
}
]
}
}
- 保存する。
9. AWSCLIで設定を書き換える
aws codepipeline put-webhook --cli-input-json file://webhook_updater.json --region "ap-northeast-1"
10. 終わり
リリースを発行してパイプラインが走れば成功!!!