[Jenkins] AWS EC2에 컨테이너 배포하기

Jenkins에서 빌드한 컨테이너 이미지를 EC2에 배포하는 작업을 진행해보겠습니다.
사전에 컨테이너 빌드 작업 완료 후 AWS ECR(Elastic Container Registry)에 업로드하는 작업을 생성해둔 상태입니다.

 

 


플러그인 설치

우선 Jenkins에서 빌드한 컨테이너 이미지를 EC2에 배포하기 위해서는 SSH 접속을 통한 접근이 필요한데요.
Jenkins에서 EC2에 SSH 접속을 하기 위해서는 플러그인을 설치해야됩니다.


설치해야되는 플러그인은 SSH Agent Plugin 입니다.

 

 


SSH Key 발급 및 적용

SSH 접속은 Key를 통해 접속하므로 Key 발급 및 적용 작업을 진행합니다.

 

SSH Key 발급

ssh-keygen 명령어를 통해 개인키(id_rsa)와 공개키(id_rsa.pub)를 발급합니다.

 

EC2 공개키(id_rsa.pub) 적용

발급한 키 중 공개키(id_rsa.pub)를 배포하고자 하는 EC2에 적용합니다.
적용하고자 하는 접속 계정의 ~/.ssh/authorized_keys 파일에 공개키를 복사합니다.

### ssh-copy-id 명령어로 복사
ssh-copy-id {HOSTNAME}@{IP}
EX) ssh-copy-id ec2-user@10.1.1,1

### cat 명령어로 복사
cat .ssh/id_rsa.pub >> .ssh/authorized_keys

### vi로 파일 내용 추가
vi .ssh/authorized_keys
key 값 복사

 

EC2 서버로 직접 접속하여 공개키(id_rsa.pub)가 정상적으로 적용되었는지 확인합니다.

cat .ssh/authorized_keys
ssh-rsa ##############################################################################
######################################################################################
################################### root@ip-10-1-1-205.ap-northeast-2.compute.internal

 

 


Jenkins 개인키(id_rsa) 적용

SSH Agent를 통해 EC2를 접속하기 위해 사전에 발급한 SSH Key 중 개인키(id_rsa)를 Credentials로 등록합니다.


개인키(id_rsa)는 Dashboard -> Jenkins 관리 -> Credentials 메뉴에서 등록합니다.

 

 

Credentials 발급 시 Kind는 SSH Username with private key를 선택합니다.
사용하고자 하는 ID와 Username을 지정합니다.

 

 

Private Key 값은 Enter directly 버튼을 클릭하여 직접 개인키(id_rsa)를 입력할 수 있도록 합니다.
개인키(id_rsa)를 Key에 입력 후 Create 버튼을 클릭하여 Credentials 등록을 완료합니다.

 

 


Jenkins Pipeline 설정

SSH Agent 플러그인을 사용하여 사전에 등록한 Credentials을 통해 EC2 접속 및 배포 작업을 진행해보도록 하겠습니다.

stage('deploy-EC2') {
  steps {
    //SSH Agent 플러그인을 사용하여 사전에 등록한 Credentials 지정
    sshagent (credentials: ['EC2_ACCESS_KEY_ID']) {
      sh """
        ### ssh 명령어로 EC2 서버 지정
        ssh -o StrictHostKeyChecking=no ${EC2_USER}@${EC2_IP} '
          ### 실행할 명령어 입력        
          cd ${WORK_DIR}
          docker compose down
          docker pull ${AWS_ECR}/${IMAGE_NAME}:${IMAGE_TAG}
          docker compose up -d
          exit
        '
      """
    }
  }
}

 

  1. sshagent() 구분을 통해 SSH Agent 플러그인을 사용할 수 있도록 지정합니다.
  2. credentials:[] 값에는 사전에 등록한 Credentials을 지정합니다.
  3. ssh 명령어로 접속 및 배포하고자 하는 EC2 서버를 지정합니다.
  4. 실행할 명령어를 입력합니다.
    • 작업 디렉토리 이동
    • 도커 컨테이너 종료
    • 도커 컨테이너 이미지 다운로드
    • 도커 컨테이너 시작

 

위 작업을 통해 Jenkins에서 EC2 접속 및 배포 작업을 진행할 수 있습니다.

실행할 명령어에 따라 배포 작업을 진행하거나, 테스트, 모니터링 등 다양한 작업을 할 수도 있습니다.

 

 

지금까지 Jenkins에서 빌드한 컨테이너 이미지를 EC2에 배포하는 작업을 알아보는 시간이었습니다....! 끝...!

 

 

 

[Reference]

 

 

+ Recent posts