본문 바로가기

CICD/EC2

EC2 CICD Automation - 4. Jenkins Job

 

앞에서 정의한 코드커밋 레파지토리 이름과 동일하게 구성해주겠습니다.

(그래야 변수명으로 코드를 적고 다른 잡에 컨씨 컨브이로 구성할 수 있기 때문에 편합니다.)

 

코드 커밋에서 repository url을 복사해주시고,

 

 

잡을 만들었으면, 소스 코드 관리에서 해당 url과 등록해놓은 credentials를 선택해줍니다.

 

 

이렇게 해서 잡을 런하게 되면, 젠킨스가 git clone 까지만 하게 되는 것이고

이제 순서에 따라서 빌드를 한 후 배포하는 형태를 구성하기 위해 아래와 같이 구축해주겠습니다.

 

 

첫 커맨드에서 젠킨스의 각 잡들이 제대로 수행되었는지 확인하기 위해

application.properties 파일의 변수를 바꿔주도록 하겠습니다.

 

sudo sed -i "s/module_name=.*/module_name=${JOB_NAME}\:${BUILD_NUMBER}/g" /var/lib/jenkins/workspace/${JOB_NAME}/src/main/resources/application.properties

 

이제 Save 후 젠킨스 Job을 Build하게 되면 다음과 같은 결과를 볼 수 있습니다.

 

 

아래 경로에서 새롭게 빌드 된 jar파일을 볼 수 있습니다.

 

/var/lib/jenkins/workspace/cb-test-api/target/demo-0.0.1-SNAPSHOT.jar

 

이제 이 jar파일과 CodeDeploy가 수행해야 할 부분을 알려주는

appspec.yaml, deploy.sh을 생성해 zip파일로 묶어 주도록 하겠습니다.

빌드 후에 넣는 Execute Shell Command 란에 아래 쉘을 입력해주세요.

 

rm -rf deploy
mkdir deploy
cd deploy

cat << EOF > deploy.sh
#!/bin/bash
kill -9 \`ps -ef | grep ${JOB_NAME}.jar | grep -v grep | awk '{print \$2}'\`
nohup java -jar /home/jenkins/deploy/${JOB_NAME}.jar 1> /dev/null 2>&1 &
EOF

cat << EOF > appspec.yml
version: 0.0
os: linux
files:
  - source:  /
    destination: /home/jenkins/deploy

permissions:
  - object: /
    pattern: "**"
    owner: jenkins
    group: jenkins

hooks:
  ApplicationStart:
    - location: deploy.sh
      timeout: 60
      runas: root
EOF

chown jenkins:jenkins appspec.yml
chown jenkins:jenkins deploy.sh
chmod 700 appspec.yml

cp /var/lib/jenkins/workspace/${JOB_NAME}/target/*.jar ./${JOB_NAME}.jar
zip -r deploy *

aws s3 cp deploy.zip s3://cb-test-deploy/${JOB_NAME}/${BUILD_NUMBER}/${JOB_NAME}.zip --region ap-northeast-2

 

위의 스크립트를 넣어서 수행하고 성공하게 되면 다음과 같이 로그가 떨어집니다.

 

 

이 zip파일을 S3 경로에 업로드 된 것이고 이 파일을 가지고 CodeDeploy CLI를 수행하면 배포가 되는 것이죠.

 

 

 

이제 다음 포스트에서 마지막으로 CodeDeploy를 만들고 CLI를 수행하는 부분을 만들어 배포가 되는 과정을 보겠습니다.