Quantcast
Channel: Bashタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 2869

JIRA APIをcurlで叩く

$
0
0

はじめに

特定の作業に紐付いて自動で起票されたチケットが大量に溜まっていたので、公式のリファレンスを参考にAPIを叩いてクローズ依頼を出せるようにした。
具体的にやったことは下記。

  1. 対象チケットを取得
  2. クローズ依頼コメント
  3. ステータス遷移

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 metadataAPI(参考2)を実行することで確認可能。

チケットのキー取得

searchAPIを実行すると下記のように結果が返ってくる。

$ 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 metadataAPIを実行することで確認可能。


Viewing all articles
Browse latest Browse all 2869

Trending Articles