LoginSignup
3
3

More than 5 years have passed since last update.

Hubot | 自作Script | gitlab_ci_sample.coffee - GitLab CIとの連携を検証するサンプル

Posted at

Hubot | 自作Script | gitlab_ci_sample.coffee - GitLab CIとの連携を検証するサンプル

概要

GitLab CI との 連携を検証するサンプル script を作成します。
GitLab CI の Web hooks と、 Hubot の Web サーバー機能を利用します。

仕様

filename

gitlab_ci_sample.coffee

Hubot gitlab 検証用URL

仕様補足

GitLab CI の Web Hook が返却してくる json のフォーマットについては下記参照

  {
      "build_id": 2,
      "build_status": "failed",
      "build_started_at": "2014-05-05T18:01:02.563Z",
      "build_finished_at": "2014-05-05T18:01:07.611Z",
      "project_id": 1,
      "project_name": "Brightbox \/ Brightbox Cli",
      "gitlab_url": "http:\/\/localhost:3000\/brightbox\/brightbox-cli",
      "ref": "master",
      "sha": "a26cf5de9ed9827746d4970872376b10d9325f40",
      "before_sha": "34f57f6ba3ed0c21c5e361bbb041c3591411176c",
      "push_data": {
        "before": "34f57f6ba3ed0c21c5e361bbb041c3591411176c",
        "after": "a26cf5de9ed9827746d4970872376b10d9325f40",
        "ref": "refs\/heads\/master",
        "user_id": 1,
        "user_name": "Administrator",
        "project_id": 5,
        "repository": {
          "name": "Brightbox Cli",
          "url": "dzaporozhets@localhost:brightbox\/brightbox-cli.git",
          "description": "Voluptatibus quae error consectetur voluptas dolores vel excepturi possimus.",
          "homepage": "http:\/\/localhost:3000\/brightbox\/brightbox-cli"
        },
        "commits": [
          {
            "id": "a26cf5de9ed9827746d4970872376b10d9325f40",
            "message": "Release v1.2.2",
            "timestamp": "2014-04-22T16:46:42+03:00",
            "url": "http:\/\/localhost:3000\/brightbox\/brightbox-cli\/commit\/a26cf5de9ed9827746d4970872376b10d9325f40",
            "author": {
              "name": "Paul Thornthwaite",
              "email": "tokengeek@gmail.com"
            }
          },
          {
            "id": "34f57f6ba3ed0c21c5e361bbb041c3591411176c",
            "message": "Fix server user data update\n\nIncorrect condition was being used so Base64 encoding option was having\nopposite effect from desired.",
            "timestamp": "2014-04-11T18:17:26+03:00",
            "url": "http:\/\/localhost:3000\/brightbox\/brightbox-cli\/commit\/34f57f6ba3ed0c21c5e361bbb041c3591411176c",
            "author": {
              "name": "Paul Thornthwaite",
              "email": "tokengeek@gmail.com"
            }
          }
        ],
        "total_commits_count": 2,
      }
    }

ソースコード

coffee:gitlab_ci_sample.coffee

module.exports = (robot) ->
  say = (message) ->
    user = {
      room :
        id : 2
    }

    robot.send user, message

  robot.router.post "/gitlab_ci/hook", (req, res) ->
    json  = req.body
    say "GitLab CI issue"
    say "project_name = #{json['project_name']}"
    status = json['build_status']
    icon = status == 'failed' ? ':skull:' : ':angel:'
    say "build_status = #{icon} #{status}"
    say "branch = #{json['ref']}"
    say json['gitlab_url']

    res.send 200

前提

  • Kandan 1.1
  • Hubot 2.4.7
  • GitLab 7.0
  • GitLab CI 5.0.1
  • GitLab CI Runner 5.0.1

※GitLab - GitLab CI - GitLab CI Runner は連携済み

  • 対象リポジトリは自作 gem の gottani を GitLabに保存したもの

これをそのまま GitLab に放り込んでます。

手順

gitlab_ci_sample.coffee を配置

gitlab_ci_sample.coffee を hubot サーバーの scripts 配下に保存する。

Hubot の再起動

ブラウザで GitLab CI の Web hooks を追加する

URL は http://hubot_path:8080/gitlab_ci/hook に設定。
gitlab/hook の部分は gitlab_ci_sample.coffee の

robot.router.post "/gitlab_ci/hook", (req, res) ->

の部分に対応。

hubot_gitlab_ci1.png

確認

  • GitLab へ push します
$ git commit -m "test for gitlab-gitlab ci-kandan-hubot test"
$ git push origin master
  • GitLab CI のテスト開始を確認

hubot_gitlab_ci2.png

  • GitLab CI のテスト終了を確認

hubot_gitlab_ci3.png

  • Kandan で Hubot の反応を確認します(成功時)

hubot_gitlab_ci4.png

  • Kandan で Hubot の反応を確認します(失敗時)

hubot_gitlab_ci5.png

補足

今のところ、 npm で公開したりする予定はないので適当にGitHubに突っ込んでおきます。
https://github.com/tbpgr/hubot_scripts

3
3
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
3
3