GitHub Webhook의 요청값을 보면 main
브랜치를 포함한 모든 브랜치에서 push가 발생하면 Jenkins로 Webhook을 보내게 된다.
그럼 Jenkins는 Webhook을 받았으로 main 브랜치에 merge 되지 않았음에도 Build를 하게 된다.
그래서 나는 특정 브랜치에 대해서만 Jenkins가 Build를 하도록 설정하려고 한다.
나는 이전에 이미 Jenkins와 GitHub Webhook을 연결시켰기 때문에, 이번에는 특정 브랜치에 대해서만 Pipeline이 동작하도록 수정만 할 것이다. 그래서 다른 세부 사항들은 여기를 참고해주면 좋겠다!
Dashboard
-> Jenkins 관리
-> Plugins
-> Available plugins
에서 Generic Webhook Trigger
를 설치하자!
적용하려는 파이프라인의 Configuration
으로 들어가 Generic Webhook Trigger
를 체크해준다.
체크를 하면 이렇게 세부 설정을 할 수 있게 나온다!
Post content parameters
아래에 추가를 클릭하고, 아래와 같이 설정해준다.
GitHub Webhook
에서 보내는 JSON 요청값 중, ref
의 값을 사용한다는 것이다.
Jenkins Pipeline과 GitHub 브랜치를 식별한 Token을 설정해준다.
해당 Token은 Webhook URL Query 파라미터에 사용되며, Jenkins Pipeline과 GitHub 브랜치를 식별하여 Jenkins 빌드를 수행한다.
GitHub Webhook
에서 보내는 JSON 요청값 중, 특정 브랜치명이 담긴 ref
의 값 설정하는 것이다.
Expression
에 적어줄 값은 main
, develop
와 같은 브랜치를 사용한다면 ^(refs/heads/브랜치명)
이렇게 작성하고,
feature/...
같은 브랜치를 사용한다면 ^(refs/heads/feature/ .+)$
이렇게 하면된다.
이제 Pipeline
부분으로 내려가보자.
Repositories
에서 고급
을 눌러 Refspec
에 사용할 브랜치를 설정해주어야 한다.
적어줄 값은 main
, develop
와 같은 브랜치를 사용한다면
+refs/heads/브랜치명:refs/remotes/origin/브랜치명
이렇게 작성하고,
feature/...
과 같은 브랜치를 사용한다면 +refs/heads/feature/*:refs/remotes/origin/feature/*
이렇게 하면된다.
Repository browser
는 (자동)
으로 선택하고, Additional Behaviours
의 추가 버튼을 눌러 Advanced sub-modules behaviours
를 선택해주고, 밑에 Update tracking submodules to tip of branch
를 체크해준다.
이러면 sub-module
도 추적하여 가져온다.
기존 GitHub Webhook의 설정을 변경하자
Payload URL
: http://JENKINS_URL/generic-webhook-trigger/invoke?token=TOKEN_HERE
JENKINS_URL
: jenkins의 도메인이나 IP:PORT를 적어주자.TOKEN_HERE
: 위에서 설정한 Token을 적어주자.SSL verification
: URL을 https로 사용하면 Enable로 설정해주면 된다.Webhook은 잘 동작하지만, Jenkins에서 설정한 브랜치와 다르다고 에러 응답값이 나온 것을 볼 수 있다.
그래서 Jenkins에서 Build가 되지 않는 것을 확인할 수 있었다.
위에서 설정한 브랜치에 대해서만 Jenkins Build가 동작한다는 것을 확인할 수 있다!
Jenkins와 GitHub를 처음 연결했을 때는 main 브랜치에 대해서 push가 발생했을 때만 webhook이 발생할 줄 알았다.
그러나 이후 webhook 로그를 살펴봤을 때, 다른 브랜치에서 push한 내용도 webhook으로 발생하다는 것을 알게 되어 급히 수정하게 되었다!
조금은 복잡하긴 하지만, 잘 작동하는 것을 보니 뿌듯하다!!
Jenkins CI - GitHub Webhook branch 필터링 | jonghyukLee
Jenkins Generic Webhook Trigger를 이용한 GitHub branch별 push event WebHook 설정 | nineDeveloper