CodePipelineの結果を簡単に確認できるシェルスクリプトを作った
作成したシェルスクリプトはgithubにあげました。
開発環境などでCodePilelineを使ったデプロイをしているのですが、以下のようなフローで作業をしていました。
開発環境用のブランチにソースをプッシュ
↓
CodePipelineによってAWS環境に反映(10分程度)
↓
AWSマネジメントコンソールでCodePipelineによるデプロイが完了しているか確認
↓
反映されたら動作確認
太字の箇所が、今回改善したい作業になります。
AWS環境に反映するたびに、マネジメントコンソールにログインしていました。
AWS CLIでもCodePipelineのステータスが取得できることは知っていたのですが、取得できるデータが多くて一目で分かりづらいので、今回のシェルスクリプトを作ってみることにしました。
(シェル素人なので、お手柔らかに… )
作成したシェルスクリプト
前提条件
必要パッケージ: jq, aws-cli
ワンライナーでも書けるくらい単純ですが、チームで配布したい関係上シェルスクリプトにしました。
#!/bin/bash
pipeline_name="$1"
profile="$2"
region="$3"
if [ -z $pipeline_name ]; then
echo 'Pass the pipeline name as an argument.'
exit 1
fi
get_pipeline_state_result=$(aws codepipeline get-pipeline-state \
--name $pipeline_name \
${profile:+--profile "${profile}"} \
${region:+--region "${region}"})
jq_status=$(echo $get_pipeline_state_result | \
jq '.stageStates | map({stageName: .stageName, status: .latestExecution.status })')
echo $jq_status | jq '.'
以下のように使います。
./get_codepipeline_status.sh <パイプライン名:必須> <プロフィール名> <リージョン>
また、aws configureにてdefaultに設定しているアカウントを対象にしたい場合、プロフィール名とリージョンは省略できます。
./get_codepipeline_status.sh <パイプライン名:必須>
プロフィールに設定しているデフォルトのリージョンを対象にしたい場合は、プロフィールのみで大丈夫です。
./get_codepipeline_status.sh <パイプライン名:必須> <プロフィール名>
デプロイが成功していると以下のように表示されます。
[
{
"stageName": "Source",
"status": "Succeeded"
},
{
"stageName": "Build",
"status": "Succeeded"
},
{
"stageName": "Deploy",
"status": "Succeeded"
}
]
パイプラインの途中だと、以下のように表示されます。
[
{
"stageName": "Source",
"status": "InProgress"
},
{
"stageName": "Build",
"status": "Succeeded"
},
{
"stageName": "Deploy",
"status": "Succeeded"
}
]
実装について
aws codepipeline get-pipeline-state --name $pipeline_name
こちらで、現在のパイプラインのステータスを取得できます。
jq '.stageStates | map({stageName: .stageName, status: .latestExecution.status })')
jq コマンドを使って、必要な情報だけを取得しています。
TODO
使いやすくしたいので、空いてる時間に改良していこうと思います。
- それぞれのステータスが変化した時間を一緒に表示する
- マニュアルを表示できるようにする
- jqやaws-cliがインストールされてない場合に警告を出して終了させる
Discussion