GitLab APIを使ってtag名とtagのタイムスタンプをcsv形式で出力する
リリース頻度のデータを分析するために、GitLabのtag名とtagを作成した時のタイムスタンプの一覧が欲しくなったのでGitLab API経由で取得するシェルを書きました。
#!/bin/sh BASE_URL="xxxx" API_TOKEN="xxxx" PROJECT_ID="xxxxx" # 全tag一覧を取得するための最大ページ数を取得する TOTAL_PAGES=`curl -D - -s -o /dev/null -X GET -H "PRIVATE-TOKEN: ${API_TOKEN}" "${BASE_URL}/api/v4/projects/${PROJECT_ID}/repository/tags?per_page=100" | grep "X-Total-Pages" | tr -d "X-Total-Pages: " | tr -d "\r"` # タグとタグのタイムスタンプをカンマ区切りで取得する RESULT="" for i in `seq 1 ${TOTAL_PAGES}` do RESULT=${RESULT}`curl -X GET -H "PRIVATE-TOKEN: ${API_TOKEN}" "${BASE_URL}/api/v4/projects/${PROJECT_ID}/repository/tags?per_page=100&page=${i}" | jq -r '.[] | (.name|tostring) + "," + (.commit.authored_date|tostring)'`"\n" done # UTCで返却されるので、JSTに変換し出力する for line in ${RESULT} do TAG_NAME=`echo ${line} | cut -d ',' -f1` TIMESTAMP_UTC=`echo ${line} | cut -d ',' -f2` TIMESTAMP_JST=`date -v+9H -j -f "%Y-%m-%dT%T.000Z" ${TIMESTAMP_UTC} +%Y-%m-%dT%T.000Z` echo ${TAG_NAME},${TIMESTAMP_JST} done
tag一覧の取得は/api/v4/projects/${PROJECT_ID}/repository/tags
のエンドポイントを叩くと取れます。
https://docs.gitlab.com/ce/api/
tag一覧の取得はページングのハンドリングが必要なので、レスポンスヘッダーのX-Total-Pages
からページ数を取得し、最終的にはfor文で回してjqで加工したものを連結します。
タイムゾーンの設定によってはUTCで結果が帰ってくるので、最後にdateコマンドでJSTに変換しています。
上記のシェルを実行すると以下のようなcsvが取得できます。
1.5.0,2019-09-30T10:59:49.000Z 1.4.0,2019-09-26T15:35:21.000Z 1.3.2,2019-09-20T19:00:11.000Z 1.3.1,2019-09-17T18:21:30.000Z 1.3.0,2019-09-11T21:01:37.000Z 1.2.0,2019-09-03T22:08:34.000Z 1.1.0,2019-08-27T22:41:38.000Z 1.0.2,2019-08-20T22:37:28.000Z 1.0.1,2019-08-13T22:13:56.000Z 1.0.0,2019-08-06T21:38:05.000Z 0.3.0,2019-07-30T21:16:30.000Z 0.2.0,2019-07-23T22:38:51.000Z 0.1.0,2019-07-17T15:30:01.000Z
あとはこれをSpreadSheetなりExcelなりPythonなりで集計すればリリース頻度の分析の集計ができます。
LeanとDevOpsの科学[Accelerate] テクノロジーの戦略的活用が組織変革を加速する (impress top gear)
- 作者:Nicole Forsgren Ph.D.,Jez Humble,Gene Kim
- 出版社/メーカー: インプレス
- 発売日: 2018/11/22
- メディア: 単行本(ソフトカバー)