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 ๋ถ„๋ฆฌ ํ•„์š”]
  1. 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 ์„œ๋ฒ„ ์„ค์ •]

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 ์‹คํ–‰