Github์ WebHook์ ์ด์ฉํ์ฌ ์๋ Jenkins Job ์คํ
PullRequest๊ฐ ๋ฐ์ํ๋ฉด ์๋ฆผ์ ๋ฐ๊ณ ์ถ๋ค๊ฑฐ๋, ๋ด๊ฐ ๊ด๋ฆฌํ๋ ๋ ํ์งํ ๋ฆฌ์ ๋๊ธ์ด ๋ฌ๋ฆด๋๋ง๋ค ๋๋ ์ด์๊ฐ ์์ฑ๋ ๋๋ง๋ค ์ ๋ณด๋ฅผ ์ ์ฅํ๊ณ ์ถ๋ค๊ฑฐ๋. ์ข
ํฉํด๋ณด๋ฉด Github์์ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ ๋ ์ด๋ค ๋์์ ํด์ผ ํ ๊ฒฝ์ฐ
Github์์ ์ ๊ณตํ๋ Webhook ์ ์ฌ์ฉํ์ฌ ๋ชฉ์ ์ ๋ฌ์ฑํ ์ ์๋ค.
์ ๋น์ฐํ ์ด์ผ๊ธฐ์ด์ง๋ง ์ธ๊ธํ๊ณ ๋์ด๊ฐ๊ป ์๋ค๋ฉด, Github์์ Jenkins Job์ ํธ์ถํ๊ธฐ ์ํด์๋ Jenkins๊ฐ ์ธ๋ถ์ ๊ณต๊ฐ๋์ด ์์ด์ผ ํ๋ค. (๋ด๋ถ์ฌ์ค๋ง์ด๋ private ํ ์ค์ ์ด ๋์ด์๋ค๋ฉด ํธ์ถ์ด ์๋์ด Webhook๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์๋ค.)
Jenkins Security ์ค์
Jenkins Job์ ์ธ๋ถ์์ URL๋ก ์คํ์ ํ๊ธฐ ์ํด์๋ ์๋ ์ค์ ์ด ๊ผญ ํ์ํ๋ค. (์ด ์ค์ ์ ๋ชฐ๋ผ์ ์๋ง์ ์ฝ์ง์ ํ๋ค.) CSRF Protection ์ค์ ์ฒดํฌ๋ฅผ ํ์ด์ค์ผ ํ๋ค. ์ด๋ ๊ฒ ๋๋ฉด ์ธ๋ถ์์ Job์ ๋ํ ํธ๋ฆฌ๊ฑฐ๋ง์ด ๊ฐ๋ฅํด ์ง๋ค.

Jenkins Job ์ค์
Github ์์ Webhook์ ์ํด Jenkins Job์ ์คํํ๊ฒ ๋ ํ
๋ฐ, ๊ทธ๋ ์ ๋ณด๋ค์ด payload
๋ผ๋ ํ๋ผ๋ฏธํฐ์ ํจ๊ป POST
ํ์์ผ๋ก ํธ์ถ์ด ๋๊ธฐ ๋๋ฌธ์ ๋ฏธ๋ฆฌ Job์์ ๋ฐ๋ ์ค๋น(?)๋ฅผ ํด๋ฌ์ผ ํ๋ค.
์ค์ ์ ๊ฐ๋จํ๊ฒ ๋ค์๊ณผ ๊ฐ์ด Job ํ๋ผ๋ฏธํฐ ์ค์ ์ ํด์ฃผ๋ฉด ๋๋ค.

Github Webhook ์ค์
์ด์ Github Repository ์ Hook ์ค์ ๋ง ํ๋ฉด ๋์ด๋๋ค. ํด๋น Repository > Settings > Hooks ์ค์ ์ ๋ค์ด๊ฐ์ Add webhook
์ ์ ํํ์ฌ Webhook์ ๋ฑ๋กํด์ค๋ค.
URL์ {jenkins URL}/jenkins/job/{job name}/buildWithParameters
์์ผ๋ก ์ค์ ํด์ฃผ๊ณ Content Type ์ application/x-www-form-urlencoded
์ผ๋ก ์ ํํ๋ค. ์ธ์ Webhook์ ํธ๋ฆฌ๊ฑฐ๋ง ์ํฌ๊บผ๋๋ ์ต์
์์๋ ์ํ๋ ์ค์ ์ ๋ง์ถ๋ฉด ๋๊ฒ ์ง๋ง ๋๋ pullRequest
๊ฐ ๋ฑ๋ก ๋ ๋๋ง ๋ฏธ๋ฆฌ ๋ง๋ค์ด ๋์ Jenkins Job์ ์คํ์ํฌ ๊ณํ์ด์์ผ๋ Let me select individual events.
์ ์ค์ ํ๊ณ Pull Request
์ ์ฒดํฌ๋ฅผ ํด์ค๋ค. ์๋ ๊ทธ๋ฆผ์ฒ๋ผ ๋ง์ด๋ค.

์ด๋ ๊ฒ ๋ฑ๋กํ๊ณ ๋ค์ ๋ค์ด๊ฐ์ ๋งจ ์๋ซ ๋ถ๋ถRecent Deliveries
์ ๋ณด๋ฉด ping test ๊ฐ ์ด๋ฃจ์ด์ ธ ์ ์์ ์ผ๋ก ์๋ต์ ๋ฐ์๊ฒ์ ํ์ธํ ์๊ฐ ์๋ค.

์ด๋ ๊ฒ ์ค์ ์ ๋ค ํ ๋ค PullRequest๋ฅผ ๋ฐ์์ํค๋ฉด Jenkins ํด๋น Job์์๋ ํ๋ผ๋ฏธํฐ๋ฅผ ๋ฐ์ผ๋ฉฐ ์คํ์ด ๋๊ฒ์ ํ์ธํ ์๊ฐ ์๋ค.

๋~