jenkins batch & deploy - swsuh93/study GitHub Wiki
- AWS Code Deploy๋ก ๋ฐฐํฌ Jenkins์์ ๋ฐฐ์น Jenkins๋ก Spring Batch ๋ฐฐํฌํ๊ธฐ - ๊ธฐ๋ณธ ํ๊ฒฝ ๊ตฌ์ฑ
Gradle์ Multi Module ๋ก ๊ตฌ์ฑ๋ ํ๋ก์ ํธ๋ฅผ ๊ธฐ์ค์ผ๋ก ํ์์ /*
- gradle multi modules : ํ๋์ ๊ณตํต ํ๋ก์ ํธ(root)๋ฅผ ๋๊ณ , ์ด ํ๋ก์ ํธ๋ฅผ ์ฌ๋ฌ ํ๋ก์ ํธ์์ ๊ฐ์ ธ๊ฐ์ ์ฌ์ฉํ ์ ์์ผ๋ฉด ์ข์ง ์์๊น?? -> ๊ฐ๋ฐ์์๋ ๋ฐ๋ก๋ฐ๋ก ๊ณตํต ํ๋ก์ ํธ ์ฝ๋๋ฅผ ์ฌ์ฉํ ์ ์์ด์ผ ํ๋ค -> ๋น๋์์๋ ์๋์ผ๋ก ๊ณตํต ํ๋ก์ ํธ๊ฐ ํฌํจ๋์ด์ผ ํ๋ค. -> core ํ๋ก์ ํธ + sub ํ๋ก์ ํธ */
Spring Batch์ Trigger๋ฅผ ๊ด๋ฆฌํ๋ ๋ฐฉ๋ฒ
- Linux์ crontab : ๋ณดํต ๋ง์ด ์ฌ์ฉ
- Spring Quartz(์ฟผ์ธ ) : ๋ณดํต ๋ง์ด ์ฌ์ฉ[์คํ๋ง์์ ์ค์ผ์ค๋ง ์ง์]
- Jenkins : Spring Batch ๊ด๋ฆฌ์ฉ์ผ๋ก ์ ์ฉ[๋ฐฐํฌ์ฉ Jenkins์ Batch์ฉ Jenkins ๋ถ๋ฆฌ ํ์]
- AWS ํ๊ฒฝ์ค์
- ๋ฐฐํฌ์ฉ Jenkins์ Batch์ฉ Jenkins๋ก Jenkins์ ์๋ฒ๋ ์ด 2๋ ํ์
- ๋ฐฐํฌ์ฉ Jenkins์์ Test & Build๋ฅผ ์ํํ ํ, Code Deploy๋ฅผ ํตํด Batch์ฉ Jenkins์ Spring Batch jar๋ฅผ ์ ๋ฌ
ํ๋์ Jenkins ์ฌ์ฉ ํ์ง ์๋ ์ด์
- ๋ฐฐํฌ๋ฅผ ํ๊ธฐ ์ํ Jenkins๊ฐ DB์ ๋ํ ์ ๊ทผ ๊ถํ๊น์ง ๊ฐ์ง๋ ๊ฒ์ด ์ํ - ๋ฐฐํฌ์ฉ Jenkins๋ฅผ ์
๋ฐ์ดํธ ํ๋ ๋์ ์ ๊ธฐ์ ์ธ ๋ฐฐ์น ์์
์ ๋ค์ด ์์ด ๊ณ์ ์งํํ ์ ์์
- Java ์ฝ๋ ๋ฟ ์๋๋ผ ์์คํ
๋ ๊ฐ์์ ์ญํ ์ ๋ง๊ฒ ๋ถ๋ฆฌํ๋ ๊ฒ์ด ํ์ฅ์ฑ์ด๋ ์ ์ง๋ณด์๋ฉด์์ ๊ต์ฅํ ์ข๊ธฐ ๋๋ฌธ์ ์ฌ๋งํด์ ๋ถ๋ฆฌ
- ๋ฐฐํฌ์ฉ Jenkins๊ฐ ์ค์น๋ EC2์ IAM Role์ S3๊ฐ ํฌํจ๋์์ด์ผ ํจ
[์ญํ ์์ฑ ๋ฐ S3 ์์ฑ] -> jenkins-codedeploy-batch AmazoneS3FullAccess AWSCodeDeployFullAccess
-> jenkins-codedeploy-deploy AWSCodeDeployRole
[S3์ ๋ณด] ๋ฒํท๋ช :ssw-member-deploy ์์ธ ํผ๋ธ๋ฆญ์๋(์ด ๋ฒํท์ ํผ๋ธ๋ฆญ ์ฝ๊ธฐ ์ก์ธ์ค๋ฅผ ๋ถ์ฌํ์ง ๋ง ๊ฒ)
[codedeploy ์ ํ๋ฆฌ์ผ์ด์ ์์ฑ] ์ ํ๋ฆฌ์ผ์ด์ ๋ช : ssw-member-deploy ์ปดํจํ ํ๋ซํผ : EC2/์จํ๋ ๋ฏธ์ค ๋ฐฐํฌ ๊ทธ๋ฃน์ด๋ฆ : member-batch -> ๋ฐฐํฌ๊ทธ๋ฃน์ด ์ ํ๋ฆฌ์ผ์ด์ ํ์์ ์ํจ
ํ๊ฒฝ๊ตฌ์ฑ : Name - jenkins-codedeploy-batch ์ญํ - codedeploy-service
Gradle Multi module ํ๋ก์ ํธ ์์ฑ git ์ค์น github ์์ด๋ ๋ง๋ค๊ธฐ -> ๋ก๊ทธ์ธ -> ์ฐธ์กฐํ github ํฌํฌ[๋ด๊ป๋ก ์ฎ๊น]๋จ๊ธฐ -> ๋ด ๋ ธํธ๋ถ๋ฌ clone -> intellij๋ก open
[Batch Jenkins ์๋ฒ ์ค์ ]
-
ํ์ํ ํจํค์ง ์ ๋ฐ์ดํธ sudo yum update sudo yum install ruby sudo yum install wget
-
agent ์ค์น cd /home/ec2-user wget https://aws-codedeploy-ap-northeast-2.s3.amazonaws.com/latest/install chmod +x ./install sudo ./install auto
cd /home sudo mkdir jenkins sudo mkdir /home/jenkins/member-batch sudo mkdir /home/jenkins/member-batch/deploy sudo mkdir /home/jenkins/member-batch/jar sudo chown -R jenkins:jenkins /home/jenkins
Root ํ๋ก์ ํธ์ gradlew๋ฅผ ์ด์ฉํ์ฌ member-batch ๋ง build ./gradlew :member-batch:clean :member-batch:build
mkdir -p code-deploy-member-batch cp member-batch/code-deploy/.yml code-deploy-member-batch cp member-batch/code-deploy/.sh code-deploy-member-batch cp member-batch/build/libs/*.jar code-deploy-member-batch
zip -r code-deploy-member-batch *
zip ํ์ผ S3 upload
Code deploy๋ก ๋ฐฐํฌ
๋ฐฐ์น ํ์ผ ์คํ sudo -H -u jenkins java -jar $(readlink /home/jenkins/member-batch/application.jar) --job.name=sampleBatch version=test
github OAuth deploy-jenkins Client ID d389c9c7871cecda44ff Client Secret 268d0d230d352dacb017006da081a651d98f3522
- ๋ฐฐํฌ Jenkins ํ๊ฒฝ์ค์ ์๋ก์ด item [build-deploy - freestyle project] general - choice parameter [name : PROJECT_NAME, choices : member-batch] ์์ค์ฝ๋ ๊ด๋ฆฌ - git(url, credentails:github-> git๊ณผ ์ฐ๋ ํ์, git ์ค์น ํ์) Build DEPLOY_DIR_NAME=code-deploy-${PROJECT_NAME} APP_NAME='ssw-member-deploy' BUCKET='ssw-member-deploy' ZIP_NAME=${PROJECT_NAME}-${GIT_COMMIT}-${BUILD_TAG}.zip
./gradlew :${PROJECT_NAME}:clean :${PROJECT_NAME}:build
echo " > ๋ฐฐํฌ.zip ์์ฑ" mkdir -p ${DEPLOY_DIR_NAME} cp ${PROJECT_NAME}/code-deploy/.yml ${DEPLOY_DIR_NAME}/ cp ${PROJECT_NAME}/code-deploy/.sh ${DEPLOY_DIR_NAME}/ cp ${PROJECT_NAME}/build/libs/*.jar ${DEPLOY_DIR_NAME}/
cd ${DEPLOY_DIR_NAME} zip -r ${DEPLOY_DIR_NAME} *
echo " > AWS S3 ์ ๋ก๋" aws s3 cp ${DEPLOY_DIR_NAME}.zip s3://${BUCKET}/${ZIP_NAME} --region ap-northeast-2
echo " > AWS CodeDeploy ๋ฐฐํฌ"
aws deploy create-deployment
--application-name ${APP_NAME}
--deployment-group-name ${PROJECT_NAME}
--region ap-northeast-2
--s3-location bucket=${BUCKET},bundleType=zip,key=${ZIP_NAME}
echo " > ์์ฑ๋ ๋๋ ํ ๋ฆฌ ์ญ์ " cd .. rm -rf ${DEPLOY_DIR_NAME}
/* ./gradlew :${PROJECT_NAME}:clean :${PROJECT_NAME}:build ๋ฉํฐ ๋ชจ๋ ํ๋ก์ ํธ์ด๊ธฐ ๋๋ฌธ์ ์ง์ ํ ํ๋ก์ ํธ๋ง ( ${PROJECT_NAME} ) Build ํฉ๋๋ค. */
๋ฐฐํฌ job test gradle์ ํตํด ๋น๋ ํ๊ฒ ๋๋ java ๋ฒ์ ํ์ธ -> jdk 1.8์[openjdk๊ฐ ์คํ์์ค๋ผ ๋๋ถ๋ถ openjdk ์ด์ฉ]
๋ฐฐํฌ ๋ฐ ๋ฐฐ์น ์คํ
Batch Jenkins์์ ์๋ก์ด Item ์์ฑ(๋ฐฐ์น,freestye project)
๋ฐฐ์น ์คํ์ ํ๋ผ๋ฏธํฐ ์ค๋ณต ์ค๋ฅ๋ฅผ ํผํ๊ธฐ ์ํด ์์ ํ๋ผ๋ฏธํฐ ๋ฑ๋ก(String Parameter ๋งค๊ฐ๋ณ์ ๋ช
: version , Default Value : 1)
Build ํญ๋ณต(Execute Shell)
ORIGIN_JAR=$(readlink /home/jenkins/member-batch/application.jar)
echo " > ORIGIN_JAR: ${ORIGIN_JAR}"
java -jar ${ORIGIN_JAR}
--job.name=sampleBatch
version=${version}
#readlink : application.jar์ ๋งํฌ๋ ์๋ณธ jarํ์ผ์ ์ฐพ์ต๋๋ค.
#๋ฐฐ์น ์คํ ์ ์๋ณธ jar๋ฅผ ์คํํ๊ธฐ ๋๋ฌธ์ ๋ฐฐํฌ๋ก application.jar์ ๋งํฌ๋ ํ์ผ์ด ๋ณ๊ฒฝ๋๋ ์คํ์ค์ด๋ ๋ฐฐ์น๊ฐ ์ข
๋ฃ๋์ง ์์ต๋๋ค.
์คํ.
ํ๋ฆ : git์ ์์ค ์ ๋ก๋ ๋ฐ ์ ๋ฐ์ดํธ -> ์ด๋ฒคํธ ๊ฐ์ง ํ deploy ์คํ -> ํ ์คํธ ํ ๋ฐฐํฌํ์ฌ ์คํ ๋ฆฌ์ง(s3)์ upload -> ์ด๋ฒคํธ ๊ฐ์งํ ๋ฐฐ์น jenkins ์คํ