はじめに
Jira Service ManagementのREST API操作を調査したメモです。
最終的にServer PlatformでREST APIを叩く必要があったため、Jira REST API V3ではなくJira REST API V2前提で調べていますので、注意ください。
JiraのREST API
REST API リファレンス
Jiraにはクラウド版とサーバ版があり、それぞれAPIのバージョンが異なるようです。
2022/9/1時点では、クラウド版がJira REST API V3で、サーバ版の最新が Jira REST API V2(Jira 9.2.0)のようです。
ただ使った限りではクラウド版でもJira REST API V2が実行できるようです。
REST APIで課題の情報を取得する
curl -u "${ID}:${PASSWD}" https://<Project-name>.atlassian.net/rest/api/2/issue/${ISSUE_ID} | jq
以下はあらかじめ変数で設定しておきます。
REST APIで課題をトラジションする
Transitionsの取得
curl -u "${ID}:${PASSWD}" https://<Project-name>.atlassian.net/rest/api/2/issue/${ISSUE_ID}/transitions
Transitionsする
Transitionsの取得で取得したデータから、実行したいTransitionのidを取得して以下を実行します。
TRANSITION_ID=99 #取得したISSUE IDに書き換え BODY='{ "transition": { "id": "'"${TRANSITION_ID}"'" } }' curl \ -u "${ID}:${PASSWD}" \ -X POST -d "${BODY}" \ --header 'Content-Type: application/json' \ --header 'accept: application/json' \ --url https://<Project-name>.atlassian.net/rest/api/2/issue/${ISSUE_ID}/transitions
Transitionsしてかつコメントを追記する
前提
前提として該当Transistionを実行したときに以下のような画面が出てくるよう、Transistionを設定する必要があります。
- Trasition時にコメント追加ができるようにする設定方法
- 画面(Screen)を新規作成します。
フィールドタブ
は何も設定しないでOKです。 - 該当ワークフローを編集します。
- 対象のトランジットを開き、
編集
を開きます 画面
で、新規作成した画面を指定して保存します。
- 対象のトランジットを開き、
- 画面(Screen)を新規作成します。
REST API実行
TRANSITION_ID=99 #取得したISSUE IDに書き換え BODY='{ "update": { "comment": [ { "add": { "body": "Test Message." } } ] }, "transition": { "id": "'"${TRANSITION_ID}"'" } }' curl \ -u "${ID}:${PASSWD}" \ -X POST -d "${BODY}" \ --header 'Content-Type: application/json' \ --header 'accept: application/json' \ --url https://<Project-name>.atlassian.net/rest/api/2/issue/${ISSUE_ID}/transitions
Transitions時に特定のフィールド値を変更する
前提
- その1) Transitionの画面設定
前提として、該当Transitionでフィールド更新ができるよう、Transitionに割り当てた画面
設定で、更新したいフィールドを追加する必要があります。
- その2) カスタムフィールドの内部キー取得
動かした限りでは、例えばカスタムフィールドAwsAccountId
を更新しようとする時、transitionでAwsAccountId
は指定できず、内部で管理しているcustomfield_10016
のような無機質なキーで指定する必要があるようです。Jiraの残念な仕様ですね。
カスタムフィールドの名前と内部のキーのマッピングの一覧は以下で取得することができるので、これで事前に変更したいカスタフィールドの内部キーが何かを確認しておく必要があります。
curl -u "${ID}:${PASSWD}" "https://<Project-name>.atlassian.net/rest/api/2/search?maxResults=1&expand=names"
REST API実行
TRANSITION_ID=99 #取得したISSUE IDに書き換え BODY='{ "fields": { "customfield_10075": "bbb hoge hoge" }, "transition": { "id": "'"${TRANSITION_ID}"'" } }' curl \ -u "${ID}:${PASSWD}" \ -X POST -d "${BODY}" \ --header 'Content-Type: application/json' \ --header 'accept: application/json' \ --url "https://<Project-name>.atlassian.net/rest/api/2/issue/${ISSUE_ID}/transitions?expand=transitions.fields"
課題(ISSUE)の特定フィールドを変更する
ISSUEの特定フィールドを更新する場合は、ISSUEの編集で対応できます。
BODY='{ "fields": { "customfield_10075": "000000000000" } }' curl \ -u "${ID}:${PASSWD}" \ -X PUT -d "${BODY}" \ --header 'Content-Type: application/json' \ --header 'accept: application/json' \ --url "https://<Project-name>.atlassian.net/rest/api/2/issue/${ISSUE_ID}"