2021. 4. 30. 16:29ใ๐ฑ Develop/devOps
- 1. Dockerfile, docker ๋ฐฐํฌ ํ์ผ ์ค๋นํ๊ธฐ
- 2. Jenkins์์ ssh ์ค์ ํ๊ธฐ
- 3. Jenkins ๊ถํ ์ค์ ํ๊ธฐ
์๋๋ github ์ฌ๋ฆผ → Jenkins์์ github์ ์ฌ๋ผ์์๋ springboot ํ๋ก์ ํธ๋ฅผ ๊ฐ์ ธ์์ ๋น๋ → ๋ฉ์ธ ์๋ฒ์ .jar ํํ๋ก ํ์ผ์ ์ ์ก → ์คํ ์ ํ๊ณ ์ถ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ ๋ฐฉ๋ฒ์ ์จ์ผํ์ง๋ง, ์ ๋ springboot ์๋ฒ๋ฅผ docker ์ปจํ ์ด๋์์ ์คํํ ๊ฒ์ด๋ฏ๋ก ๋ค์๊ณผ ๊ฐ์ ํ๋ก์ฐ๋ก ๊ฐ๋ ค๊ณ ํฉ๋๋ค.
github ์ฌ๋ฆผ →
Jenkins์์ github์ ์ฌ๋ผ์์๋ springboot ํ๋ก์ ํธ๋ฅผ ๊ฐ์ ธ์์ ๋น๋ →
jenkins ์ปจํ
์ด๋์์ ์ด๋ฏธ์ง๋ก ๋น๋ํด์ ๋์ปค hub์ push →
๋ฉ์ธ ์๋ฒ์์๋ docker image๋ฅผ ๋ฐ์์ ์ปจํ
์ด๋ ์คํ
1๏ธโฃ Dockerfile, docker ๋ฐฐํฌ ํ์ผ ์ค๋นํ๊ธฐ
Springboot ์ต์๋จ ๊ฒฝ๋ก์ Dockerfile์ ํ๋ ์์ฑํด์ค๋๋ค.
FROM openjdk:8-jdk-alpine
VOLUME /tmp
ARG JAR_FILE=build/libs/retrospect-0.0.1-SNAPSHOT.jar
COPY ${JAR_FILE} app.jar
EXPOSE 8080
ENTRYPOINT ["java","-jar","/app.jar"]
Jenkins ํ๋ก์ ํธ์์ ๋ฐ๋ก docker ๋ช ๋ น์ด๋ฅผ ์คํํ๋ ๋ฐฉ๋ฒ๋ ์์ง๋ง, ํตํฉ์ ์ผ๋ก ๊ด๋ฆฌํ๊ธฐ ์ํด Jenkins EC2 ์๋ฒ์ " docker ์ด๋ฏธ์ง ์์ฑ ๋ฐ ํ๋ธ push " ๋ฅผ ํ๋ ์คํฌ๋ฆฝํธ ํ์ผ์ ๋ง๋ค์ด์ค์๋ค.
๐ home/ec2-user/compose/docker_bp.sh
#bin/bash
#docker image์ ์ฒซ tag๋ฅผ ์ผ๊ณ ๋ค์ ๋ฒ์ ์ image๋ฅผ ์์ฑ
sudo docker build -t ybell1028/yapp-web:$(docker images | awk '($1 == "๋์ปค ํ๋ธ ๋ ํฌ์งํ ๋ฆฌ") {print $2 += .01; exit}') .
#docker hub์ push ํ๊ธฐ์ํด login
sudo docker login -u ๋์ปคํ๋ธ์์ด๋ -p ๋์ปคํ๋ธ๋น๋ฐ๋ฒํธ
#docker hub์ push
sudo docker push ๋์ปค ํ๋ธ ๋ ํฌ์งํ ๋ฆฌ:$(docker images | awk '($1 == "๋์ปค ํ๋ธ ๋ ํฌ์งํ ๋ฆฌ") {print $2 += .01; exit}')
#tag๊ฐ "latest"์ธ image๋ฅผ ์ต์ ๋ฒ์ ์ ํตํด ์์ฑ
sudo docker tag ๋์ปค ํ๋ธ ๋ ํฌ์งํ ๋ฆฌ:$(docker images | awk '($1 == "๋์ปค ํ๋ธ ๋ ํฌ์งํ ๋ฆฌ") {p rint $2; exit}') ๋์ปค ํ๋ธ ๋ ํฌ์งํ ๋ฆฌ:latest
#latest๋ฅผ docker hub์ push
sudo docker push ๋์ปค ํ๋ธ ๋ ํฌ์งํ ๋ฆฌ:latest
#๋ฒ์ ๊ด๋ฆฌ์ ๋ฌธ์ ๊ฐ ์์ด latest๋ฅผ ์ญ์
sudo docker rmi ๋์ปค ํ๋ธ ๋ ํฌ์งํ ๋ฆฌ:latest
ํด๋น ํ์ผ์ ์คํํ๋ฉด, docker hub์ ๋ก๊ทธ์ธํด์ ์ด๋ฏธ์ง๋ฅผ ๋ง๋ค๊ณ pushํ๋ ๊ณผ์ ๊น์ง ํ ๋ฒ์ ์ํํ ์ ์์ต๋๋ค.
2๏ธโฃ Jenkins์์ ssh ์ค์ ํ๊ธฐ
plugin์์ ssh ๋ฅผ ๋ค์ด๋ฐ์์ฃผ๊ณ ํ๊ฒฝ์ค์ ์ผ๋ก ๋ค์ด๊ฐ๋ฉด SSH remote hosts ์ค์ ์นธ์ด ์๊น๋๋ค. ์ฌ๊ธฐ์ ์คํฌ๋ฆฝํธ ํ์ผ์ด ์๋ Jenkins ์๋ฒ ์ค์ ์ ์ ์ฅํด์ค๋๋ค.
test connection์ด ์ฑ๊ณตํ๋ฉด ๋ค์ ์์ดํ ์ค์ ์ผ๋ก ๋์์ต๋๋ค. ๋ง์ฝ test connection์์ timeout์ด ๋ฌ๋ค๋ฉด, ec2 ์ธ๋ฐ์ด๋ ๊ท์น์์ ssh๊ฐ ํน์ IP๋ง ํ์ฉ๋๋์ง ํ์ธํด์ฃผ์ธ์. ํ์ฌ ํ ์คํธ๋ฅผ ํ๊ธฐ ์ํด ์ ๋ ์ธ๋ฐ์ด๋ ๊ท์น์ SSH , port 22, ์์น ๋ฌด๊ด์ ์ค์ ํด์ฃผ์์ต๋๋ค.
๋ค์ ์์ดํ ์ค์ ์ผ๋ก ๋์์ต์๋ค. ๋น๋ ํ๊ฒฝ์์ Execute shell script on remote host using ssh ๋ฅผ ์ ํํ๊ณ , ์๊น ํ๊ฒฝ์ค์ ์์ ์ ์ฅํ SSH ์ ๋ณด๋ฅผ ๋ถ๋ฌ์ต๋๋ค. ๋ณธ ์ค์ ์ Jenkins๊ฐ springboot ํ๋ก์ ํธ๋ฅผ ๋น๋ํ๊ธฐ ์ / ํ์ ์ก์ ์ ์ง์ ํด์ค ์ ์์ต๋๋ค.
์ ๋ ๋น๋ ํ์ "ec2 ์๋ฒ์ ์๋ .sh ํ์ผ์ ์คํํ๋" ๋ช ๋ น์ด๋ฅผ ์ ์ฅํด์ Jenkins๊ฐ ๋์ปค ์ด๋ฏธ์ง ๋น๋ ๋ฐ ํ๋ธ push๊น์ง ์ํํ๋ ๋ฐฉ๋ฒ์ ํํ๊ฒ ์ต๋๋ค.
sudo sh /home/ec2-user/compose/docker_bp.sh
๋ง์ฝ ๋น๋ ์ sudo sh~ ์คํฌ๋ฆฝํธ๊ฐ ์คํจํ๋ค๋ฉด, ๋ค์ ํฌ์คํ ์ ์ฐธ๊ณ ํด์ฃผ์ธ์.
์ฌ๋ ์๋ฆผ๋ฐ๊ธฐ๋ ๋ค์ ํฌ์คํธ์ ์งํํ๋๋ก ํ๊ฒ ์ต๋๋ค!