CodeZine(コードジン)

特集ページ一覧

障害発生時にも漏れなし! Zabbixの監視アラートでRedmine上にチケットを起票する仕組みをつくろう

タスクが10倍気持ちよくなる 開発環境のリノベーション講座 第2回

  • LINEで送る
  • このエントリーをはてなブックマークに追加

目次

チケットの更新

 チケットの更新は PUT メソッドで実施できます。ここでは、subject の変更と notes(コメント)の追記を行ってみます。更新用ファイルcurl_put.jsonの内容は、次のとおりとします。

{
  "issue": {
    "subject": "cURL からのテストチケット",
    "notes": "Changing the subject" 
  }
}

 実行コマンドは次のとおりです。宛先URLは新規作成のときとは異なり、更新対象チケットのID 6番を含む記述になっています。

$ curl -v -H "Content-Type: application/json" -X PUT \
-H "X-Redmine-API-Key: $API_KEY" --data "@curl_put.json" \
http://redmine-server/issues/6.json


チケットの削除

 チケットの削除は、DELETE メソッドで行います。なお、削除では追加・変更するデータはないため --data オプションは使いません。

$ curl -v -H "Content-Type: application/json" -X DELETE \
-H "X-Redmine-API-Key: $API_KEY" http://redmine-server/issues/6.json


Pythonからのチケット操作

 次はPythonのコードで、Redmineのチケットを操作してみましょう。まずは、コマンドラインの対話モードで確認してみます。

 以下で紹介するメソッドについては、Webサイト「Issues - Python Redmine」(英語)に詳しい解説があります。


チケットの作成

 project_id を「biz」、subject を「Python からの書き込み」とするチケットを作成します。

>>> from redmine import Redmine
>>> redmine = Redmine('http://redmine-server', key='API_KEY')
>>> issue = redmine.issue.create(project_id='biz', subject=u'Python からの書き込み')
>>> issue.id
11


チケットの変更

 対象チケットを get メソッドで呼び出し、適宜プロパティに変更を加えます。最後に、save メソッドを呼び出して変更を反映させます。

>>> issue = redmine.issue.get(11)
>>> issue.notes = u'変更のテスト'
>>> issue.save()
True


チケットの削除

 チケットの削除は、対象のチケットのIDを引数に、delete メソッドを呼び出すだけです。

>>> redmine.issue.delete(10)
True


チケット作成スクリプトの作成

 今度は、コマンドラインからチケット作成を行うスクリプトを作成してみます。次に示すのがそのソースコードです。筆者のGitHubからダウンロードできます。

import sys
from redmine import Redmine
from optparse import OptionParser

parser = OptionParser()
parser.add_option('-u', '--url', dest='url', help='Endpoint url of a redmine')
parser.add_option('-k', '--key', dest='key', help='API Access  Key')
parser.add_option('-s', '--subject', dest='subject', help='Subject of a reporting issue')
parser.add_option('-p', '--project_id', dest='project_id', help='Project ID of the issue')
parser.add_option('-d', '--description', dest='description', help='Description of the issue')
(options, args) = parser.parse_args()

redmine = Redmine(options.url, key=options.key)
issue = redmine.issue.create(project_id=options.project_id, 
                             subject=options.subject)
if options.description is None:
    issue.description = u"This ticket was created by issue_reporter.py"
else:
    issue.description = options.description
issue.notes = u"""
このチケットは自動登録されました。
確認、対応をお願いします。
"""

issue.save()

 urlkeyproject_idsucjectdescription という属性の値は、コマンドライン引数で指定します(たとえば url-u--url オプションで指定)。

 コマンドライン引数は、optparse モジュール(コマンドラインオプション解析器) を利用して読み込みます。それを parse_args メソッドにより options という変数に代入して、チケットの登録に使用しています。


  • LINEで送る
  • このエントリーをはてなブックマークに追加

バックナンバー

連載:タスクが10倍気持ちよくなる 開発環境のリノベーション講座

著者プロフィール

あなたにオススメ

All contents copyright © 2005-2021 Shoeisha Co., Ltd. All rights reserved. ver.1.5