-
Notifications
You must be signed in to change notification settings - Fork 0
[INFRA] 4. 깃허브 PR 라벨을 기준으로 젠킨스 빌드하기
지금까지 펀잇팀은 Jenkins로 CI/CD 파이프라인을 구축했고,
GitHub hook trigger for GITScm polling
을 통해 develop 브랜치에 push 되면 빌드 트리거를 발생시키도록 구성했다.
하지만 BE, FE 모두 하나의 레포지토리에 존재하고 같은 방식으로 구성되어 있어서 하나의 PR이 merge 되어도 두 개의 파이프라인에 동시에 트리거가 발생한다는 문제점이 있었다.
이런 필요없는 동작을 없애기 위해 목적에 맞게 파이프라인이 각각 따로 동작하도록 분리할 필요성이 생겼고, PR 라벨(BE
or FE
)을 통해 트리거를 분리하기로 결정했다.
![Generic Webhook Trigger Plugin 설치](https://private-user-images.githubusercontent.com/33208246/259011700-512f480f-7016-4399-afb8-2ff5490f54fb.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkwMTAyMDUsIm5iZiI6MTczOTAwOTkwNSwicGF0aCI6Ii8zMzIwODI0Ni8yNTkwMTE3MDAtNTEyZjQ4MGYtNzAxNi00Mzk5LWFmYjgtMmZmNTQ5MGY1NGZiLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMDglMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjA4VDEwMTgyNVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTJkM2ZkN2U0ZTBlMGMwMzhjNTc2NGI4YmIwYWM2MjFiNzUyZTllOWY3OTc1NWYwZDQ1NjhmMjJhOWQ4OGVkYjImWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.wVNjHHzETWox5eAWqq7fOUBSrxYi2SKW9G-NfC8ZgtU)
PR 라벨을 기준으로 트리거를 발생시키기 위해 Github의 Webhook 데이터를 추출할 수 있어야 한다.
이를 위해 Generic Webhook Trigger 젠킨스 플러그인을 설치하자.
해당 플러그인을 사용하면 http://JENKINS_URL/generic-webhook-trigger/invoke
로 오는 요청에 대해
JSON or XML 형태로 데이터를 추출하여 원하는 조건으로 트리거를 발생시킬 수 있다.
![깃허브 webhook](https://private-user-images.githubusercontent.com/33208246/258677855-ba8d91d9-becf-4abc-b17d-37d99ad8cbbf.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkwMTAyMDUsIm5iZiI6MTczOTAwOTkwNSwicGF0aCI6Ii8zMzIwODI0Ni8yNTg2Nzc4NTUtYmE4ZDkxZDktYmVjZi00YWJjLWIxN2QtMzdkOTlhZDhjYmJmLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMDglMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjA4VDEwMTgyNVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWUyZGFjMDJjMDYyMTdkM2M3NTgzOWFkODhhYzU4ZTUxMzhjMThhZTQ0MDRiNWY5OGNlMDIzNzM2OThiMDY3MmMmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.L6POmQ09ZCQJ9g3HUTIS8qLIfPa7Irx2TaBU7EMwMcI)
깃허브 레포지토리에서 Settings
- Code and automation
- Webhooks
탭으로 오면
Add webhook
을 통해 새로운 Webhook 설정을 추가할 수 있다.
![webhook 추가](https://private-user-images.githubusercontent.com/33208246/258678081-6a3f8b90-b613-44d2-8f84-74516163b823.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkwMTAyMDUsIm5iZiI6MTczOTAwOTkwNSwicGF0aCI6Ii8zMzIwODI0Ni8yNTg2NzgwODEtNmEzZjhiOTAtYjYxMy00NGQyLThmODQtNzQ1MTYxNjNiODIzLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMDglMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjA4VDEwMTgyNVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWM5MjM4OTc5ZDZjYjg5MzQ1OTI3ZDhjNTZkNzFhZjlmODMxZmRlOWY5ODc2NWI0Njk5ZTc1NDZmMDg1MGE1NjQmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.bp_fKFGI8a5wa4tIKzRb6rNTf-ETVy_c-0kbbohbUW4)
- Payload URL :
http://JENKINS_URL/generic-webhook-trigger/invoke
- Content type :
application/json
- Trigger event 설정 :
Send me everything
Webhook으로 오는 요청에 대해 데이터를 추출하기 위해 모든 정보를 JSON 형태로 받도록 위와 같이 설정하고 추가해주자.
![젠킨스 build trigger 설정](https://private-user-images.githubusercontent.com/33208246/259012000-90e293d6-2aa6-4b1a-81fc-ecc235be9351.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkwMTAyMDUsIm5iZiI6MTczOTAwOTkwNSwicGF0aCI6Ii8zMzIwODI0Ni8yNTkwMTIwMDAtOTBlMjkzZDYtMmFhNi00YjFhLTgxZmMtZWNjMjM1YmU5MzUxLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMDglMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjA4VDEwMTgyNVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTYwMGQ0Zjc2ZTI4YjNiZDVmNzVhYTZlMWE5Y2Y0Y2RkY2NlODdhMWQyYjk1ODQ4ZjA4MjRmMjRkYjQ1MjRiYTkmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.NClMp645oBqCAxaLl48oJNNUXYfOKxjDsUMqeQ8PRzc)
이제 젠킨스로 돌아와서 트리거 설정을 하고 싶은 아이템의 구성
- Build Trigger
로 들어와서
위와 같이 기존 GitHub hook trigger for GITScm polling
을 해제하고, Generic WebHook Triggers
를 설정하자.
다음으로 Post content parameters
탭에서 추가 버튼을 눌러서 변수를 추가할 수 있다.
![IS_MERGED 파라미터](https://private-user-images.githubusercontent.com/33208246/259034037-31ddbdb9-252f-4c03-a4e2-5a9b2c47a60f.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkwMTAyMDUsIm5iZiI6MTczOTAwOTkwNSwicGF0aCI6Ii8zMzIwODI0Ni8yNTkwMzQwMzctMzFkZGJkYjktMjUyZi00YzAzLWE0ZTItNWE5YjJjNDdhNjBmLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMDglMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjA4VDEwMTgyNVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTQ2MWU2NGQyOTY2MjAxNzM3MGUxNTZmNzFjN2Q5M2FjMmFkYThhZTFiNWZkZmVmNmY4YWIzMWRjMTY0ZWNlOWEmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.tNSX2STsR6k7hSTZMSPMbf6bO35Ss7ogR_i9yKx5CgA)
- Variable : 변수 이름
- Expression :
$.pull_request.merged
(PR merge 여부)
![BRANCH 파라미터](https://private-user-images.githubusercontent.com/33208246/259034084-c7e8024d-b63e-485f-adfd-18bbcdead17b.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkwMTAyMDUsIm5iZiI6MTczOTAwOTkwNSwicGF0aCI6Ii8zMzIwODI0Ni8yNTkwMzQwODQtYzdlODAyNGQtYjYzZS00ODVmLWFkZmQtMThiYmNkZWFkMTdiLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMDglMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjA4VDEwMTgyNVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWMxYThiYzI4YmNhOGJmZDFiNTNkOWQ3NTQ0NzFhYWM1MWE4ZTM0Yjg1YmYzMzc3NTIwMmEwYjkwODYyYzI3YjYmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.PQ6BbknouzsRF4t-qXWtSo9UzmQRuSKa1t8HrRlx6cg)
- Variable : 변수 이름
- Expression :
$.pull_request.base.ref
(base 브랜치 이름)
![LABELS 파라미터](https://private-user-images.githubusercontent.com/33208246/259034142-ec782ac7-c9ac-447c-b62f-e31d4fb66f7f.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkwMTAyMDUsIm5iZiI6MTczOTAwOTkwNSwicGF0aCI6Ii8zMzIwODI0Ni8yNTkwMzQxNDItZWM3ODJhYzctYzlhYy00NDdjLWI2MmYtZTMxZDRmYjY2ZjdmLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMDglMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjA4VDEwMTgyNVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTc4MTFiZDI4ZjIyY2M2ZmUyOGZkZDM4OGIwMjBhNWE5YmE1NzdjZTYwNGI5MTAxNzZlZTg1MDk1Njg5ZDNhZWYmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.pkY3xg6guQRkSCZAM8-hnBgOcmuD04MN2hCIEXhFKzE)
- Variable : 변수 이름
- Expression :
$.pull_request.labels..name
(PR 라벨 이름들)
이후 Optional filter
탭에서 트리거를 유발시키기 위한 조건을 설정할 수 있다.
![Optional filter 추가](https://private-user-images.githubusercontent.com/33208246/259034984-164fd4f3-14d2-4ddd-8847-ef413f711699.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkwMTAyMDUsIm5iZiI6MTczOTAwOTkwNSwicGF0aCI6Ii8zMzIwODI0Ni8yNTkwMzQ5ODQtMTY0ZmQ0ZjMtMTRkMi00ZGRkLTg4NDctZWY0MTNmNzExNjk5LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMDglMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjA4VDEwMTgyNVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTQxZTMyMTM4ZjBiYWQ5YmZjNDU0NDY2YTA3Yzg2NjdiMjYxZDQ0YjNiOGEzNTY0ZGNkOGQzOWQ0MDZmYzRjOWUmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.RnHffQl0KLGMdmoB4Gw9YjrBAziJKUOLKOpb9COW_io)
Expression
에서 원하는 조건의 표현식을 작성하고, Text
에서 해당하는 변수를 지정할 수 있다.
위의 표현식은 PR이 merge가 되었고, develop 브랜치면서, 라벨에 BE가 있는 경우를 의미한다.
![webhook token 설정](https://private-user-images.githubusercontent.com/33208246/259036354-3c7c4fa4-83de-487d-9558-2cc76f5f6c37.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkwMTAyMDUsIm5iZiI6MTczOTAwOTkwNSwicGF0aCI6Ii8zMzIwODI0Ni8yNTkwMzYzNTQtM2M3YzRmYTQtODNkZS00ODdkLTk1NTgtMmNjNzZmNWY2YzM3LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMDglMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjA4VDEwMTgyNVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTlhNmIyYTExNTQ0MDhlZTcxOWY2ZjIwMmVhYjg0NzUxMGMxNDBkYTU1ZDk4ZWI0NTk0MDEwNjA3NDM5NWUyMjEmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.v1t9gjyn4QoMxIWG_E8Cax3u0HiMb_qOUcUyKbQR3O0)
Token 탭에서 Webhook에 대한 토큰을 설정할 수 있다.
그러려면 원하는 토큰 명을 작성하고, 아래에서 젠킨스 Credentials를 추가해줘야 한다.
![Credentials 추가](https://private-user-images.githubusercontent.com/33208246/259037162-c74d45aa-9319-4206-bb77-8a3ff14aa2b2.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkwMTAyMDUsIm5iZiI6MTczOTAwOTkwNSwicGF0aCI6Ii8zMzIwODI0Ni8yNTkwMzcxNjItYzc0ZDQ1YWEtOTMxOS00MjA2LWJiNzctOGEzZmYxNGFhMmIyLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMDglMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjA4VDEwMTgyNVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWUyYWJmMzUwMTlmMDI1YTA2ZjJlM2QxZTZlNzA5YmMyMDBkODhiMzNjZDBjNzQyOTZjZDNmZTkyNjk5ODQ1ZTImWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.nC-QcN1LEEpVEoAOebd7soU2c9aP3CMmyFjL-3gDzXU)
-
Kind
: Secret Text -
Secret
: Token 탭에 작성한 토큰 명 -
Id
: Credentials 구분을 위한 이름 -
Description
: Credentials 설명
![깃허브 webhook URL 토큰 추가](https://private-user-images.githubusercontent.com/33208246/259037981-c3a5beba-31bb-46ef-a574-78e04ad4b7f4.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkwMTAyMDUsIm5iZiI6MTczOTAwOTkwNSwicGF0aCI6Ii8zMzIwODI0Ni8yNTkwMzc5ODEtYzNhNWJlYmEtMzFiYi00NmVmLWE1NzQtNzhlMDRhZDRiN2Y0LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMDglMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjA4VDEwMTgyNVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTgzNGQxMmUxYWNkMTAwZmJiZWZjNmQ5N2ZmODU5Y2U4NmQ2MWU5YjMyZTBmNWNkNGY4NzhlMWZjYjU0ODQzNWMmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.VGraJX83QDrrU_Xmf_XefUWBzfb5TQ2dXycUdcCdVMY)
마지막으로 다시 깃허브 Webhook 설정으로 돌아가서 URL 뒤에 토큰을 추가해주면 된다.
?token=여기에_아까_Token_탭에서_작성한_토큰_명
Posted By 망고
- 📚 프론트엔드 개발 문서
- 🌏 브라우저 지원 범위
- 🧪 프론트엔드 테스트 전략
- [웹 접근성] a tag와 button의 차이는 무엇일까?
- multipart
- SvgSprite 컴포넌트 사용하기
- [INFRA] 프론트엔드 CI/CD 구축
- [기술 검토] 리액트 쿼리 도입 이유
- [기술] 로그인 기능 도입기
- 🐛 S3 배포 캐싱 오류
- 이미지를 위한 S3와 Cloudfront 설정하기
- 📓 성능리포트 ‐ 펀잇 서비스 최적화하기
- 펀잇 SEO 개선하기
- 📚 백엔드 개발 문서
- intellij에서 private DB 연결하기
- [INFRA 0] 전체 infra 구조 - ver1
- [INFRA 1] infra 서버 세팅
- [INFRA 2] 백엔드 CI/CD 구축
- [INFRA 3] 백엔드 DB 연결
- [INFRA 4] 깃허브 PR 라벨을 기준으로 젠킨스 빌드하기
- [LOG] 로그 세팅
- [Trouble Shooting] 일관된 테스트 격리 적용하기
- [Trouble Shooting] 프록시로 동작하는 @Transactional, 전파 옵션 관리