🐚

CodePipelineの結果を簡単に確認できるシェルスクリプトを作った

2022/07/24に公開

作成したシェルスクリプトはgithubにあげました。
https://github.com/engineer-taro/codepipeline_status_shell

開発環境などで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