
새로운 개발팀에 합류하고, CI/CD tool인 jenkins build가 git에 trigger되지 않아 불편했던 경험을 개선 후 그 과정을 기록으로 남깁니다.
github의 push event 발생시 webhook을 통해 jenkins가 이것을 감지하고 build & deploy를 실행하도록 설정할 계획입니다.
Jenkins task의 config 옵션을 통해 hook을 받을 수 있도록 설정하고, 이후 github에서 어떤 도메인으로 webhook을 요청할지 설정합니다.
여기서는 2가지 방법에대해 설정합니다.
Webwook이란?
”Webhooks allow external services to be notified when certain events happen. When the specified events happen, we’ll send a POST request to each of the URLs you provide.”
특정 이벤트가 발생할 때 외부 서비스에 알릴 수 있습니다. 지정된 이벤트가 발생하면 제공하는 각 URL에 게시물 요청을 보내드립니다.
이미 jenkins task에는 dev branch를 감지하도록 설정되어있습니다.
먼저 Jenkins에서 webHook을 받을때 build가 동작할 수 있도록 trigger 설정을 살펴보았습니다.
configuration > general > build trigger : GitHub hook trigger for GITScm polling
이 설정을 하기전에 GITSCM이 무엇인지부터 알아야합니다.
GITSCM이란?
Jenkins의 pipeline config 문서를 관리하기위한 repository 입니다.
jenkins는 gui기반으로 배포설정을 할 수 있지만 이 설정들은 프로젝트가 진화하면서 같이 관리되기가 어렵습니다. 그래서 문서 역시 형상관리가 필요하겠다고 느꼈고 이것을 위한 git repository를 생성하여 그곳에서 설정문서의 버전을 관리하는 전력입니다.

SCM을 polling 하기위한 트리거 설정을 켜고, github repository에서 해당 scm으로 hook을 보내도록 설정합니다.
github repository > setting > hooks
훅을 설정할땐 http://{jenkins domain, https라면 https로 작성}/github-webhook/을 payload URL에 설정해줘야합니다.
http://{jenkins domain, https라면 https로 작성}/github-webhook/application/x-www-form-urlencodedEnable SSL verificationJust the push event.checkedAdd webhook
이렇게 설정을 끝내고나면 간단하게 테스트를 해볼 수 있습니다.
빈 커밋을 등록하고 깃으로 push하여 push event가 동작하도록 하였습니다.
$ git commit --allow-empty -m "test jenkins webhook trigger" & git push
성공적으로 remote에 push가 되면 jenkins가 이것을 감지하고 build되는 것을 확인 할 수 있습니다.
저희팀 환경에서는 한가지 문제가 있었습니다. 그것은 scm을 통해 trigger가 동작하기 때문에 pusher가 (SCM Change)로 로그가 남는 것이였습니다.
이 문제를 해결하기위해 다른 설정을 통해 trigger가 동작하도록 하였습니다.
generic-webhook-trigger란?
특정 시스템에 종속적이지 않고 모든 종류의 웹훅을 받을 수 있도록 만들이전 설정입니다.
generic-webhook-trigger은 post content paramerters와 request paramerters 설정을 통해 필요한 정보를 넘길 수 있습니다.
webhook post payload
{
"ref": "refs/heads/main",
"repository": {
"name": "example-repo"
},
"pusher": {
"name": "sungjun-lee"
}
}
이 설정을 jenkins task config에 추가하고, github webhook 설정을 변경해야하합니다.
http://{jenkins domain, https라면 https로 작성}/generic-webhook-trigger/invoke?token={generic-webhook-trigger token}application/json이 설정 후 테스트를 진행해보니 정상적으로 trigger가 동작하고 pusher 역시 정상적으로 노출되는것을 확인 할 수 있습니다.