ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [AWS 자동 배포 시스템] 9. ECS Jenkins 구축
    AWS 2022. 2. 23. 01:19
    반응형

    이제 마지막으로 ECS Jenkins를 구축하려고 한다.

     

    Jenkins Pipeline을 생성한다.

    Script는 아래 코드를 참고하면 된다.

    환경 변수 코드만 본인 설정에 맞게 변경해주면 된다.

    pipeline {
        agent any
    
        environment {
            AWS_ACCOUNT_ID="844482743949"
            AWS_DEFAULT_REGION="ap-northeast-2"
            IMAGE_REPO_NAME="velnova"
            IMAGE_TAG="latest"
            REPOSITORY_URI="${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_DEFAULT_REGION}.amazonaws.com/${IMAGE_REPO_NAME}:${IMAGE_TAG}"
            PROJECT_NAME = 'velnova-server' //Jenkins Project Name
            CLUSTER_NAME = 'velnova-cluster'
            SERVICE_NAME = 'velnova-service'
            BRANCH = 'master'
            GIT_URL = 'https://github.com/alsdud154/server-velnova-me.git'
        }
    
        stages {
          
            stage('AWS ECR Login'){
                steps {
                    script {
                        sh "aws ecr get-login-password --region ${AWS_DEFAULT_REGION} | docker login --username AWS --password-stdin ${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_DEFAULT_REGION}.amazonaws.com"
                    }
                }
            }
    
            stage ('Git Clone'){ 
            	steps { 
                	git branch: BRANCH, 
                    credentialsId: 'GIT_ACCOUNT', 
                    url: GIT_URL
                } 
            } 
            
    
            stage('Gradle Build') {
                steps {
                    sh './gradlew build -x test'
                }
            }
    
            stage('Docker Build') {
                steps {
                    script {
                        sh "docker build -t ${IMAGE_REPO_NAME}:${IMAGE_TAG} ."
                    }
                }
            }
    
            stage ('ECR Push') {
                steps {
                    script {
                        sh "docker tag ${IMAGE_REPO_NAME}:${IMAGE_TAG} ${REPOSITORY_URI}"
                        sh "docker push ${REPOSITORY_URI}"
                    }
                }
            }
    
            stage('Clean docker image') {
                steps{
                    sh "docker rmi -f ${IMAGE_REPO_NAME} ${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_DEFAULT_REGION}.amazonaws.com/${IMAGE_REPO_NAME}"
                    sh './gradlew clean'
                }
            }
    
            stage ('ECS Deploy') {
                steps {
                    script {
                        sh "aws ecs update-service --cluster ${CLUSTER_NAME} --service ${SERVICE_NAME} --force-new-deployment"
                    }
                }
            }
            
        }
       
    }

     

     

     

    정상적으로 배포가 되었다.

     

     

    롤링 업데이트 방식을 사용하여 잠시동안 기존 서비스 2개 + 새로 배포한 서비스 2개 총 4개가 실행되고 

    조금 뒤 기존 서비스가 2개가 중지된다.

     

     

    이것으로 Front + Server 자동 배포 구축을 끝마친다.

    반응형
Designed by Tistory.