JenkinsとRocket.Chatを連携させる

Notofication from Jenkins
Jenkinsからの通知

前回の記事で連携のための準備はできていますので、さっそく連携させてみましょう。

Jenkinsで「新規ジョブ作成」からジョブを作成します。ここでは「フリースタイル・プロジェクトのビルド」を選択し、タスク名を “jenkins-rocketchat” としておきましょう。

Jenkins Job Setting of Rocket.Chat
Jenkinsジョブ設定 (Rocket.Chat)

連携の動作確認のためのジョブなので、実際のビルド等は実行させません。ジョブの設定画面最下部の「ビルド後の処理の追加」プルダウンから “RocketChat Notifications” を選択すると、通知できる項目が表示されます。今回はテストなのですべてにチェックを入れておきます。右側にある「高度な設定…」から投稿先のチャンネルを変更できたりしますが、今回は触らないで設定を保存します。

作成したジョブ (プロジェクト)のページが開きますので、「ビルド実行」を選択します。するとジョブが実行され、ビルド履歴が増えます。Rocket.Chatの “jenkins” チャンネルを開くと、Jenkinsのビルド開始と終了の通知メッセージが届いていることを確認できます。

JenkinsとRocket.Chatを連携させる準備をする

さて、ここまででGitBucket, Jenkins, Rocket.Chatの各サービスをインストール・設定してきました。個々のサービスを個別に使うだけでなく、連携させることでより便利なCIを実現できます。

今回はJenkinsとRocket.Chatを連携させて、Jenkinsで発生したイベントをRocket.Chatのチャンネルに自動的に通知するようにしてみます。

まずはRocket.ChatにJenkins用のアカウントを追加します。アカウントを作成したら、Jenkinsからの通知を受け取るチャンネルを作成します。このチャンネルに普段使っているアカウントと、今作成したJenkins用のアカウントを登録します。ここでは “jenkins” アカウントと “jenkins” チャンネルを作成したことにします。

次はJenkinsの設定です。「Jenkinsの管理」画面から「プラグンの管理」を選択し、「利用可能」タグから “RocketChat Notifier” にチェックを入れて「ダウンロードして再起動後にインストール」を選択します。ダウンロードが成功したら「インストール完了後、ジョブがなければJenkinsを再起動する」にチェックを入れるとJenkinsが再起動し、RocketChat Notifierプラグインがインストールされます。

インストールに成功したら再度「Jenkinsの設定」に戻り、「システムの設定」を開きます。ページ末尾に “Global RocketChat Notifier Settings” がありますので各フィールドを埋めて保存します。

Jenkins Setting of RocketChat
JenkinsのRocket.Chat設定
  • Rocket Server URL: docker-compose.ymlの設定に合わせて http://rocket.chat:3000
  • Login Username: この記事の冒頭で設定したアカウント “jenkins”
  • Login password: アカウント “jenkins” に設定したパスワード
  • Channel: この記事の冒頭で設定したチャンネル “jenkins”
  • Build Server URL: 空欄のままでOK

右下にある “Test Connection” で “Success” と表示されれば疎通OKですので、設定を保存しておきましょう。これで連携のための準備は完了です。

Rocket.Chatを初期設定する

続いてRocket.Chatも設定します。docker-compose.ymlの設定に従って、ブラウザで8082番ポートにアクセスすると、ログイン画面が表示されます。インストール直後はアカウントが作成されていませんので、「新しいアカウントを登録」へ進みます。

新規アカウントの登録フォームを埋めて登録すると、管理アカウントとして登録されます。その後、ROOT_URLの設定が間違っていれば修正するかの確認があり、問題なければユーザ名を登録確認して利用開始です。

さて、この状態では登録フォームから自由にアカウントを作成できるようになっています。これを無効にしましょう。画面左上のユーザ名が表示されているプルダウンを選択し、「管理」から「アカウント」選択し、”Registration”の”EXPAND”で展開される項目から「登録フォームへのアクセス」の値を「無効」に変更し、「変更を保存」でOKです。

JenkinsとRocket.ChatもDockerで動かす

GitBucketをDockerで動かせましたので、続いてJenkinsRocket.ChatもDockerで動かしましょう。いずれも公式のDockerイメージが公開されていますので、それを利用させて頂きましょう。

ここでは、GitBucketは8080番、Jenkinsは8081番、Rocket.Chatは8082番の各ポートで動作するよう設定します。設定ファイル docker-compose.yml はこんな感じになります。

version: '2'

services:
  gitbucket:
    image: takezoe/gitbucket
    container_name: gitbucket
    volumes:
      - ./gitbucket/data:/gitbucket
    environment:
      - TZ=JST-9
    ports:
      - 8080:8080
      - 29418:29418

  jenkins:
    image: jenkins:alpine
    container_name: jenkins
    volumes:
      - ./jenkins/home:/var/jenkins_home
      - ./jenkins/executors.groovy:/usr/share/jenkins/ref/init.groovy.d/executors.groovy
    environment:
      - JAVA_OPTS=-Duser.timezone=Asia/Tokyo
    ports:
      - 8081:8080
      - 50000:50000

  db:
    image: mongo:3.0
    container_name: db
    volumes:
      - ./db/data:/data/db
    command: --smallfiles

  rocket.chat:
    image: rocket.chat:latest
    container_name: rocket.chat
    environment:
      - ROOT_URL=http://localhost:8082
    links:
      - db
    ports:
      - 8082:3000

Rocket.ChatはMongoDBに依存していますので、mongodbの設定もあります。command行で --smallfiles の指定がないと./db/data以下に巨大なファイルが作成されますのでご注意を。また、ROOT_URLの値は環境に合わせて適宜変更して下さい。

設定ファイルを編集・保存し終えたら docker-compose up で各サービスが起動します。ブラウザから各サービスにアクセスしてみましょう。

2016/02/21追記: environmentによるタイムゾーンの設定を追加しました。