うさぎ組

ソフトウェア開発、チームによる製品開発、アジャイル、ソフトウェアテスト

JenkinsからRedmineのチケットをクローズとかするPluginつくったった

公開場所

BitBucket:【BaseReality6thLayer / RedmineRest — Bitbucket
バイナリ:【Dropbox - RedmineRest.hpi

できること

ジョブが成功したときにコミットコメントに含まれているチケットを特定のステータスに更新します。
RedmineREST APIを使って更新しにいきます。
コミットコメントは「close refs #12」みたいな感じです。複数のチケットを指定する場合は「close refs #12 #13」みたいな感じです。「close refs」までは固定です。
対象のRedmineと更新させたいステータスはJenkins全体とジョブの両方で設定できて、ジョブの設定が空文字の場合はJenkins全体の設定を使うようになっています。

インストール方法

バイナリをダウンロードして、Jenkinsのプラグインの管理 -> 高度な設定 と遷移し、「プラグインのアップロード」するからRedmineRest.hpiをアップロードしてください。
Jenkinsを再起動するとインストールされるはずです。

設定方法

  1. RedmineREST API有効化
    1. Redmine(たぶん)1.0以降であれば大丈夫です。REST APIを使うので、管理 -> 設定と遷移し、認証タブの「RESTによるWebサービスを有効にする」のチェックを有効にしてください。
  2. Redmine REST APIアクセスキーのメモ
    1. 管理者ユーザーの個人設定画面から右側にある「APIキー 表示」をクリックして表示される英数字をメモしておきます。
  3. Jenkinsからチケット自動更新するときの自動更新後のステータスのIDをメモ
    1. 管理 -> チケットのステータス と遷移し、更新後の状態にしたいステータスをクリックするとステータスの編集画面に遷移します。このとき開かれるURLの末尾が「issue_statuses/4/edit」などとなっています。この最後から2番目の数字(ここだと4)がIDになります。文字列でも指定出来るのですが、文字化けとか対処する必要がでそうなので、ID指定にしました。
  4. Jenkinsでシステムの設定から「Redmine Rest」を設定する
    1. RedmineのトップページのURLと2と3でメモした値をそれぞれ「Redmine URL」「API Access Key」「Status ID」に設定します。「Project Name」は今の機能では設定する必要ないのですが、今後追加する機能(チケットの自動作成)などで使うので先に項目だけあります。
  5. 自動更新したいジョブの設定でRedmine Restを有効にする
    1. ジョブの設定画面で「ビルド後の通知を追加する」から「Redmine REST」を選択してください。先の設定と同じ項目が出ると思います。ここで設定をすると、先の画面で設定した値が上書きされます。必要がなければ特に値を設定しなくても大丈夫です。

実行

ビルドを実行すればおkです。ただ、コミットコメントは「変更」から取得しているので、「前回のビルドとリビジョンに差のないビルド実行」はJenkinsが変更として検知しないので、今回のプラグインは動作対象外になります。
つまり、「新しいコミットにおいて、close refs #xxx となっているときにビルドが成功すればそのチケットを任意のステータスに更新する」という感じです。

現状とか今後

まだまだ追加したい機能があるのですけど、まぁとりあえず動くものを触ってもらえる人がいそうなので使いにくい状態ではあるけど、公開しました。
なので手動でちょこちょこと動かしたくらいしかテストしていません。動作に問題があれば連絡ください。直します。
今後追加したい機能は
「ユーザーが指定した正規表現でマッチ」と「更新後のステータス」を1セットにしていくつも指定できるようにする。
「ビルドのステータスによってチケットを作成する」
「チケットの作成、更新時に特定のユーザーをウォッチャーに追加する」
くらいをやりたいです。
たぶん今月中には実装して、正式にJenkins Pluginとして申請する予定です。
面倒な人は月末まで待っているほうがいいかも。


他にもBitBucketとかGitHubのIssuesと連携するPluginをつくろうと思っています。あとTracもいじってみたいですね。


Jenkins

Jenkins