14
25

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

CI/CD関連ツールを連携する - Mattermostへの通知編 -

Last updated at Posted at 2017-12-23

CI/CD関連ツールのユーザー情報をLDAPで一元管理してみる」と「CI/CD関連ツールの認可をLDAPと連携して実現してみる(連携できないツールあり・・・)」で、CI/CD関連ツールの認証・認可についてメモったので、今回は各ツール上でのアクティビティをMattermost(Chatツール)に通知する方法をメモっておく。

Mattermostと連携するツール

  • GitLab
  • Jenkins
  • Redmine

NOTE:

  • SonarQubeについては、Mattermost向けのPluginを見つけられなかったのでいったん保留。Slack用のPluginがあるようなので、時間が取れた時に試して見ようかな〜。

  • NEXUSについては、Mattermostとの連携が必要になるユースケースが思い浮かばなかったので対象から除外した。(仕組があるのかどうかも調べてない)

連携イメージ

「GitLab」「Jenkins」「Redmine」のアクティビティをMattermostに通知し、通知れたメッセージの中に含まれるリンクを押下することでアクティビティの詳細内容を確認できるようにする。

image.png

Mattermost

まず、通知を受けるMattermost側の設定を行う。

Webhookの有効化

Webhookを使えるように設定を変更する。GUIおよび設定ファイルでの変更がサポートされている。

GUI:

image.png

設定ファイル:

mattermost/config_docker.json
{
    "ServiceSettings": {
        "EnableIncomingWebhooks": true
    }
}

通知用のチャネルを追加

各ツールからの通知を受けるためのチャネルを追加する。

NOTE:

本エントリではチャネルを一つだけにしたが、ツール毎にチャネルを分けた方がわかりやすい気はしてる。

image.png

Webhook受付用のエンドポイントを生成

Webhook受付用のエンドポイントを作成する。

image.png

image.png

image.png

image.png

エンドポイントにアクセスするためのURLが生成されるので、このURLをコピーしておく。

image.png

NOTE:

Dockerを使って環境構築している場合は、「ホスト名」と「ポート名」をDockerコンテナ内で通信できる値に置き換える必要がある。本エントリーでは・・・「localhost -> mattermost」「18065 -> 8065」に置き換える。
つまり・・・「http://mattermost:8065/hooks/dzmpwypaefbo3pt3cu69ebwk6w」 がWebhook受付用のエンドポイント(URL)になる。

GitLab

外部アクセス用のURLの設定

外部からアクセスするためのURLを設定する。これを設定しないと・・・GitLabからMattermostへ通知するメッセージの中に含まれるURLが正しく組み立てられない。

docker-compose.ymlで指定する際の設定例:

services:
  gitlab:
    build: ./gitlab
    container_name: cicd-gitlab
    environment:
      GITLAB_OMNIBUS_CONFIG: |
        external_url 'http://localhost'
    ports:
      - '80:80'
      - '433:433'
    links:
      - "openldap:ldap"

gitlab.rbで指定する際の設定例:

external_url 'http://localhost'

Mattermost notificationsサービスのセットアップ

GitLabに内臓されている連携サービス(Mattermost notificationsサービス)を利用して、Mattermostへメッセージ通知するための設定を行う。

image.png

Activeをチェックし、Webhook欄にWebhook受付用のエンドポイントのURLを指定する。

image.png

「Test settings and Save changes」を押下すると・・・Mattermost側に以下のような通知が行われる。

image.png

Wikiを修正して通知を受ける

テストだとやや心もとないので・・・Wikiページを編集してみると・・・

image.png

Mattermost側に以下のような通知が行われ、Wikiページが更新されたことを検知することができる。

image.png

NOTE:

冒頭で紹介したexternal_urlの指定がないと・・・メッセージ内のリンクを押しても正しいページに遷移することができないケースがある。

Jenkins

Mattermost Notification Pluginのセットアップ

Jenkinsビルドの内容をMattermostに通知する場合は、Mattermost Notification Pluginを利用する。

image.png

Mattermost Notification Pluginインストール後に、Mattermost Notification Pluginのグローバル設定を行う。Build Server URLに外部からアクセスするためのURLを設定する。これを設定しないと・・・JenkinsからMattermostへ通知するメッセージの中に含まれるURLが正しく組み立てられない。

image.png

Jobの作成

ビルド内容を通知するJobを作る。

image.png

Post-build Actionsで「Mattermost Notifications」を選んで通知設定を行う。

image.png

「Test Connection」を行うと以下のような通知が行われる。

image.png

Job実行して通知を受ける

実際にJobを実行してみる。

image.png

Jobが成功すると、以下のような通知が行われる。

image.png

Jobが失敗すると、以下のような通知が行われる。

image.png

Redmine

Redmine Messanger Pluginのセットアップ

Redmine上でのアクティビティをMattermostに通知する場合は、Redmine Messanger Pluginを利用する。

まず、Dockerコンテナに入る。

$ docker exec -i -t cicd-redmine bash

GitHubからソースをダウンロードする。

root@f70b7347f503:/usr/src/redmine# git clone https://github.com/AlphaNodes/redmine_messenger.git plugins/redmine_messenger
Cloning into 'plugins/redmine_messenger'...
remote: Counting objects: 645, done.
remote: Compressing objects: 100% (14/14), done.
remote: Total 645 (delta 5), reused 19 (delta 2), pack-reused 622
Receiving objects: 100% (645/645), 404.02 KiB | 467.00 KiB/s, done.
Resolving deltas: 100% (280/280), done.
Checking connectivity... done.
root@f70b7347f503:/usr/src/redmine# 

Redmine Messanger Pluginをビルドしてインストールする。

root@f70b7347f503:/usr/src/redmine# bundle exec rake redmine:plugins:migrate RAILS_ENV=production
Migrating redmine_messenger (Redmine Messenger)...
== 1 CreateMessengerSettings: migrating =======================================
-- create_table(:messenger_settings)
   -> 0.0124s
== 1 CreateMessengerSettings: migrated (0.0126s) ==============================

== 2 AddDefaultMentions: migrating ============================================
-- add_column(:messenger_settings, :default_mentions, :string)
   -> 0.0010s
== 2 AddDefaultMentions: migrated (0.0011s) ===================================

root@f70b7347f503:/usr/src/redmine#

Redmineを再起動してPluginページを開くと、Redmine Messanger Pluginが認識されていることが確認できる。

image.png

「Configure」リンクを押下して、Redmine Messanger Pluginの設定を行う。

image.png

外部アクセス用のURLの設定

「Host name and path」に外部からアクセスするためのURLを設定する。これを設定しないと・・・RedmineからMattermostへ通知するメッセージの中に含まれるURLが正しく組み立てられない。

image.png

Issueを作って通知を受ける

Issueを作る。

image.png

Issueの作成を行うと、以下のような通知が行われる。

image.png

14
25
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
25

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?