のぴぴのメモ

自分用のLinuxとかの技術メモ

Jira Service Management Rest APIでカスタム フィールドのオプションを変更したメモ

選択リスト型のカスタム フィールドの選択できる値のリスト更新を Rest APIで実行したメモです。

手順メモ

事前設定

ID="JiraユーザのID"
PASSWD="API トークン"
PROJECT_URL="プロジェクトのURLのxxxx.atlassian.netのxxxx部分"

カスタムフィールドのオプション(リストの選択値一覧)情報の取得

事前設定
FIELD_NAME='AwsSupportServices'
PROJECT_NAME='aws portal'
ISSUE_TYPE_NAME='AWS Support'
プロジェクトのID取得
PROJECT_ID=$(
    curl \
        -s -u "${ID}:${PASSWD}" \
        --request GET \
        --header 'accept: application/json'  \
        --url "https://${PROJECT_URL}.atlassian.net/rest/api/2/project/search" | \
    jq -r '.values[] | select ( .name == "'"${PROJECT_NAME}"'" ) | .id' )
echo ${PROJECT_ID}
課題タイプのID取得
ISSUE_TYPE_ID=$(
    curl \
        -s -u "${ID}:${PASSWD}" \
        --request GET \
        --header 'accept: application/json'  \
        --url "https://${PROJECT_URL}.atlassian.net/rest/api/2/issuetype" | \
    jq -r '.[] | select( .name == "'"${ISSUE_TYPE_NAME}"'" ) | .id' )
echo ${ISSUE_TYPE_ID}
カスタム フィールドのID取得
CUSTOME_FIELD_ID=$(
    curl \
        -s -u "${ID}:${PASSWD}" \
        --request GET \
        --header 'accept: application/json'  \
        --url "https://${PROJECT_URL}.atlassian.net/rest/api/2/search?maxResults=1&expand=names" | \
     jq -r '.names | to_entries | .[] | select( .value == "'"${FIELD_NAME}"'" ) | .key' )
echo $CUSTOME_FIELD_ID
カスタム フィールドの コンテキスト情報の取得

アトラシアンのドキュメントによると、「カスタム フィールド コンテキストは、同じフィールドの異なる設定です。プロジェクトに対して既定値が異なる複数のカスタム フィールドを作成する代わりに、コンテキストを使用して同じ結果を得られます。」とのことです。
同じカスタムフィールドでもプロジェクトごとにリストから選択できる値を変えることなどができるようです。

BODY_DATA='{
  "mappings": [
    {
      "issueTypeId": "'"${ISSUE_TYPE_ID}"'",
      "projectId": "'"${PROJECT_ID}"'"
    }
  ]
}'

CONTEXT_ID=$( \
    curl \
        -s -u "${ID}:${PASSWD}" \
        --request POST \
        --header 'Content-Type: application/json' \
        --header 'accept: application/json'  \
        --url "https://${PROJECT_URL}.atlassian.net/rest/api/2/field/${CUSTOME_FIELD_ID}/context/mapping" \
        --data "${BODY_DATA}" \
    | jq -r '.values[0].contextId' )
echo $CONTEXT_ID
カスタム フィールドのオプション(リストの選択値一覧)の取得
curl \
    -s -u "${ID}:${PASSWD}" \
    --request GET \
    --header 'accept: application/json'  \
    --url "https://${PROJECT_URL}.atlassian.net/rest/api/2/field/${CUSTOME_FIELD_ID}/context/${CONTEXT_ID}/option" | jq

カスタムフィールドのオプション更新

ここでは選択リスト(カスケード)のオプション変更を例にメモを記載します。

親リスト追加
BODY_DATA='{
  "options": [
    {
      "disabled": false,
      "value": "hoge hoge"
    }
  ]
}'
curl \
    -s -u "${ID}:${PASSWD}" \
    --request POST \
    --header 'Content-Type: application/json' \
    --header 'accept: application/json'  \
    --url "https://${PROJECT_URL}.atlassian.net/rest/api/2/field/${CUSTOME_FIELD_ID}/context/${CONTEXT_ID}/option" \
    --data "${BODY_DATA}"
作成した親リストにカスタム フィールド オプションを追加する
PARENT_ID='作成した親のIDを指定'
BODY_DATA='{
  "options": [
    {
      "optionId": "'"${PARENT_ID}"'",
      "disabled": true,
      "value": "Manhattan"
    }
  ]
}'

curl \
    -s -u "${ID}:${PASSWD}" \
    --request POST \
    --header 'Content-Type: application/json' \
    --header 'accept: application/json'  \
    --url "https://${PROJECT_URL}.atlassian.net/rest/api/2/field/${CUSTOME_FIELD_ID}/context/${CONTEXT_ID}/option" \
    --data "${BODY_DATA}"
既存のカスタムフィールド オプションの更新
CUSTOME_FIELD_OPTION_ID='変更したい既存フィールドのIDを指定'
BODY_DATA='{
  "options": [
    {
      "id": "'"${CUSTOME_FIELD_OPTION_ID}"'",
      "disabled": false,
      "value": "Manhattan"
    }
  ]
}'

curl \
    -s -u "${ID}:${PASSWD}" \
    --request PUT \
    --header 'Content-Type: application/json' \
    --header 'accept: application/json'  \
    --url "https://${PROJECT_URL}.atlassian.net/rest/api/2/field/${CUSTOME_FIELD_ID}/context/${CONTEXT_ID}/option" \
    --data "${BODY_DATA}"