티스토리 뷰

반응형

Jenkins 설정이 끝났다면 이제는 아이템들을 설정해서 배포를 해야 하는 수순만 남았습니다. 가장 먼저 ECR에 대한 내용은 이전 글에서 따로 적어둔 내용이 있으니 확인해주세요 :)

 

1. 트리거 아이템 생성하기 

저같은 경우 ECR에 푸시할 이미지를 생성하는 Trigger와 배포용 아이템인 Deploy를 각각 1개씩 생성하려고 합니다. 가장 먼저 Jenkins 메인 페이지에 접속하여 왼쪽 상단에 New Item을 누릅니다.

그리고 Git Repository 설정을 해줍니다. 

그리고 Build 탭으로 넘어간 후 Add build step 버튼을 눌러 Execute shell 을 누릅니다. 

여기서는 .sh 파일에 저장되는 내용들을 기록하는 곳입니다. 이제 이 내용 안에 스크립트를 추가해보도록 하겠습니다. 

ECR_ID=123123123
aws ecr get-login-password --region ap-northeast-2 | docker login --username AWS --password-stdin ${ECR_ID}.dkr.ecr.ap-northeast-2.amazonaws.com

./gradlew clean build

echo "docker image build start"
cd /var/jenkins_home/workspace/dev-deploy-ecr-trigger

IMAGE_NAME="source-image-dev"
sudo docker build --platform arm64 --build-arg DEPENDENCY=build/dependency -t ${IMAGE_NAME} .
docker tag ${IMAGE_NAME}:latest ${ECR_ID}.dkr.ecr.ap-northeast-2.amazonaws.com/${IMAGE_NAME}:latest
docker push ${ECR_ID}.dkr.ecr.ap-northeast-2.amazonaws.com/${IMAGE_NAME}:latest

그럼 여기에 들어간 내용들을 분석해보고자 합니다. 

  • aws ecr get-login-password : ECR에 리포지토리를 사용하기 위해 로그인합니다.
  • ./gradlew clean build: Gradle을 사용하는 리포지토리이므로 build하여 *.jar 파일을 생성해줍니다. 
  • cd /var/jenkins_home/workspace* : 해당 워크스페이스에 접근하여 이미지화할 Dockerfile 경로로 이동합니다.
  • sudo docker build* : 도커 이미지를 생성합니다. 여기서 arm64로 지정하면 x86에서는 작동이 안될수도 있으니 주의하세요!
  • docker tag* dkr.ecr.ap-northeast-2.amazonaws.com/* : 만들어진 이미지를 ECR에 매핑시킵니다.
  • docker push*: ECR 리포지토리에 이미지를 Push 하여 다른 서버에서 Pull 받도록 도와줍니다. 

트리거 아이템의 설정은 이게 거의 전부입니다. 추가적으로 버전 관리를 한다던지 이미지 리소스가 너무 많아 리소스 관리가 필요하면 부가적인 옵션을 아래에 넣어주면 됩니다. 

 

1-1. 트리거 자동화

해당 Repository Branch에 Git Push가 된 경우 Pipeline 설정에 따라 자동화가 가능합니다. 저 또한 이 설정을 jojoldu 님의 블로그를 보고 참고했었는데요, 자동화가 필요하신 분들은 체크해보면 좋을 것 같습니다 :)

https://jojoldu.tistory.com/355

 

젠킨스 파이프라인 정리 - 1. 파이프라인 샘플 만들기

안녕하세요? 이번 시간엔 젠킨스 파이프라인을 정리해보려고 합니다. 모든 코드는 Github에 있기 때문에 함께 보시면 더 이해하기 쉬우실 것 같습니다. 젠킨스의 파이프라인이란 연속적인 이벤트

jojoldu.tistory.com

https://shortstories.gitbooks.io/studybook/content/jenkins_pipeline_c0bd_c9c8_ae30.html

 

Jenkins pipeline 삽질기 · studybook

 

shortstories.gitbooks.io


2. 배포 아이템 생성하기

다음으로 작업할 내용은 배포 아이템의 설정입니다. 여기서는 SSH 로 접근하여 해당 서버에 설정되어 있는 deploy.sh 배포 스크립트를 통해 docker-compose.yml을 깨워주는 방법이기 때문에 이 아이템에서 설정할 부분은 크게 없습니다. 

 

2-1. SSH & Credential 설정

아무래도 원격 서버에 접속하여 설정하기 위해서 접속 인증 절차가 필요합니다. 아이디 비밀번호로 로그인하는 것이 아닌 Key file을 사용하여 로그인하는 방법입니다.

Jenkins 관리 -> System Configuration의 시스템 설정으로 (톱니바퀴) 들어가게 되면 SSH remote hosts 라는 영역이 있습니다. 여기서 추가 버튼을 눌러줍니다. 

그럼 위와 같은 hostname, port, credentials 를 입력하는 부분이 있는데 hostname에는 서버의 IP, Port는 22, Credentials는 기존에 설정해둔 내용이 없으면 Add 버튼을 눌러 새롭게 생성해줍니다. (혹시 Add 버튼을 눌렀는데 아무 액션이 없는 경우 저장하고 다시 들어가주세요.)

  • AWS Credentials 를 사용하는 경우

 

  • Key file을 사용하는 경우

아래의 Private Key에 Enter directly를 선택하고 *.pem 의 내용을 넣어주고 Add를 합니다.

 

2-2. 아이템 생성하기 

다음으로 젠킨스 아이템을 생성한 후 빌드 환경으로 넘어가 방금 위에서 설정한 SSH 접속 정보를 선택합니다. 

Execute shell script on remote host using ssh를 사용하여 스크립트를 사용하는 방법을 알아보고자 합니다. SSH Site에는 미리 젠킨스 전체 설정에서 작성된 SSH 내용을 가지고 배포될 서버로 접근하여 스크립트를 실행시키는 구조로 이루어져 있습니다.

아래에서 작성된 내용은 아마존 웹 서비스 공식 문서를 기반으로 작성하였습니다. 

https://docs.aws.amazon.com/ko_kr/AmazonECR/latest/userguide/getting-started-cli.html

 

AWS CLI에서 Amazon ECR 사용 - Amazon ECR

경우에 따라서는 ec2-user가 Docker 데몬에 액세스할 수 있는 권한을 제공하기 위해 인스턴스를 재부팅해야 할 수도 있습니다. 다음 오류가 표시될 경우 인스턴스를 재부팅합니다. Cannot connect to the D

docs.aws.amazon.com

 

aws ecr get-login-password --region ap-northeast-2 | docker login --username AWS --password-stdin ${ID}.dkr.ecr.ap-northeast-2.amazonaws.com

AWS에 로그인하여 ECR에 접근할 준비를 합니다. 

 

export TAG="latest"

최신의 이미지를 다운로드 받기 위해 태그를 준비합니다. 

 

docker pull ${ID}.dkr.ecr.region.amazonaws.com/hello-world:latest

ECR에 있는 이미지를 Pull하여 서버에 저장합니다.  

 

/bin/sh ~/deploy.sh

그 외의 추가적인 구성에 대한 스크립트 명령어는 deploy.sh 파일안에 저장하여 사용합니다. 

 

docker image prune -f -a

마지막으로 Pull 을 받은 이미지를 deploy.sh 에서 실행했다면, 사용하지 않는 이전 버전의 이미지들을 삭제해줍니다. 

 

여기까지는 기본적으로 만들어진 이미지를 서버에 접속하여 접근이 가능하기까지의 수순을 알아보았습니다. 

반응형
댓글
공지사항