backlog→hubot→slack 제휴

12564 단어 슬랙BacklogHubot

개요



backlog의 과제나 위키 등의 업데이트 정보를 slack에 전달하도록 합니다.

갱신 정보가 메일에 일일이 닿아 기분 좋은 것을 해소할 수 있습니다.

환경 구성



backlog -> hubot 서버(겸 개발 서버) -> slack

hubot 관련 기사에서는 heroku를 사용한 것이 많지만,
자체적으로 hubot 서버를 준비하는 구성입니다.

기사 작성시의 환경


  • 서버(CentOS 6.5)
  • node.js(0.10.33)
  • npm(1.3.6)
  • CoffeeScript(1.9.1)
  • yoeman(1.4.6)
  • generator-hubot(0.2.5)
  • hubot(2.11.4)
  • forever(0.14.1)

  • 1. slack 측 준비



    1-1





    slack으로 새로운 channel을 작성.
    integration을 추가합니다.

    1-2





    integration 목록에서 Hubot을 선택합니다.

    1-3




    Hubot의 설정 화면으로 천이하기 때문에, 추가하고 싶은 bot의 사용자명을 입력한다.
    ex) hubot, backlog

    1-4




    토큰이 발행되므로, 이것을 나중에 프로그램 측에서 설정한다.

    기타 설정 정보를 확인하고 Save Integration을 누릅니다.

    1-5




    디폴트라면, general 밖에 참가하고 있지 않으므로, 방금 만든 channel에 bot 유저를 invite 해 둔다.
    이것으로 slack측은 준비 완료.

    2. hubot 환경 구축



    2-1. 병아리 작성



    임의의 디렉토리에서 아래와 같이 yo 명령을 실행하면 hubot의 병아리가 작성된다.
    mkdir backlog-to-slack
    cd backlog-to-slack
    yo hubot
    

    대화형식으로 아래와 같이 대답한다.
    ? Owner: Your Name <[email protected]> #<-任意
    ? Bot name: hubot #<-任意
    ? Description: A simple helpful robot for you #<-任意
    ? Bot adapter: slack #<-必ずslackにする
    

    병아리가 만들어집니다.

    2-2. bot 스크립트 작성



    scripts/backlog-notification.coffee
    # Description:
    #   Backlog to Slack
    #
    # Commands:
    #   None
    
    backlogUrl = 'https://your.backlog.jp/'
    
    module.exports = (robot) ->
      robot.router.post "/<任意のパス>/:room", (req, res) ->
        { room } = req.params
        { body } = req
        try
    
          switch body.type
              when 1
                  label = '課題の追加'
              when 2, 3
                  # 「更新」と「コメント」は実際は一緒に使うので、一緒に。
                  label = '課題の更新'
              when 5
                  label = 'wikiの追加'
              when 6
                  label = 'wikiの更新'
              when 8
                  label = 'ファイルの追加'
              when 9
                  label = 'ファイルの更新'
              else
                  # 課題関連以外はスルー
    
          # 投稿メッセージを整形
          url = "#{backlogUrl}view/#{body.project.projectKey}-#{body.content.key_id}"
          if body.content.comment?.id?
              url += "#comment-#{body.content.comment.id}"
    
          message = "*Backlog #{label}*\n"
          message += "[#{body.project.projectKey}-#{body.content.key_id}] - "
          message += "#{body.content.summary} _by #{body.createdUser.name}_\n>>> "
          if body.content.comment?.content?
              message += "#{body.content.comment.content}\n"
          message += "#{url}"
    
          # Slack に投稿
          if message?
              robot.messageRoom room, message
              res.end "OK"
          else
              robot.messageRoom room, "Backlog integration error."
              res.end "Error"
        catch error
          robot.send
          res.end "Error"
    

    2-3. 시작 스크립트 작성



    원래 시작 스크립트를 forever에서 데몬화하도록 다음과 같이 변경
    #!/bin/sh
    
    set -e
    
    npm install
    
    export PORT="8081"
    export PATH="node_modules/.bin:node_modules/hubot/node_modules/.bin:$PATH"
    export HUBOT_SLACK_TOKEN="<hubotアクセストークン>"
    
    forever start -c coffee node_modules/.bin/hubot --name "gitbucket-to-slack" --adapter slack
    

    PORT는 Hubot을 실행하고 싶은 포트를 지정. 다른 프로세스에서 이용하고 있는 포트를 지정하면 에러가 되므로 주의.

    HUBOT_SLACK_TOKEN은 slack 쪽에서 발행된 액세스 토큰을 지정.

    --name은, 병아리 작성시의 name을 지정.

    2-4. 시작


    cd <path to hubot>
    bin/hubot
    

    병아리 작성한 디렉토리에서 bin/hubot으로 프로그램 기동.

    3.backlog에서 Webhook 설정하기




    프로젝트 설정에서 hubot이 시작하는 URL을 설정합니다.

    http://server:port/hubot/room

    위의 형식으로 hubot이 요청을 기다리고 있습니다.
    각각,
    server : 서버의 IP 또는 도메인
    port : 시작 스크립트에 지정된 포트
    hubot:bot 스크립트에서 지정한 <임의의 경로>
    room : 날고 싶은 slack의 channel 이름

    그리고는, backlog측에서 과제 추가 등 실시하면 slack에 날 것!

    제대로 작동하지 않으면 webhook URL이 올바른지, forever에서 로그를 확인하여 hubot이 올바르게 시작되었는지, slack 액세스 토큰이 유효한지 등을 확인하십시오.

    3. 참고 URL



    h tp // 기효. jp/에서 v/세리아 l/01/후보 t/0005
    h tp : // 쿠이타. 코 m / 마유코 jp / / ms / 아 9 아 9408c21 아 761 아 db7d0
    ぃ tp // 코 m / 미소 페소 / ms / 1f418 d02 89234499b3
    h tp // w w. 그래도 ds-std. 이. jp / 역시 dsb㎉ / 2125. HTML
    htp : // bg. 후미…
    h tp :小m/こん_湯/てMS/CDC452bcd2っb89f85에 1

    좋은 웹페이지 즐겨찾기