0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【JIRA API+Python】課題作成や課題検索をコードでやる

Last updated at Posted at 2025-02-11

【JIRA API+Python】課題作成や課題検索をコードでやる

動機

  • JIRAって便利だけど手作業での課題作成が面倒
  • APIを使えば自動で行けそう
  • 備忘録としてまとめる

事前準備

  1. APIトークンを取得

    1. https://id.atlassian.com/manage-profile/security/api-tokens にログインします。
    2. [API トークンを作成] を選択します。
    3. API トークンには、その機能を説明する名前を付けてください。
    4. API トークンの有効期限を選択します。
      1. トークンの有効期限は 1 〜 365 日です。
    5. [作成] を選択します。
    6. [クリップボードにコピー] を選択してから、スクリプトにトークンを貼り付けるか、安全な場所に保存します。
  2. (オプション)環境変数を設定

    export JIRA_USER_NAME=<your-email-address>
    export JIRA_API_TOKEN=<your-api-token>
    export JIRA_BASE_URL=<https://your-domain.attlasian.net/>
    

JIRA APIの認証方法(Python)

  1. ユーザIDとAPIトークンから作った文字列をbase64でエンコード

    • base64へのエンコードは[Qiita]Python3でBase64エンコードした際の型の扱いを参考にさせていただきました

      import os
      import base64
      user_name = os.getenv('JIRA_USER_NAME')
      api_token = os.getenv('JIRA_API_TOKEN')
      auth_info = user_name + ':' + api_token
      encoded_auth_info = base64.b64encode(auth_info.encode()).decode('ascii')
      
  2. エンコードした認証情報をヘッダーに入れる

    • ヘッダー

      headers = {
         'Authorization': 'Basic {}'.format(encoded_auth_info),
         'Content-Type': 'application/json', 
      }
      

課題新規作成

import requests
jira_base_url = os.getenv('JIRA_BASE_URL')
jira_api_url = jira_url + 'rest/api/3/'
request_url = jira_api_url + 'issue' # 課題の追加の場合

item_data = {
    'fields': {
        'assignee': { # 担当者
            'id': <担当者のアカウントID>
        },
        'issuetype': { # 課題タイプ(タスク、エピック、サブタスク等)
            'id': <課題タイプに応じたID>
        },
        'project': { # プロジェクト
            'key': <プロジェクトのキー>
        },
        'parent': { # 親課題
            'key': <親となる課題のキー>
        },
        'summary': <課題のタイトル>
    }
}

response = requests.post(
    request_url,
    headers=headers,
    json=item_data,
)

status_code = response.status_code

if status_code == 201: # ステータスコードが201のとき作成成功
    result = response.json()
    print('作成された課題のキー: {}'.format(result['key']))
  • 注意点
    • プロジェクトや課題にはIDがあるが、文字列扱い
    • 課題タイプ(タスク、エピック、サブタスク)に振られているIDは、プロジェクトごとに(多分)異なる
      • 調べる方法は後述

他にも色々できます

課題のタイプを指定して検索する

  • 使用例:課題タイプが「エピック」の課題のみ調べる

    import os
    import requests
    jira_base_url = os.getenv('JIRA_BASE_URL')
    jira_api_url = jira_url + 'rest/api/3/'
    request_url = jira_api_url + 'search'
    item_data = {
        'fields': [ # fieldsで指定すると、記載した情報のみ返す(何も指定しないと全部返ってくる)
            'summary',
            'issuetype',
            'assignee',
        ],
        'fieldsByKeys': False,
        'jql': 'issuetype = {} AND project = {}'.format(<課題タイプに付与されたID>, <プロジェクトのIDorキー>),
        'maxResults': 10, # 何件まで結果を出すか(デフォルトは50)
        'startAt': 0,
    }
    response = requests.post(
        request_url,
        headers=headers,
        json=item_data,
    )
    
    status_code = response.status_code
    
    if status_code == 200: # ステータスコードが200のとき検索成功
        result = response.json()
        result_issues = result['issues'] # 検索結果の課題リスト
        for result_issue in result_issues:
            print('課題のキー: {}'.format(result_issue['key']))
            print('課題のタイトル: {}'.format(result_issue['fields']['summary']))
    

プロジェクトごとの課題タイプに付与されているIDを調べる

  • 使用例:「エピック」や「タスク」のIDを調べる

    import os
    import requests
    jira_base_url = os.getenv('JIRA_BASE_URL')
    jira_api_url = jira_url + 'rest/api/3/'
    request_url = jira_api_url + 'issuetype/project'
    params = {
        'projectId': <your-project-id>
    }
    response = requests.get(
        request_url,
        headers=headers,
        params=params,
    )
    
    status_code = response.status_code
    
    if status_code == 200:
        result = response.json()
        for res in result:
            print('課題タイプの名前: {}'.format(res['name']))
            print('課題タイプのID: {}'.format(res['id']))
    
0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?