
그동안 트랙별 코드리뷰를 마치고 반영된 pr을 적용시킬려면 Jenkins를 활용해 수동빌드를 해줘야 하였다. 이럴경우 여러모로 번거로운 부분이 존재하였다.
이전에 다른 프로젝트에서 Github Webhook을 이용하여 자동빌드를 경험해본 팀원의 도움을 받아 적용을 하게 되었다.
Generic Webhook Trigger 설치

Generic Webhook Trigger는 젠킨스에서 제공하는 플러그인으로 HTTP요청을 수신하여 JSON, XML 형태의 데이터를 추출하여 트리거를 지정할 수 있는 플러그인이다.
Generic Webhook Trigger를 사용하여 빌드 유발상황을 구분해보자.

플러그인을 설치했다면 파이프라인의 Build Trigger설정에서 다음과 같은 탭을 확인 할수 있다.
해당 설정을 클릭해보면 다음과 같은 설명을 확인할 수 있다.

"http://JENKINS_URL/generic-webhook-trigger/invoke" 로 오는 요청에 대해 트리거가 수행된다는 말이 적혀져 있다.
위 설정에 맞춰 Github에서 Webhook설정을 변경해주자.
(혹시 Jenkins에서 에러를 뿜어낸다면 https리다이렉션을 요구하는 것 일수도 있다.)
Github WebHook 설정

프로젝트 레포지토리 ->Settings-> Webhook탭에 들어와서 웹훅을 새로 만들어보자.

Payload URL을 위에서 확인한 Generic Webhook Trigger의 설정에 맞게 작성한다.
그리고 트리거가 동작하는 이벤트에 대해서 Send me everyting옵션을 체크한다.

Add webhook을 한 뒤 다시 등록한 웹 훅을 클릭하여 Recent Deliveries 탭을 확인해 본다.

내용을 보면 요청을 보낼때 payload에 다양한 정보들이 담겨있는 것을 확인할 수 있다.
Generic Webhook Trigger 설정


기존에 설정해둔 GitHub hook trigger for GITScm polling 설정을 해제한다.

그리고 Generic Webhook Trigger설정을 활성화 한다.
Post content parameters 설정
Post content parameters의 추가 버튼을 눌러 파라미터를 추가한다.

$.pull_request.merged를 등록하여 Merge되었는지를 확인한다.

$pull_request.base.ref 를 등록하여 base브랜치를 가져온다.
현재는 develop브랜치가 될 것이다.
Optional filter 설정
아래로 내려다 보면 Optional filter탭을 볼 수 있다.

Expression에 다음과 같은 정규표현식을 작성했다.
(?=.true)(?=.develop).*
또한 Text 부분에는 위에서 파라미터로 선언한 값들을 사용했다.
위 표현식으로 다음과 같은 효과를 기대할 수 있다.
merge가 true이고, 브랜치가 develop인 작업에 대해 트리거를 수행하는 것이다.
Token 설정

Token탭에 토큰 이름을 작성한다.

이때 Github Webhook 설정에 들어가서 Payload URL에 token파라미터를 포함할수 있도록 수정한다.

바로 아래 탭에서 Token Credential에 토큰에 대한 SecretKey를 추가한다.
외부에서 빌드를 유발하기 위해서는 token을 확인하는 방식이 존재하는데, 이 때 Jenkins의 Credential에 있는 정보를 기반으로 수행한다.
토큰을 사용하지 않는 경우 계정정보를 사용할 수 도 있지만 해당 과정에서는 token을 등록하는 방식을 사용한다.

위와 같은 정보로 Secret text를 작성하고 등록하고 적용한다. (위의 사진은 예시를 들고 왔다.)
응답 확인하기

Github의 Webhook탭의 Recent Deliveries 탭으로 가서 확인해보면 Response Body값에 다음과 같은 응답이 담겨있는 것을 확인할 수 있다.
위의 가이드를 참고하여 여러 CI/CD의 기능들을 자동화 시켰다.
자동빌드를 설정한 Jenkins기능은 다음과 같다.
Internal 프로젝트 같은 경우는 테스팅 프로젝트로 빠른 대응이 필요했기에 Trigger조건으로 Merge대신 push를 원하여 그에 맞게 바꾸어 주었다.
또한 프로덕션은 빌드의 편리함 보다 안정성을 위해 수동빌드를 하도록 설정을 하지 않았다.

위와 같이 자동으로 빌드된것을 확인할 수 있다.
출처:
https://blog.pium.life/jenkins-hook-by-label/
https://georgik.rocks/jenkins-generic-webhook-plugin-failed-with-did-not-find-any-jobs-with-generictrigger-configured/
https://pikachu987.tistory.com/61
젠킨스는 정말 귀찮은 설정이 많은 것 같다.
만약 github actions로 바꾼다면 무엇을 고려해야할까? yaml이나 fcm json은 따로 관리해야할것같고.
만약 바꾼다면 서버 하나비용 감축에 관리도 편해질것 같긴한데