はじめに
特定の作業に紐付いて自動で起票されたチケットが大量に溜まっていたので、公式のリファレンスを参考にAPIを叩いてクローズ依頼を出せるようにした。
具体的にやったことは下記。
- 対象チケットを取得
- クローズ依頼コメント
- ステータス遷移
1. 対象チケット取得
HTTP_STATUS=`curl --silent --request POST \
--url "https://your-domain.atlassian.net/rest/api/2/search" \
--user "$USER:$PASSWORD" \
--header "Accept: application/json" \
--header "Content-Type: application/json" \
--data "{
\“jql\”: \”project = JIRA AND type = 1111 AND cf[2222] AND assignee = currentUser()\”,
\"maxResults\": 1000,
\"fields\": [
\"key\"
],
\"startAt\": 0
}" \
-w '%{http_code}\n' \ # エラーハンドリング用にHTTPステータスコードを変数に格納
-o response.txt`
JQL
コメント/ステータス遷移対象とするチケット群を検索するためのJQL( 参考1)を作る。
カスタムフィールドのキー/バリューはGet edit issue metadata
API(参考2)を実行することで確認可能。
チケットのキー取得
search
APIを実行すると下記のように結果が返ってくる。
$ cat response.txt
{
"expand": "schema,names",
"startAt": 0,
"maxResults": 1000,
"total": 20,
"issues": [
{
"expand": "operations,versionedRepresentations,editmeta,changelog,renderedFields",
"id": "3333",
"self": "https://your-domain.atlassian.net/rest/api/2/issue/3333",
"key": "JIRA-4444"
},
{
"expand": "operations,versionedRepresentations,editmeta,changelog,renderedFields",
"id": "5555",
"self": "https://your-domain.atlassian.net/rest/api/2/issue/5555",
"key": "JIRA-6666"
},
...
]
}
後続処理で使用するのはkey
だけなので、jq
を使って抽出する。
$ cat response.txt | jq .issues[].key -r
JIRA-4444
JIRA-6666
...
以降のコメント/ステータス遷移処理は上記のkeyのリストでループさせる。
for ticket_key in `cat response.txt | jq .issues[].key -r`
2. コメント
HTTP_STATUS=`curl --silent --request POST \
--url "https://your-domain.atlassian.net/rest/api/2/issue/$ticket_key/comment" \
--user "$USER:$PASSWORD" \
--header "Accept: application/json" \
--header "Content-Type: application/json" \
--data "{
\"body\": \"クローズをお願いいたします。\"
}" \
-w '%{http_code}\n'` # エラーハンドリング用にHTTPステータスコードを変数に格納
windowsのgitbashからだと日本語がうまく扱えなかったので、実際は--data @comment.txt
のようにUTF-8のテキストファイルを読み込ませるようにした。
3.ステータス遷移
HTTP_STATUS=`curl --silent --request POST \
--url "https://your-domain.atlassian.net/rest/api/2/issue/$ticket_key/transitions" \
--user "$USER:$PASSWORD" \
--header "Accept: application/json" \
--header "Content-Type: application/json" \
--data "{
\"transition\": {
\"id\": \"777\"
}
}" \
-w '%{http_code}\n'` # エラーハンドリング用にHTTPステータスコードを変数に格納
JQL作成時と同様に遷移先のステータスidは、既にそのステータスになっているチケットに対してGet edit issue metadata
APIを実行することで確認可能。