Jenkins Plugin에 의존하지 않고 쉘만으로 Job을 구축한다(github webhook편)

3425 단어 JenkinsGitHub

개요



github에서 push되면 Job을 시작하고 Push의 내용에 따라 다음 Job에 연결하는 처리를 쉘로 작성합니다.

쉘로 작성하는 이점은 명령 레벨에서 무엇을 하고 있는지 이해할 수 있다는 것입니다.

설치



jenkins



homebrew에 넣고 있습니다.
$ brew update
$ brew cask install java
$ brew install jenkins

설정은 인터넷에서 찾으면 바로 나오므로 할애.

jq



쉘에서 json을 다루는 도구입니다. github push를 구문 분석하는 데 사용됩니다.
$ brew install jq

Github



Github API를 활용하기 위해 토큰을 발행합니다.
토큰은 github 페이지 을 참고로 작성해 주세요.

push를 jenkins에 알리기 위해 github WebHook에서 설정합니다.Add Service 에서 Jenkins (GitHub plugin) 를 선택합니다.


Jenkins hook url 에서 다음을 입력하여 Active를 선택합니다.

http://:@<호스트 이름>:8080/job//buildWithParameters

가정 운영



Git에서 push를 한 후에 브랜치 당 Job을 호출합니다.
WIP인 Pull Request로 운용하기 때문에, feature 브랜치나 bugfix 브랜치의 경우는, 곧바로 리뷰를 해 주었으면 하므로, 채팅에 송신합니다. (이번에는 Chatwork에 보내고 있습니다)
모든 브랜치에서 단위 테스트를 실행하는 Job을 호출합니다.

Job



Jenkins GUI 설정



우선 GUI에서 작성하겠습니다.
  • 빌드의 파라미터화를 체크해, 다음과 같이 합니다.


  • 빌드 쉘 실행을 설명합니다.

  • 최초의 if문으로, branch를 삭제했을 경우나 프로그램에 의해 push되어 왔다(github-bot-user는 프로그램으로 push할 때에 이용하고 있는 유저) 경우는 무시하도록(듯이) 하고 있습니다.
    브랜치가 reviewrelease인 경우 빌드하고 Fabric으로 전송하는 Job을 호출합니다. ( 다른 기사 참조 )
    또한 feature.* 또는 bugfix.* 브랜치의 경우 채팅으로 알려 드리겠습니다.
    그리고는, 단위 테스트용의 Job를 호출하고 있습니다. (다른 기사 참조)
    #!/bin/bash -l
    
    set -eux
    
    chatworkToken=XXXXXXXXXX
    
    deleted=`echo $payload | jq -r '.deleted'`
    author=`echo $payload | jq -r '.head_commit.author.name'`
    
    if  [[ $deleted != "true" ]] && [[ $author != "github-bot-user" ]]; then
    
      GIT_BRANCH=`echo $payload | jq -r '.ref' | sed "s/refs\/heads\///"`
    
      if  [[ $GIT_BRANCH =~ review.* ]]; then
    
        curl -X POST "http://<ホスト名>:8080/job/<Fabric転送するJOB名>/buildWithParameters?server=develop&branch=${GIT_BRANCH}"
    
      elif [[ $GIT_BRANCH =~ release.* ]]; then
    
        curl -X POST "http://<ホスト名>:8080/job/<Fabric転送するJOB名>/buildWithParameters?server=staging&branch=${GIT_BRANCH}"
    
      elif [[ $GIT_BRANCH =~ (feature|bugfix).* ]]; then
        pusher=`echo $payload | jq -r '.pusher.name'`
        curl -X POST -H "X-ChatWorkToken: ${chatworkToken}" -d "body=${pusher}が${GIT_BRANCH}にPushしたのでレビューして。" "https://api.chatwork.com/v1/rooms/<ルームID>/messages"
    
      fi
    
      curl -X POST "http://<ホスト名>:8080/job/<単体テストのJOB名>/buildWithParameters?branch=${GIT_BRANCH}"
    
    fi
    

    좋은 웹페이지 즐겨찾기