Slack에서 Hubot을 통해 GitHub 풀릭 만들기

9261 단어 슬랙GitHubHubot
Slack에서 Hubot을 통해 GitHub 풀릭을 만들 수 있습니다. 【ChatOps용】Github상의 풀릭을 만드는 Hubot 스크립트 을 참고로 해 주면서, 브랜치가 계층 파고 있는 경우에 대응시켜, 리포지토리도 지정할 수 있도록(듯이) 하고 있습니다.

Hubot 스크립트



githubot을 사용하기 때문에 보관하십시오.$ npm install githubot --save
github-create-pull.coffee
#
# Description:
#   create pull requests in a Github repository
#
# Dependencies:
#   "githubot": "0.4.x"
#
# Configuration:
#   HUBOT_GITHUB_TOKEN
#   HUBOT_GITHUB_API
#
# Commands:
#   hubot pr <base> from <compare> [repo:<repo_name>]
#

module.exports = (robot) ->

  github = require("githubot")(robot)

  unless (url_api_base = process.env.HUBOT_GITHUB_API)?
    url_api_base = "https://api.github.com"

  _getDate = ->
    theDate = new Date
    yyyy = theDate.getFullYear()
    mm = theDate.getMonth()+1 #January is 0!
    if mm < 10
      mm = "0" + mm
    dd = theDate.getDate()
    if dd < 10
      dd = "0" + dd
    yyyy + "." + mm + "." + dd

  robot.respond /pr (([-_\.0-9a-zA-Z]+\/)?([-_\.a-zA-z0-9\/]+)) from (([-_\.0-9a-zA-Z]+\/)?([-_\.a-zA-z0-9\/]+))(\srepo\:([-_\.0-9a-zA-Z]+))?$/i, (msg)->
    repo = msg.match[8] || "<デフォルトのリポジトリ>"
    head = msg.match[4]
    base = msg.match[1]
    environment = msg.match[1]

    url = "#{url_api_base}/repos/<自分のGitHubアカウント>/#{repo}/pulls" #GitHubAPIのURL

    account_name = msg.envelope.user.name || "anonymous" #このスクリプトを呼び出した人のSlackアカウント名
    channel_name = msg.envelope.room || "anonymous" #このスクリプトを呼び出したSlackのChannel

    title = "#{_getDate()} #{environment} deployment by #{account_name}"

    body = """
      ・Created By #{account_name} on #{channel_name} Channel
    """

    data = {
      "title": title
      "body": body
      "head": head
      "base": base
    }

    github.post url, data, (pull) ->
      msg.send "プルリク作ったよ! " + pull.html_url

<기본 리포지토리>와 <내 GitHub 계정>을 각각 설정합니다.

사용법


hubot pr <base> from <compare> [repo:<repo_name>]예: hubot pr deployment/production from master repo:my-repo<base><compare> 는 각각 브랜치명. 선택적 repo:<repo_name>에서 리포지토리를 지정할 수 있습니다. repo:<repo_name>를 생략하면 <기본 리포지토리>를 대상 리포지토리로 설정합니다.

기법은 GitHub에서 풀릭을 만들 때 "into <base> from <compare>"라는 형태로 표시되므로 그렇게 되었습니다.



Slack에서 풀릭을 만들면 다음과 같은 이점이 있을까~라고 생각합니다.
  • 풀리크했을 때의 타이틀 등을 자동으로 설정할 수 있어 규칙의 통일이 하기 쉽다
  • 누군가가 풀릭을 만들었음을 알기 쉽다
  • 풀릭에 익숙하지 않은 사람이나 명령 사전 등록으로 해두면 뭐든지된다

  • 리포지토리나 브랜치가 고정으로 좋은 경우는 그 당 하드 코딩 해 버려, 좀 더 짧은 커멘드로 풀릭을 할 수 있도록 해도 좋을지도 모릅니다. 자신의 환경에서는 브런치가 고정이 아니기 때문에 이렇게 했습니다.

    여담



    테스트 환경의 분기가 변경된 경우dpぉy. 이오에서 자동으로 테스트 서버에 배포됩니다. Slack에서 풀릭 -> GitHub로 병합 -> 배포되는 흐름으로, 테스트 서버에 추가로 배포되면 dploy에서 Slack으로 알림이 날아갑니다. 편리. 배포 목적의 심플한 운용이라면 CI 돌리지 않고 dploy 당도 좋다고 생각합니다.



    참고


  • 【ChatOps용】Github상의 풀릭을 만드는 Hubot 스크립트
  • 좋은 웹페이지 즐겨찾기