Jenkins ์ ๊ทธ๋ ์ด๋ ๋ฐ Master-Slave ๊ตฌ์ฑ
์ด๋ ํ ์์ (Job)์ด ์๋ค๊ณ ๊ฐ์ ํด๋ณด์. ์ด๋ฅผ “์ ํด์ง ์๊ฐ์ ์ฃผ๊ธฐ์ ” ์ด๋ “ํ์ํ ๋” ์์ ์ ์ํํ๊ณ ์ถ๋ค๋ฉด ์ด๋ค ํด(Tool)์ด ๋ ์ค๋ฅด๋๊ฐ? ๊ทธ๋ฆฌ๊ณ ์ด ์์ (Job)๋ค์ ์คํ์ด๋ ฅ ๋ฑ ์ ์ฒด์ ์ผ๋ก ๊ด๋ฆฌํ๊ณ ํ์์ ๋ฐ๋ผ ๋ค์ํ ํ๋ฌ๊ทธ์ธ์ ํ์ฉํ์ฌ ์ ๋ง์ ๋ง๋ ์์ (Job)์ผ๋ก ๊ตฌ์ฑํ๊ณ ์ถ์๋ ๊ฐ์ฅ ์ฒซ๋ฒ์งธ๋ก ๋ ์ค๋ฅด๋ ํด์ ๋ฐ๋ก “Jenkins” ๋ค. (๊ทนํ ํ์ ๊ฐ์ธ์ ์ธ ์๊ฐ์ผ์๋ ์์ง๋ง… ) ๋ฌผ๋ก ๋ฆฌ๋ ์ค ๊ธฐ๋ฐ์ crontab ์ด๋ ๋ค๋ฅธ ์ค์ผ์ฅด๋ฌ๋ฅผ ํ์ฉํ ์๋ ์๋ค. ๋ค๋ง ํ์ ๊ฐ์ธ์ ์ธ ๋๋์ผ๋ก ๋๋ง์ Jarvis(?)์ฒ๋ผ ๋ด๊ฐ ์ํ๋๋ฐ๋ก ์ค์ ๋ง ํด๋๋ฉด ์ ํด์ง ์๊ฐ์ ์ํํ๊ณ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ก๊ทธ๋ก ๋จ๊ฒจ๋๊ณ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์๋ ์๋ฆผ๋ ๋ฐ์์ ์์ผ๋ ๋๋ฌด ์ข์ ํด์ด๋ผ ์๊ฐ์ด ๋ ๋ค.

์ถ์ฒ : https://gfycat.com/ko/colossalsociablebuffalo
์ง๋ ํฌ์คํ ์์๋ Jenkins ๋ฅผ ์ค์นํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์์๋ณด์๋ค. (์ ํํ ๋งํ๋ฉด ์นํธํค ์์ค์… ) ์ด๋ฒ ํฌ์คํ ์์๋ Jenkins์ ๋ ธ๋๋ฅผ ์ถ๊ฐํ์ฌ master-slave ๋ถ์ฐํ๊ฒฝ์ผ๋ก ๊ตฌ์ฑํ๋ ๋ฐฉ๋ฒ๊ณผ Jenkins ๋ฒ์ ์ ์ ๊ทธ๋ ์ด๋ ํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์ ๋ฆฌํด๋ณด๊ณ ์ ํ๋ค.
๋ง์นจ ํ์์ ํ์์ ์ ํจ์ค๋ฅผ ๋ถ์ฐํ๊ฒฝ์ผ๋ก ์ด์ํ๊ณ ์์๋๋ฐ ๋ฒ์ ์ 1.x … ๊ฐํ์ ์ผ๋ก Jenkins ๋ฒ์ ์ด์๋ก ์๋ฌ๊ฐ ๋ฐ์ํด์ ์ ๊ทธ๋ ์ด๋๋ฅผ ํด์ผํ๋ ์ํฉ์ด ์๊ธด๊ฒ์ด๋ค. ์ํค์ง๋ ์์ ์ผ์ ํ๋ฉด์ ํ์ ๋์๋ ๋ ๊ฒธ, ํฌ์คํ ๋ ํ ๊ฒธ, 1์ 2์กฐ ํจ๊ณผ. ์๋ฒ ํ๊ฒฝ์ CentOS 7.4 64Bit ์์ ํ ์คํธ ํ์๋ค.
Jenkins ๋ฒ์ ์ ๊ทธ๋ ์ด๋ ํ๊ธฐ
Jenkins๋ฅผ ์
๊ทธ๋ ์ด๋ ํ๊ฒ๋๋ฉด ๊ธฐ์กด์ ์์๋ Jenkins์ ํ๊ฒฝ์ค์ ์ ์ด๋ป๊ฒ ๋ง์ด๊ทธ๋ ์ด์
ํ ๊น? Job ์คํ๊ธฐ๋ก๋ค์ ๊ทธ๋ฅ ๋ ๋ ค๋ฒ๋ ค์ผ ํ๋? ๊ฑฑ์ ์ ํ๋ฉฐ ๊ตฌ๊ธ๋ง์ ํด๋ณธ๋ค. ๊ทธ๋ฌ๋ฉด “์ํด๋ณธ๊ฒ์ ๋ํ ๋๋ ค์” ์ ๊ฐ๋ ํ์์ ๋ง์์ด ๋ฌด์ํ ์ ๋๋ก ๋๋ฌด ๊ฐ๋จํ๊ฒ๋ ๊ทธ๋ฅ ๊ธฐ์กด์ ์๋ war ํ์ผ์ ์ต์ ๋ฒ์ ์ผ๋ก ๊ต์ฒดํ๊ณ ์ฌ์์ ํ๋ผ๊ณ ๋์จ๋ค. ์ญ? ๋ญ์ด๋ฆฌ ๊ฐ๋จํด? ๋๋ถ๋ถ์ ๋ฌธ์ ๋ค์ ์ง๋ ๊ฒ๋ถํฐ ๋จน๊ณ ์คํ์ ์ฎ๊ธฐ์ง ๋ชปํด์ ์์์ ํด๊ฒฐ์ ํ์ง ๋ชปํ๋๊ฒ ์ ๋ฐ ์ด์๊ฐ๋ค. ์, ๋ฐ๋ก ์คํ์ ์ฎ๊ฒจ๋ณด์.
์ฐ์ ๋ฒ์ ์
๊ทธ๋ ์ด๋๋ฅผ ํ
์คํธ ํ๊ธฐ ์ํด ์ผ๋ถ๋ฌ ๋ฎ์๋ฒ์ ์ผ๋ก ์ค์น๋ฅผ ํด๋๋ค. (ํ์๋ 1.609.1๋ก ์ค์นํด๋ดค๋ค.) ๊ทธ๋ฆฌ๊ณ ๋ฒ์ ์
๊ทธ๋ ์ด๋ ํ ์ค์ ์ด ๊ทธ๋๋ก ์ฎ๊ฒจ์ง๋์ง๋ฅผ ํ์ธํ๊ธฐ์ํด Security ์ค์ ์ ํด์ Jenkins ์ ๊ทผ์ ๋ก๊ทธ์ธ ์ฌ๋ถ๋ฅผ ๋ฌผ์ด๋ณด๋ก ์ค์ ํด๋๋ค.

์ค์ ์ด ์๋ฃ๋์์ผ๋ฉด ์ต์ ๋ฒ์ ์ war๋ฅผ ๋ค์ด๋ฐ์ ๊ต์ฒดํ๊ณ ์ฌ์์์ ํด์ค๋ค. ๊ทธ๋ฌ๋ฉด ๋๋ฌด๋๋ ๊ฐ๋จํ๊ฒ ๋ฒ์ ์ด ์ ๊ทธ๋ ์ด๋๊ฐ ๋๊ฒ์ ํ์ธํ ์ ์๋ค. ๊ทธ๋ฆฌ๊ณ ์ฒ์์ ์ค์ ํ Security ์ค์ ๊น์ง ๊ทธ๋๋ก ์ ์ง๋๋๊ฒ ๋ํ ํ์ธ์ด ๊ฐ๋ฅํ๋ค. ๋ฌผ๋ก ๊ตฌ ๋ฒ์ ์์ ์ค์น๋์๋ ํ๋ฌ๊ทธ์ธ๋ค์ด ๋ฒ์ ์ ์ด ๋๋ฉฐ ๊ทธ์ ๋ฐ๋ผ ์ง์ํ์ง ์๋ ๋ฌธ์ ๋ค์ด ์๊ธธ ์ ์๋๋ฐ ์ด ๋ถ๋ถ์ ํ๋ฌ๊ทธ์ธ์ ์ ๊ทธ๋ ์ด๋๋ฅผ ํด์ค๋ค๊ฑฐ๋ ๊ฐ ์ํฉ์ ๋ง๋ ๋์์ ํด์ค์ผ ํ๋ค. ์ด๋ ๊ฒ ํด์ ์๊ฐ๋ณด๋ค(?) ๋๋ฌด ๊ฐ๋จํ๊ฒ ๋ฒ์ ์ ์ด ์๋ฃ๋์๋ค.

Jenkins ๋ถ์ฐํ๊ฒฝ ๊ตฌ์ฑํ๊ธฐ (๋ ธ๋ ์ถ๊ฐํ๊ธฐ)
์ด๋ฒ์ Jenkins๋ฅผ ๋ถ์ฐํ๊ฒฝ์ผ๋ก ๊ตฌ์ฑํด๋ณด๊ณ ์ ํ๋ค. ์ด๋ ๊ฒ ๋ ธ๋๋ฅผ ์ถ๊ฐํ๋ฉฐ ๋ถ์ฐํ๊ฒฝ์ ๊ตฌ์ฑํ๋ ์ด์ ๋ ๋ง์คํฐ-์ฌ๋ ์ด๋ธ(Master-Slave) ํจํด์ ์ฅ์ ์ ์ป๊ณ ์ ํจ์ด๋ค. ๋ง์คํฐ๋ ์์ ์ ์ชผ๊ฐ๊ณ ์ฌ๋ ์ด๋ธ๋ก ๊ตฌ์ฑ๋ ๋ ธ๋์๊ฒ ๋ถ๋ฐฐ๋ฅผ ํ๊ฒ๋๋ฉด ์ฌ๋ ์ด๋ธ ์๋ฒ๋ ๋ง์คํฐ์ ์์ฒญ์ ์ฒ๋ฆฌํ๊ณ ๋ฆฌํดํ๊ฒ ๋๋ค. ๋ง์น ์คํํฌ๋ํํธ์์ ์ผ๊พผ์ ๋๋ ค์ ๋ฏธ๋ค๋๊ณผ ๊ฐ์ค๋ฅผ ๋ ๋นจ๋ฆฌ ์ป๋๊ฒ์ฒ๋ผ ๋ง์ด๋ค.
์ฌ๊ธฐ์ ํ์๊ฐ ๊ฐ์ฅ ๋ง์ด ์ฝ์งํ ๋ถ๋ถ. ์ฌ๋ ์ด๋ธ ์๋ฒ๋ฅผ ์ถ๊ฐํ๋๋ฐ ์ฌ๋ ์ด๋ธ ์๋ฒ๊ฐ ๋๋ ์๋ฒ์ ๋์ผํ๊ฒ ์ ํจ์ค๋ฅผ ์ค์นํ๊ณ ๊ทธ๋ค์ ๋ชจ๋ ์ฐ๊ฒฐํ๋ ค ํ๋๊ฒ… ๋ง์น ํด๋ฌ์คํฐ๋ง ํ๋๊ฒ์ฒ๋ผ… ๋น์ฐํ Jenkins ๋ค์ ๋ฌถ์ํํ(?) ๊ฐ ๋์ผ ํ ๊ฒ๊ฐ์ ์๊ฐ์ผ๋ก ์๋ํ์์ง๋ง ์์ฒญ๋ ์ฝ์ง์ ์ฐ์์ด ๋์ด๋ฒ๋ ธ๋ค. ์๊ณ ๋ณด๋ ๋ง์คํฐ Jenkins์์ ์ฌ๋ ์ด๋ธ ์๋ฒ์ ์์ ์ ์ ๋ฌํ ์ ์๋๋ก ์ฐ๋๋ง ์์ผ์ฃผ๋ฉด ์๋์ผ๋ก Agent๋ฅผ ๋ง์คํฐ Jenkins๊ฐ ์ฌ๋ ์ด๋ธ ์๋ฒ์ ์ค์น/์คํ์ ํ๊ณ ์์ ์ ๋ถํ ํ๋๊ฒ์ ํ์ธํ ์ ์์๋ค. ์, ๊ทธ๋ผ ์์ํด๋ณด์.
- ๋ง์คํฐ ์๋ฒ์์ ๊ณต๊ฐํค์ ๊ฐ์ธํค ์์ฑ ๋จผ์ ๋ง์คํฐ ์๋ฒ์ ์ฌ๋ ์ด๋ธ ์๋ฒ๋ฅผ SSH๋ก ํต์ ํ ์ ์๋๋ก SSH ํค ์ค์ ์ ํด์ค๋ค. ํต์ ํ ๋๋ ํ ๋ฆฌ ํ์ .ssh ํด๋์์ ์์ฑํ๋ค.
ssh ํค ์์ฑ
$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/~/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /~/.ssh/id_rsa.
Your public key has been saved in /~/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ user@hostname
The key's randomart image is:
+---[RSA 2048]----+
|oo. . |
|o... o + |
|. .o o+.o |
|.++++. +o+o.. |
|o.+*=.o.SEoo= |
| . o+.*...+ + |
| .. + +. + |
| + . . |
| ... |
+----[SHA256]-----+
๊ณต๊ฐํค ํ์ธ
$ cat id_rsa.pub
ssh-rsa AAAAB3Nza~~~~~~~~eQKcx8B6uAflRm1J8In1 user@hostname
- ์ฌ๋ ์ด๋ธ ์๋ฒ์์ ๋ง์คํฐ ์๋ฒ์์ ๋ง๋ ๊ณต๊ฐํค๋ฅผ ๋ฑ๋ก ์ฌ๋ ์ด๋ธ ์๋ฒ์์๋ ๋ง์คํฐ ์๋ฒ์์ SSH ์ ์์ ํ์ฉํด์ผ ํ๊ธฐ๋๋ฌธ์ ๋ง์คํฐ ์๋ฒ์์ ์์ฑํ ๊ณต๊ฐํค๋ฅผ ๋ฑ๋กํด์ค๋ค. ์ฌ๋ ์ด๋ธ ์๋ฒ์ ํ ๋๋ ํ ๋ฆฌ ํ์ .ssh ํด๋์๋ ํ์ผ์ ๋ง๋ค๊ณ ์ ๊ณต๊ฐํค๋ฅผ ๋ฃ์ด์ฃผ์.
$ vi authorized_keys
ssh-rsa AAAAB3Nza~~~~~~~~eQKcx8B6uAflRm1J8In1 user@hostname
- Jenkins ์์ Credentials ์ ๋ง๋ค๋ Private Key ์ค์ ์ “From the Jenkins master ~/.ssh"์ผ๋ก ์ค์ ํ๋ค. ๋์ค์ ์ด ์ ๋ณด๋ก ์ธ์ฆ์ ์ฒ๋ฆฌํ๋ค.

- ๋ ธ๋๋ฅผ ์ถ๊ฐํ๊ณ ์กฐ๊ธ ์์ผ๋ฉด ๋ง์คํฐ ๋ ธ๋๊ฐ ์ฌ๋ ์ด๋ธ ์๋ฒ์ ์์ด์ ํธ๋ฅผ ์ค์น/์คํํ๊ณ ์ฐ๋์ด ๋๊ฒ์ ํ์ธํ ์ ์๋ค.

์ค์ ๋ก ์ฌ๋ ์ด๋ธ ์๋ฒ์์ ํ๋ก์ธ์ค๋ฅผ ํ์ธํ๋ฉด ์๋์ฒ๋ผ ์์ด์ ํธ( slave.jar )๊ฐ ์ค์น/์คํ๋๊ณ ์๋๊ฒ์ ํ์ธํ ์ ์๋ค.