자작 스크립트 | gitlab_sample.coffee - GitLab - Hubot - Kandan의 협력을 검증하는 샘플
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
전제
2.4.7
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
이것을 그대로 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 이벤트
$ git commit -m "test for gitlab-kandan-hubot test"
$ git push origin master
issue 이벤트
※출력 메시지의 순서가 바뀌어 버리고 있습니다만, 일단 제대로 움직이고 있습니다
merge_request 이벤트
$ 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
덤 : 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
Reference
이 문제에 관하여(자작 스크립트 | gitlab_sample.coffee - GitLab - Hubot - Kandan의 협력을 검증하는 샘플), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/tbpgr/items/9b3739b790cb52cb002d텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)