2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

記事投稿キャンペーン 「2024年!初アウトプットをしよう」

[Redmine]APIを利用して、イシュー(チケット)の関連付け有無リストを取得する

Last updated at Posted at 2024-01-06

背景・当時の状況

ルールを作るのは容易いが、形骸化や守られないことは多々ある。そして廃れていく。。。
以前チーム内で、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の分かりやすい記事

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?