- 生産性向上
- API連携
Jiraタスク追加自動化の試し
- #Python
- #Jira
初めに
【エンジニア募集中】フルリモート可◎、売上/従業員数9年連続UP、平均残業8時間、有給取得率90%、年休124日以上 etc. 詳細はこちらから>
プロジェクト管理ツールとして広く使用されているJiraですが、日々のタスク管理や追加作業に多くの時間を費やしていませんか?今回は、Jira REST APIを活用してタスクの追加を自動化する取り組みについて、私たちのチームでは、定期的に発生するレビュータスクの追加に多くの時間を費やしていました。特に、既存のタスクをコピーし、修正を加えて新しいタスクを作成する作業が頻繁に発生していました。この反復的な作業を自動化できれば、チームの生産性向上につながると考え、Jira REST APIを使用したスクリプト開発に着手しました。
下準備
まず、Jira REST APIのドキュメントを確認します。
https://developer.atlassian.com/server/jira/platform/rest-apis/
このドキュメントで、タスクの作成や更新に必要なエンドポイントや、リクエストの形式について学びます。
Jira APIにアクセスするためには、API用トークンが必要です。
以下の手順で発行しました:
- Atlassianアカウントの設定ページにアクセス
https://id.atlassian.com/manage-profile/security/api-tokens
- トークンの目的を入力し、「作成」をクリック
- 生成されたトークンを安全な場所に保存(このトークンは再表示されないので注意)
タスク情報取得APIを叩いてみる
次に、Postmanを使って、以下画像のように設定します。
今回はタスク情報取得のAPIを試してみます。
以下の手順で実施します。
- メソッド:GET
- 認証:認証方法⇒Basic認証、ユーザー名⇒{Jiraのアカウント}、パスワード⇒{先ほど発行されたトークン}
- URL:https://{domain}.atlassian.net/rest/api/3/issue/{issue_id} (波括弧中のパラメータを入れ替えてください)
※以下の場合はissue_idは”B1-1076”になります
- 送信したら、Responseが返ってきます。
実際運用のサンプル
今回はPGやPTのタスク既に作成された元に、それぞれのレビュー専用タスクを一気に作成するスクリプトを試作してみました。
環境:Python 3.8
INPUT:
JIRAベースリンク JIRA_URL
APIトークン API_TOKEN
取得元のタスクID original_task_id
レビュアーのID USER_ID
POINT数 customfield_10016(デフォルト値:1)
OUTPUT:
Create Copy1 担当者が取得元と同じ
Create Copy2 担当者が特定ユーザー指定(レビュアー)
サンプルは以下となります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
import requests from requests.auth import HTTPBasicAuth import json # JIRA API ドメイン JIRA_URL = "https://xxxxxxx.atlassian.net" # API token API_TOKEN = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-MSo4oip6o0Yk8BbeGzZABL9-r0haRx6kFYb9ese73I2geVr-xxxxxxxxxxxxxx' # 作業するユーザーアカウント USERNAME = 'xxxxxxxxx@xxxx.co.jp' # レビュアーのID USER_ID = "xxxxxxfaf3b93d8ecf471aa" # 取得元のタスクID original_task_id = "B1-1076" # タスク情報を取得 def get_original_task(task_id): url = f"{JIRA_URL}/rest/api/3/issue/{task_id}" response = requests.get(url, auth=HTTPBasicAuth(USERNAME, API_TOKEN)) return response.json() # コピーを作成 def create_task_copy(original_task, assignee): url = f"{JIRA_URL}/rest/api/3/issue" new_task = { "fields": { "project": {"key": original_task["fields"]["project"]["key"]}, "summary": original_task["fields"]["summary"] + "_レビュー", "issuetype": {"id": original_task["fields"]["issuetype"]["id"]}, "description": original_task["fields"]["description"], "assignee": {"id": assignee}, "customfield_10016": 1 #pt数を設定してください } } # 親タスク存在判断 if "parent" in original_task["fields"]: new_task["fields"]["parent"] = {"key": original_task["fields"]["parent"]["key"]} response = requests.post(url, json=new_task, auth=HTTPBasicAuth(USERNAME, API_TOKEN)) return response.json() def main(): # 元タスクを取得 original_task = get_original_task(original_task_id) # 元タスクの担当者 current_user_id = original_task["fields"]["assignee"]["accountId"] # 一本目のコピーを作成 copy1 = create_task_copy(original_task, current_user_id) # 一本目は元の担当者を指定 print(f"Created first copy: {copy1['key']}") # 二本目のコピーを作成 copy2 = create_task_copy(original_task, USER_ID) # 二本目はレビュアー指定 print(f"Created second copy: {copy2['key']}") if __name__ == "__main__": main() # 元タスクを取得 |
【エンジニア募集中】フルリモートも◎(リモート率85.7%)、平均残業8時間、年休124日以上、有給取得率90% etc. 詳細はこちらから>