Python JIRA で課題操作してみた

概要

Python JIRA で、課題を作成してみます。

以下と同じような内容で課題を作成するのがゴールです。
(JIRA をサブスクライブした時に出来る、デモプロジェクト内のサンプル課題に期日などを設定したもの)

プログラム経由で既存の課題の入力値を参照し、同じような課題を作成していきます。

JIRA の認証情報設定

以下のように JIRA の認証情報を設定します。

from jira import JIRA

jira = JIRA(
    server='[Atlassian の URL]',
    basic_auth=('[ユーザー名]', '[API Key]')
)

Atlassian の URL は https://xxxx.atlassian.net/ のようなものです。

既存の課題の情報を取得、表示

以下のように既存の課題(DESK-9)の入力値などを取得、表示できます。

def print_issue() -> None:
    issue = jira.issue('DESK-9')
    pprint(issue.raw)

print_issue()

実際に表示したものが以下です。(情報量が多いため、かなり削っています)
「リクエストタイプ」を設定するために customfield_10010 を指定する必要があるなど、初見では解読になかなか時間がかかりそうです。

課題を作成

先ほど取得した情報を元に、以下のように課題作成できます。

def register_issue() -> None:
    issue_content = {
        'project': {
            'key': 'DESK'
        },
        'summary': '優先度の高いリクエスト (コピー)',
        'description': 'n'.join([
            'リクエストの優先度を確認してすばやく問題を特定し、*サービスレベル合意 (SLA)* の目標をより厳しく設定しましょう。リクエストを作成する際、顧客が優先度を設定することも、顧客には表示せずチームで決定することも可能です。',
            '',
            'h3. 試してみる',
            '',
            '自分を担当者に設定し、*最初のレスポンスまでの時間* SLA がカウントダウンするのを停止するコメントを追加します。リクエストを解決してすべての SLA を完全に停止します。',
        ]),
        'issuetype': {
            'name': 'IT Help'
        },
        'priority': {
            'name': 'Highest'
        },
        'duedate': '2022-12-20',
        'customfield_10010': '2',
        'components': [
            {
                'name': 'Jira'
            }
        ],
        'labels': [
            'demo-desk'
        ]
    }

    issue = jira.create_issue(fields=issue_content)
    pprint(issue.key)

register_issue()

実際に作成された課題が以下です。

create_issue() の返り値は Issue と呼ばれるもので、
例えば Issue.key で課題のID(DESK-12 など)を取得できます。

まとめ

Python JIRA で課題を作成する方法について説明しました。

使い始めは課題を作成する時のパラメータの型などを調査するのが中々大変でした。
string なのか list なのか dict なのか、name で指定するのか id で指定するのか…など。

同じようなことをしようとしている方の助けになれれば幸いです。