โข ์๋ ํ์ธ์~ ์ด์ ์ ์ด์ํ๋ ๋ธ๋ก๊ทธ ๋ฐ GitHub, ๊ณต๋ถ ๋ด์ฉ์ ์ ๋ฆฌํ๋ Study-GitHub ๊ฐ ์์ต๋๋ค!
โข ๐
โ CLASS101 ๋ฐฑ์๋ ์์คํ ์ค๋ฌด - Chapter4 ๋ฐฐํฌ ์๋ํ์ ํ์ ์ ์ํ Git ์ฌ์ฉ
์๋ ํ์ธ์, ํด๋์ค101 ๋ฐฑ์๋ ์์คํ ์ค๋ฌด ๊ฐ์๋ฅผ ๋ฃ๊ณ , ๋ณต์ต ์ฐจ์์ผ๋ก ์ ๋ฆฌํ์ฌ ๋จ๊ธฐ๋ ค๊ณ ํฉ๋๋ค! ํน์ ๋ฌธ์ ๊ฐ ๋๋ค๋ฉด ๊ธ์ ์ญ์ ํ๊ฒ ์ต๋๋ค !! |
class101.net/products/5fc4a3b4fc231b000d85661b
ํ์ง ๋๊ธฐ์ ๊ฐ๋ฐ์ ํธ์ ํจ๊ปํ๋ ์ง์ง ๋ฐฑ์๋ ์์คํ ์ค๋ฌด!
IT ๋๊ธฐ์ ๋ค์ ๋ฐฑ์๋ ๊ฐ๋ฐ์ ์ฑ์ฉ๊ณต๊ณ ๋ฅผ ๋ณธ ์ ์๋์? ๐์ ๋ฐ์ค ์น ๋ถ๋ถ์ ๋ฐฐ์ธ ์ ์๋๋ก ์ปค๋ฆฌํ๋ผ์ ๊ตฌ์ฑํ์ด์. ๊ฒ๋ณด๊ธฐ์ ์ด๋ ค์ ๋ณด์ด์ง๋ง, ๊ฒฐ๊ตญ ๋ฐฐ์ฐ๊ณ ๋๋ฉด ๋๋ ์ ๋ฐ ๊ณณ์์ ์ผํ ์ ์
class101.net
โ GitHub Webhook๊ณผ Jenkins๋ก ๋ฐฐํฌ ์๋ํํ๊ธฐ

์ ๊ทธ๋ฆผ์ ๊ณผ์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
1) CPU Bound ์ ํ๋ฆฌ์ผ์ด์ ์ Repository์ Push ๊ฐ ๋ฐ์ํฉ๋๋ค.
2) Jenkins์์ ํด๋น ์ฝ๋๋ฅผ ๋น๋ํฉ๋๋ค.
3) ๊ทธ ํ Jenkins์์ GCP์ ๊ฐ cpu ์ธ์คํด์ค(1, 2, 3) ์ผ๋ก ๋ฐฐํฌ๋ฅผ ํฉ๋๋ค.
github.com/lleellee0/cpu-bound-application
lleellee0/cpu-bound-application
Contribute to lleellee0/cpu-bound-application development by creating an account on GitHub.
github.com
๋จผ์ ์ Repository๋ฅผ fork ๋ฐ์ต๋๋ค.

Jenkins์ ์ ์ํ์ฌ ํ๋ก์ ํธ๋ฅผ ํด๋ฆญํ๊ณ , ๊ตฌ์ฑ์ ํด๋ฆญํ์ฌ ์์ค ์ฝ๋ ๊ด๋ฆฌ์์ ์์ ๋ถ๋ถ๋ค์ ์์ ํฉ๋๋ค.
โข Repository URL - forkํ ๋ ํฌ์งํ ๋ฆฌ์ URL

๊ทธ ํ ์๋๋ก ๋ด๋ ค์์ Build ๋ถ๋ถ์ ์์ ํฉ๋๋ค.
Add build step์์ Exec shell ์ ํด๋ฆญํ๋ฉด ์์ ๊ฐ์ ํ๋ฉด์ด ์์ฑ๋๋๋ฐ์,
์ฌ๊ธฐ์ ๋ฉ์ด๋ธ์์ jar ํ์ผ์ ์์ฑํ ์ ์๋ ๋ช ๋ น์ด๋ฅผ ์คํํฉ๋๋ค.
./mvnw clean package

์ ๊ณผ์ ์ด ๋๋ ๋ค ์ ์ฅ์ ํ๊ณ ๋น๋๋ฅผ ์งํํ๋ฉด ์คํจ๋ฅผ ํฉ๋๋ค.

๋ก๊ทธ๋ฅผ ํ์ธํด๋ณด๋ฉด ./mvnw์ Permission denied ๋ก๊ทธ๊ฐ ์ฐํ ๊ฑธ ๋ณผ ์ ์์ต๋๋ค.

๋ฐ๋ผ์ ์์ ๊ฐ์ด Jenkins์ ๊ตฌ์ฑ์์ ๋ฉ์ด๋ธ์ ๋น๋ํ๊ธฐ ์ , ๊ถํ์ ๋ถ์ฌํ๋๋ก Shell ๋ช ๋ น์ด๋ฅผ ์์ ํฉ๋๋ค.
chmod 544 ./mvnw
./mvnw clean package

์ ์ฅ์ ํ ๋ค Jenkins๋ฅผ ๋ค์ ๋น๋๋ฅผํ๋ฉด ์ ์์ ์ผ๋ก ๋น๋๊ฐ ๋๋๋ฐ์,
ํ์ฌ docker๋ฅผ ํตํด ๋น๋๊ฐ ๋์๋๋ฐ, ์ด๊ฑธ jar ํ์ผ๋ก ๋น๋๋ฅผ ์งํํ๋๋ก ๋ณ๊ฒฝํด๋ณด๊ฒ ์ต๋๋ค.

์ ๋ก๊ทธ ํ์ผ์์ target ~ ๋ถํฐ์ ๊ฒฝ๋ก๋ฅผ ๋ณต์ฌํฉ๋๋ค.
target/cpu-0.0.1-SNAPSHOT.jar

๊ทธ ํ Jenkins์ ๊ตฌ์ฑ์ผ๋ก ๋์์์ ๋น๋ ํ ์กฐ์น ๋ฉ๋ด์์ ์์ ๋ถ๋ถ์ ์์ ํฉ๋๋ค.
โข Source files : ์์์ ๋ณต์ฌํ target ~
โข Remove prefix : target
โข Exec command : sudo java -jar cpu-0.0.1-SNAPSHOT.jar
์๋ cpu-worker์ ์ธ์คํด์ค 2, 3 ์๋ ๋์ผํ๊ฒ ์ค์ ์ ํฉ๋๋ค.
๊ทธ ํ ์ ์ฅ์ ํ ๋ค ๋น๋๋ฅผ ์งํํฉ๋๋ค.

๋ก๊ทธ๋ฅผ ๋ณด์๋ฉด java๋ผ๋ ๋ช ๋ น์ด๋ฅผ ์ฐพ์ ์ ์๋ค๊ณ ๋์ต๋๋ค.
์ฆ, cpu-worker์ ์ธ์คํด์ค 1,2,3์๋ docker๋ง ์ค์นํ์ ๋ฟ Java๋ ์ค์น๋ฅผ ํ์ง ์์์ ๋ฐ์ํ๋ ์ค๋ฅ์ ๋๋ค.

์ธ ๊ฐ์ ์ธ์คํด์ค์ ์๋ ๋ช ๋ น์ด๋ฅผ ํตํด java๋ฅผ ์ค์นํฉ๋๋ค
$ sudo yum install -y java
(-y ๋ช ๋ น์ด๋ฅผ ์ถ๊ฐํ๋ฉด ์ค๊ฐ์ y๋ฅผ ๋๋ฅด์ง ์์๋ ๋ฉ๋๋ค.)
๊ทธ ํ ๋ค์ ๋น๋๋ฅผ ์งํํฉ๋๋ค.

๊ทธ๋ผ ์์ ๊ฐ์ด ๋ก๊ทธ๊ฐ ๋๋์ง ์์๋ค๊ณ ํ๋จํด์ ๋น๋๊ฐ ๊ณ์ ์งํ๋๋๋ฐ์, ์ผ๋จ ์ค์ง๋ฅผ ํฉ๋๋ค.


Jenkins์ ๊ตฌ์ฑ ๋ถ๋ถ์์ ์ธ์คํด์ค1, 2, 3 ๋ชจ๋ ๋น๋ ํ ์กฐ์น์์ Exec command๋ฅผ ์์ ํฉ๋๋ค.
nohup sudo java -jar cpu-0.0.1-SNAPSHOT.jar > nohup.out 2>&1 &
๊ทธ ํ ์ ์ฅ์ ํ๊ณ ๋น๋๋ฅผ ์งํํฉ๋๋ค.

๋น๋๋ฅผ ์งํํ๊ณ ๋ก๊ทธ๋ฅผ ํ์ธํด๋ณด๋ฉด ์ ์์ ์ผ๋ก ๋ฐฐํฌ๊ฐ ์งํ๋ ๊ฑธ ํ์ธํ ์ ์์ต๋๋ค.
ํ์ฌ Nginx๋ 8080 ํฌํธ๋ก ๋์ด์ ธ์๋๋ฐ, ์ ํ๋ฆฌ์ผ์ด์ ์ 80 ํฌํธ๋ก ๋์ด์ ธ ์์ด์ ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
๋ฐ๋ผ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ํฌํธ๋ฅผ 8080์ผ๋ก ๋ณ๊ฒฝํ ๋ค Push๋ฅผ ํ๊ณ , ์ด๋ฅผ ์๋ ๋ฐฐํฌํ๋๋ก ์งํํ๊ฒ ์ต๋๋ค.

๋จผ์ cpu-worker์ ์ธ์คํด์ค์์ ํ์ฌ ์คํ์ค์ธ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ข ๋ฃํฉ๋๋ค.(์ธ์คํด์ค 1, 2, 3 ๋ชจ๋ ์ข ๋ฃํฉ๋๋ค.)
$ ps -aux | grep java
$ sudo kill -9 1974
$ sudo kill -9 25215
$ sudo kill -9 25227
$ sudo kill -9 1974 25215 25227 ==> ํ ๋ฒ์ ์ข ๋ฃํ๊ธฐ


์ ๊ณผ์ ์ด ๋๋๋ฉด GitHub๋ก ์์ ๋ ํฌ์งํ ๋ฆฌ > Settings > Webhooks > Add webhook ๋ฅผ ํด๋ฆญํฉ๋๋ค.

Payload URL์ Jenkins์ URL/github-webhok/ ์ ์์ฑํฉ๋๋ค.
Content type์ application/json ์ผ๋ก ์์ ํฉ๋๋ค.
Just the push event - push event๊ฐ ๋ฐ์ํ์ ๋, Webhook(Payload URL) ํธ์ถ
๊ทธ๋ฆฌ๊ณ Add webhook ๋ฒํผ์ ํด๋ฆญํฉ๋๋ค.

์ GitHub์ Repository๋ฅผ clone ๋ฐ๊ณ ์ธํ ๋ฆฌ์ ์ด์์ ์คํํ๊ณ , application.properties ํ์ผ์์
ํฌํธ๋ฅผ 80 -> 8080์ผ๋ก ์์ ํฉ๋๋ค.
๊ทธ ํ add - commit - push ๋ฅผ ์งํํฉ๋๋ค.

Push๋ฅผ ํ๋ฉด Jenkins์์ ๋น๋๊ฐ ์งํ์ด ๋ฉ๋๋ค.

๋ก๊ทธ๋ฅผ ํ์ธํด๋ด๋ ์ ์์ ์ผ๋ก ๋น๋๊ฐ ๋์๊ณ , cpu-worker์ ์ธ์คํด์ค ์ธ๋ถ IP/hash/123 ์ผ๋ก ์ ์ํด๋ ์ ์์ ์ผ๋ก ์ฐ๊ฒฐ์ด ๋ฉ๋๋ค.
๋ณ๊ฒฝ ๋ด์ญ์ด ์ ์์ ์ผ๋ก ๋ฐฐํฌ๋๋์ง ํ์ธํ๊ธฐ

/hello URL์ ๋ฆฌํด๊ฐ์ ์์ ํ๊ณ add > commit > push ๋ฅผ ์งํํ ๋ค ํ ์คํธ๋ฅผ ํด๋ณด๊ฒ ์ต๋๋ค.


์ ์์ ์ผ๋ก ๋ณ๊ฒฝ์ด ๋์ง๊ฐ ์๋๋ฐ์, nohup์ ๋ก๊ทธ ํ์ผ์ ํ์ธํ๋ฉด
8080 ํฌํธ๊ฐ ์ด๋ฏธ ์ฌ์ฉ์ค์ด๋ผ๋ ์๋ฌ๊ฐ ๋ฐ์ํฉ๋๋ค.
ํน์ ํฌํธ๋ฅผ ์ฌ์ฉ์ค์ธ ํ๋ก์ธ์ค๋ฅผ ํ์ธํ ๋ ์ฌ์ฉํ๋ ๋ช ๋ น์ด๊ฐ lsof ์ธ๋ฐ, CentOS์์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ณต๋๋ ๋ช ๋ น์ด๊ฐ ์ด๋๋๋ค.
๋ฐ๋ผ์ ์ค์น๋ฅผ ํด์ค๋๋ค.(3 ๊ฐ์ ์ธ์คํด์ค ๋ชจ๋ ์ค์นํฉ๋๋ค.)
$ sudo yum install -y lsof


lsof ๋ช ๋ น์ด๋ก 8080 ํฌํธ๋ฅผ ์ฌ์ฉํ๊ณ ์๋ ํ๋ก์ธ์ค๋ฅผ ์ฃฝ์ด๋ ๋ช ๋ น์ด
sudo kill -15 $(sudo lsof -t -i:8080)
์์ ๊ฐ์ด Jenkins์์ ๋น๋ ํ ์กฐ์น์ Exec command ๋ช ๋ น์ด ๋งจ ์์ ์ค์ ํฉ๋๋ค.
(์ด๊ฒ๋ ์ธ์คํด์ค 3๊ฐ ๋ชจ๋ ์ค์ ํฉ๋๋ค.)


์์ ํ git Add > Commit > Push ๋ฅผ ์งํํ๋ฉด ์์ ๊ฐ์ด ๋ฐฐํฌ๋ ํ์ผ์ ํ์ธํ ์ ์์ต๋๋ค.
ํ์ฌ ๋ฌด์ค๋จ ๋ฐฐํฌ๊ฐ ๊ฐ๋ฅํ ์ํฉ์ ์๋๋ฐ์, Artillery๋ฅผ ํตํด ์คํธ๋ ์ค ํ ์คํธ๋ฅผ ์งํํด๋ณด๋ฉด ๋ฐฐํฌ ์คํจ๊ฐ ๋๋ ์ผ์ด ๋ฐ์ํฉ๋๋ค.
์ด๋, ์ธ ์ธ์คํด์ค๊ฐ ๋ชจ๋ ๋์์ ๋ฐฐํฌ๊ฐ ๋๊ณ ์์ด์ ๋ชจ๋ ์ธ์คํด์ค๊ฐ ์ค์ง๋์์๋ Nginx์ ์์ฒญ์ด ๋ค์ด์ค๋ฉด ์คํจ ์ฝ๋๋ก ๋จ์ด์ง๊ฒ ๋ฉ๋๋ค.
์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์ฌ๋ฌ ๋ฐฉ๋ฒ์ด ์กด์ฌํ๊ฒ ์ง๋ง, sleep ์ด๋ผ๋ ๋ช ๋ น์ด๋ฅผ ํตํด ํด๊ฒฐํ ์ ์์ต๋๋ค.

์์ ๊ฐ์ด Jenkins์ ๋น๋ ํ ์กฐ์น์์ ์ธ์คํด์ค 2์ 3์ Exec command์ sleep 30 ์ด๋ผ๋ ๋ช ๋ น์ด๋ฅผ ์ถ๊ฐํฉ๋๋ค.
์์ ํ ๋ฐฐํฌ๋ฅผ ํ๊ณ , Artillery๋ฅผ ํตํด ์คํธ๋ ์ค ํ ์คํธ๋ฅผ ์งํํ๋ฉด ๋ฌด์ค๋จ ๋ฐฐํฌ๊ฐ ๋ฉ๋๋ค.

๋์ปค๋ฅผ ์ด์ฉํ๋ค๋ฉด ์์ ๊ฐ์ด GitHUB์ Jenkins ์ฌ์ด์ ๋์ปค๋ฅผ ํตํด ๋์ปค ์ด๋ฏธ์ง์ AutomatedBuild ๋ผ๋ ๋ช ๋ น์ด๋ฅผ ํตํด ์งํํฉ๋๋ค.
์ฆ, ๋น๋์ ์ฃผ์ฒด๊ฐ Jenkins -> Docker ๋ก ๋ณ๊ฒฝ์ด ๋ฉ๋๋ค.
๋ํ ์ธ์คํด์ค์์๋ docker run ๋ช ๋ น์ด๋ก ์คํ์ ํฉ๋๋ค.
๋๊ธ