자작 스크립트 | gitlab_sample.coffee - GitLab - Hubot - Kandan의 협력을 검증하는 샘플

14435 단어 칸단GitLabHubot

Hubot | 자작 스크립트 | gitlab_sample.coffee - GitLab - Hubot - Kandan의 협력을 검증하는 샘플



개요



GitLab - Hubot - Kandan의 협력을 검증하는 샘플 script를 작성합니다.
GitLab의 웹 후크와 Hubot의 웹 서버 기능을 활용합니다.

Hubot은 기본적으로 8080 포트에서 시작되며 예를 들어

http://hubot_url:8080/hubot/version

방문하면,
2.4.7

같은 버전이 반환됩니다.

사양



filename



gitlab_sample.coffee

Hubot 웹 서버 접수 URL



※hubot_url은 귀하의 Hubot 서버 URL로 바꾸세요.

사양 보충



GitLab Web Hook이 반환하는 json 형식은 아래 참조
htps : //기 tぁb. 이 m/기 tぁb-rg/기 tぁb세/bぉb/마s r/도 c/우ぇb_호오 ks/우ぇb_호오 ks. md

소스 코드



coffee:gitlab_sample.coffee
module.exports = (robot) ->
  say = (message) ->
    # hubot-kandan が room を id 指定する前提になっていてつらい。
    # rails console とかでDBを除くか、 log から id を確認する必要がある。
    # いちいちサーバーに入りたくなかったら、ブラウザ付属の開発ツールなどで HTML の中を確認するのが早いか?
    # ※ブラウザの「ページのソースの表示」機能だと、ajaxとかで生成されたHTMLが確認できない
    # name にして欲しい。
    user = {
      room :
        id : 2
    }

    robot.send user, message

  issue = (json) ->
    say "GitLab issue"
    say "json['object_attributes']['title'] = #{json['object_attributes']['title']}"
    say "json['object_attributes']['description'] = #{json['object_attributes']['description']}"

  merge_request = (json) ->
    say "GitLab merge_request"
    say "json['object_attributes']['target_branch'] = #{json['object_attributes']['target_branch']}"
    say "json['object_attributes']['title'] = #{json['object_attributes']['title']}"
    say "json['object_attributes']['state'] = #{json['object_attributes']['state']}"

  push = (json) ->
    say "GitLab push"
    say "json['repository.name'] = #{json['repository']['name']}"
    say "json['commits'][0]['message'] = #{json['commits'][0]['message']}"

  robot.router.post "/gitlab/hook", (req, res) ->
    json  = req.body
    # 全ての json が持つ共通の属性がないので object_kind で判断
    # push だけは object_kind を持っていないので擬似的に "push " を設定
    #
    # issue         => GitLabのjson object_kind: issue
    # merge_request => GitLabのjson object_kind: merge_request
    # push          => GitLabのjson object_kind: ない
    event = json['object_kind'] || 'push'

    switch event
      when "issue" then issue json
      when "merge_request" then merge_request json
      when "push" then push json

    res.send 200

전제


  • Kandan 1.1
  • Hubot 2.4.7
  • 대상 리포지토리는 GitLab에 자작 gem의 gottani를 저장했습니다


  • 이것을 그대로 GitLab에 넣습니다.

    절차



    gitlab_sample.coffee 배치



    gitlab_sample.coffee를 hubot 서버의 scripts 아래에 저장합니다.

    Hubot 재부팅



    브라우저에서 GitLab 웹 후크 추가



    URL은 http://kandan_path:8080/gitlab/hook으로 설정되었습니다.
    gitlab/hook 부분은 gitlab_sample.coffee
    robot.router.post "/gitlab/hook", (req, res) ->
    

    의 부분에 대응.



    확인



    push 이벤트


  • GitLab에 푸시
  • $ git commit -m "test for gitlab-kandan-hubot test"
    $ git push origin master
    
  • Kandan에서 Hubot의 반응을 확인하십시오



  • issue 이벤트


  • GitLab에 issue 추가
  • Kandan에서 Hubot의 반응을 확인하십시오

  • ※출력 메시지의 순서가 바뀌어 버리고 있습니다만, 일단 제대로 움직이고 있습니다



    merge_request 이벤트


  • 먼저 로컬 환경에서 주제 분기를 만들어 GitLab 서버로 푸시합니다
  • $ git checkout -b test_for_gitlab_kandan_hubot
    Switched to a new branch 'test_for_gitlab_kandan_hubot'
    $ echo hoge > test_for_gitlab_kandan_hubot.txt
    $ git add test_for_gitlab_kandan_hubot.txt
    $ git commit -m "test_for_gitlab_kandan_hubot"
    [test_for_gitlab_kandan_hubot 813615d] test_for_gitlab_kandan_hubot
     1 files changed, 1 insertions(+), 0 deletions(-)
     create mode 100644 test_for_gitlab_kandan_hubot.txt
    $ git push origin test_for_gitlab_kandan_hubot
    
  • GitLab에서 Merge Request 수행




  • Kandan에서 Hubot의 반응을 확인하십시오



  • 덤 : Kandan의 Channel id를 확인하는 방법



    hubot-kandan에서 웹 후크를 사용하여 모든 채널 (룸)에 메시지를 보낼 때,
    Channel id가 필요합니다.
    Channel의 id는 화면에 표시되지 않으므로 어떤 손을 칠 필요가 있습니다.

    방법 1



    브라우저의 개발 툴을 이용해 HTML을 확인한다.
    아래 이미지의 빨간색 원으로 둘러싸인 부분을 보면 채널의 탭 순서에 따라 ID를 확인할 수 있습니다.
    channels-1이면 1이 id입니다.



    방법 2



    Kandan Server에서 rails console을 시작하고 Channel.all에서 id를 확인하십시오.
    [1] pry(main)> Channel.all
      Channel Load (0.1ms)  SELECT "channels".* FROM "channels"
    => [#<Channel id: 1, name: "Lobby", created_at: "2014-08-08 22:33:18", updated_at: "2014-08-08 22:33:18">,
     #<Channel id: 2, name: "Test", created_at: "2014-08-08 22:55:09", updated_at: "2014-08-08 22:55:09">,
     #<Channel id: 4, name: "Test2", created_at: "2014-08-11 23:41:23", updated_at: "2014-08-11 23:41:23">,
     #<Channel id: 6, name: "Tes3", created_at: "2014-08-11 23:42:50", updated_at: "2014-08-11 23:42:50">,
     #<Channel id: 7, name: "Test4", created_at: "2014-08-11 23:44:32", updated_at: "2014-08-11 23:44:32">]
    

    방법 3



    Kandan Server에서 log를 확인하면서 브라우저에서 Kanban에서 id 검색하고 싶은 Channel을 조작한다.
    ※단, 로그 레벨 설정에 따라
    $ ~/kandan$ tail -f log/thin.log
    Processing by AttachmentsController#index as JSON
      Parameters: {"channel_id"=>"2"}
      User Load (0.1ms)  SELECT "users".* FROM "users" WHERE "users"."id" = 3 LIMIT 1
      Channel Load (0.1ms)  SELECT "channels".* FROM "channels" WHERE "channels"."id" = ? LIMIT 1  [["id", "2"]]
      Attachment Load (0.1ms)  SELECT "attachments".* FROM "attachments" WHERE "attachments"."channel_id" = 2 ORDER BY created_at DESC
    Completed 200 OK in 2ms (Views: 0.1ms | ActiveRecord: 0.3ms)
    

    방법 4



    http://kandan_url:3000/channels.json을 얻고 목표 ID를 찾습니다.

    이런 느낌의 json이 돌아옵니다.
    Test Channel의 id를 원하면 아래를 확인하여 id가 2임을 알 수 있습니다.
    [
    {"id":1,"name":"Lobby","created_at":"2014-08-08T23:33:18Z","updated_at":"2014-08-08T23:33:18Z","activities":[
    {"id":843,"content":hoge,"channel_id":1,"user_id":1,"action":"disconnect","created_at":"2014-08-14T23:00:43Z","updated_at":"2014-08-14T23:00:43Z","user":{ユーザー情報(略)}},
    :
    : Channel 1 のチャット情報
    :
    {"id":900,"content":hige,"channel_id":1,"user_id":1,"action":"disconnect","created_at":"2014-08-14T23:00:43Z","updated_at":"2014-08-14T23:00:43Z","user":{"user":{ユーザー情報(略)}}},
    {"id":2,"name":"Test","created_at":"2014-08-08T23:55:09Z","updated_at":"2014-08-08T23:55:09Z","activities":[
    :
    ]
    

    참조



    GitLab Web Hook이 반환하는 json 형식은 아래 참조
    htps : // 기트 b. 이 m/기 tぁb-rg/기 tぁb세/bぉb/뭐 r/도 c/우ぇb_호오 ks/우ぇb_호오 ks. md

    보충



    지금은 npm 으로 공개하거나 할 예정은 없기 때문에 적당히 GitHub에 돌진해 둡니다.
    htps : // 기주 b. 코 m / tbpgr / 후보 t_sc 리 pts

    좋은 웹페이지 즐겨찾기