背景・当時の状況
ルールを作るのは容易いが、形骸化や守られないことは多々ある。そして廃れていく。。。
以前チーム内で、Redmineのあるプロジェクト内では関連チケットを必須とするルールを設けました。しかしあまり守られていないと感じたため、関連チケットの有無を定期的に調べて催促したかったのです。
そのため、関連チケットのないイシュー(チケット)を一覧化する方法を調べました。
Version
$ curl --version
curl 7.68.0
結論
未関連イシュー(チケット)のURL炙り出しワンライナー
curl -sk --header 'X-Redmine-API-Key:xxx' 'https://${Redmine Domain or IP}/redmine/projects/${projectname}/issues.json?limit=100' | jq '.issues[].id' | xargs -I{} bash -c 'curl -sk --header 'X-Redmine-API-Key:xxx' 'https://${Redmine Domain or IP}/redmine/issues/{}/relations.json';echo https://${Redmine Domain or IP}/redmine/issues/{}' | grep -v "relation_type" | cut -b 17-
解説
プロジェクト以下のすべてのイシューID取得して一覧化
curl -sk --header 'X-Redmine-API-Key:xxx' 'https://${Redmine Domain or IP}/redmine/projects/${projectname}/issues.json?limit=100' | jq '.issues[].id'
一覧化されたイシューIDを標準入力にして、以下コマンドで再度APIリクエストを行う。ここでは、関連付けの有無を一つずつ取得してechoで標準出力している。
(関連付けの有無を知るためにはイシューIDが必要なため2段階要している)
| xargs -I{} bash -c 'curl -sk --header 'X-Redmine-API-Key:xxx' 'https://${Redmine Domain or IP}/redmine/issues/{}/relations.json';echo https://${Redmine Domain or IP}/redmine/issues/{}'
関連付けがあるイシューに関しては標準出力にrelation_type
と表示されるため、以下コマンドで除外(今回は関連付けが無い一覧を作成するため)
| grep -v "relation_type"
最後に見やすいように整形している
| cut -b 17-
その他Point
1. ?limit
URLクエリパラメータのlimitをつけることで、漏れなく対応可能。
デフォルトだと25件までしか取得できないので注意!
2. curl -s
途中経過なくして、純粋な一覧を取得できる
3. curl -k
SSLエラー無視
4. bash -c
一覧出力にechoを利用しているために利用している。
無いと改行がうまくいかない。
その他参考記事
URL変えれば様々な一覧が取得できるので、bashでフィルターかけてからURL書き換えれば自由自在
Redmine APIの基本
jqの分かりやすい記事