Redmine へ新規チケットを登録する

チケット管理システムにチケットが登録された場合に Kompira Enterprise から何らかの処理を行わせたり、逆に Kompira Enterprise の処理結果よりチケットを新規登録、内容更新を行いたい場合があると思います。本稿では、代表的なチケット管理システム「Redmine」に新規チケットを登録する方法をご紹介します。

※本稿では既に動いている Redmine サーバーがあり、管理者権限でチケット登録ができる状態を想定しています。


動作確認環境

ソフトウェア バージョン
Kompira Enterprise 1.4.10.post10
OS CentOS 6.10
Redmine 3.2.4

または

ソフトウェア バージョン
Kompira Enterprise 1.5.5.post11
OS CentOS 7.8.2003
Redmine 4.2.1

または

ソフトウェア バージョン
Kompira Enterprise 1.6.2.post4
OS CentOS 7.8.2003
Redmine 4.2.1

Redmine プロジェクトの作成

まずは新規のプロジェクトを作成します。名称を「kompira-project」としています。

Redmine の API 設定

Kompira Enterprise からは Redmine の REST API を呼び出してチケット操作を行います。この際には以前の記事で紹介した Kompira Enterprise の組み込み関数 urlopen() を使用します。また API 呼び出しの応答結果は JSON 形式のため、パースする必要があります。

まずは Redmine の REST API を有効にしていきます。
画面左上の「管理」をクリックして、「設定」>「API」と移動してください。
以下の画面で「RESTによるWebサービスを有効にする」を選択して「保存」をクリックします。

次に API アクセスキーを取得します。
画面右上の「個人設定」に移動して「APIアクセスキー」の項目にある「表示」をクリックしてください。

※表示されない場合には「リセット」をクリックしてみてください。

表示されたキーをテキストエディタなどにコピーしておきます。

新規チケットの投稿

Redmine の API は次のページで調べることができます。
http://www.redmine.org/projects/redmine/wiki/Rest_api
http://www.r-labs.org/projects/r-labs/wiki/Redmine_REST_API (日本語)

これによると、チケット登録の API は
http://(Redmine の URL)/issues.json
であることが分かります。ここで「.json」 は応答のフォーマットを表しています。

この API を urlopen() を使って呼び出すジョブフローを作成します。

| redmine_url = "http://(Redmine の URL)/issues.json" |
| access_key = "your_access_key" |
| project_id = 1 |
| ticket_title = "test ticket" |

print("チケット登録") ->
[
    dat = {
        "issue": {
            "subject": ticket_title,
            "project_id": project_id
        },
        "key": access_key
    }
] ->
urlopen(
    url=redmine_url,
    data=dat,
    timeout=20,
    encode="json",
    http_method="POST"
) ->
[result = json_parse($RESULT.body)] ->
print("チケット登録結果\n", result["issue"])

パラメータ redmine_url は、 Redmine サーバーの URL に「/issues.json」をつけたものになります。
access_key は、Redmine の管理画面からコピーした API アクセスキーの文字列を指定します。
project_id は、作成したプロジェクトの ID を指定します。
ticket_title は、これから作成するチケットの表題となる任意の文字列です。

プロジェクトの ID を確認したい場合は、http://(Redmine の URL)/projects.xml にアクセスして、プロジェクトの一覧を確認してください。

例えば以下の場合、kompira-project の ID は1、test の ID は2となります。

<projects total_count="2" offset="0" limit="25" type="array">
  <project>
    <id>1</id>
    <name>kompira-project</name>
    <identifier>kompira-project</identifier>
    <description/>
    <status>1</status>
    <is_public>true</is_public>
    <inherit_members>false</inherit_members>
    <created_on>2021-06-11T05:28:31Z</created_on>
    <updated_on>2021-06-11T05:28:31Z</updated_on>
  </project>
  <project>
    <id>2</id>
    <name>test</name>
    <identifier>test</identifier>
    <description/>
    <status>1</status>
    <is_public>true</is_public>
    <inherit_members>false</inherit_members>
    <created_on>2021-06-11T06:47:58Z</created_on>
    <updated_on>2021-06-11T06:47:58Z</updated_on>
  </project>
</projects>

さて、このジョブフローを実行すると以下のように Redmine に新規チケットが作成されます。

※ HTTP 422 エラーが返ってくる場合は、 Redmine 側でステータス、チケットトラッキング、優先度が設定されているかを確認してください 。

Kompira Enterprise のコンソールには、以下のような JSON 形式の API の応答が表示されています。

このままでは読みにくいため少し整形して表示してみましょう。

ジョブフロー最後の

print("チケット登録結果\n", result["issue"])

の部分を例えば以下のようにすることで、特定の項目を抜粋して表示することができます。

(今回は id 、status 、priority を表示)

print("チケット登録結果") ->
print("ID: ",result.issue.id) ->
print("ステータス: ",result.issue.status.name) ->
print("優先度: ",result.issue.priority.name)

本稿で作成したチケットはタイトルを指定しただけの簡単なものですが、ジョブフロー中の dat で指定するリクエストを追加することにより、priority_id 、description 、category_id などを直接指定することも可能です。詳しくは先に紹介した API 仕様をご覧ください。

またチケットの新規作成以外にも、チケットの更新、削除、一覧表示なども可能です。各 API ごとに定められた URL と、HTTP メソッドの指定を適切に行うことで実行することができます。こちらも詳細については API 仕様をご覧ください。

本稿で紹介したジョブフローを既存のジョブフローに組み込むことで、Kompira Enterprise を利用した作業結果や監視結果によりチケット発行を自動で行うことができます。

TOP