Docker와 Jenkins로 CI / CD 환경 구축하기[4.5] - Backend 빌드배포 번외편

안상철·2022년 6월 23일
0

CI / CD

목록 보기
5/8
post-thumbnail

이번엔 AWS 플러그인이 아닌 Jenkins 자체 플러그인인 Blue Ocean으로 프로젝트를 빌드 ~ 배포하는 과정을 알아보도록 하겠습니다.

1. Jenkinsfile 생성

우선 젠킨스를 사용하기 전에 배포하고자 하는 프로젝트의 Root 위치에 Jenkinsfile이라는 이름의 파일을 한 개 생성합니다. 이름이 반드시 Jenkinsfile이어야 합니다. 그래야 BlueOcean 플러그인이 이 파일을 인식해 빌드배포를 시작합니다.

pipeline {
  agent any
  stages {
    stage('build') {
      steps {
        sh './gradlew clean build'
      }
    }

    stage('upload') {
      steps {
        sh 'aws s3 cp api/build/libs/자르파일.jar s3://업로드 할 S3 버킷 위치/업로드 할 자르파일.jar --region ap-northeast-2'
      }
    }

    stage('deploy') {
      steps {
        sh 'aws elasticbeanstalk create-application-version --region ap-northeast-2 --application-name EB어플리케이션 명 --version-label ${BUILD_TAG} --source-bundle S3Bucket="S3 버킷명",S3Key="업로드 할 자르파일.jar"'
            sh 'aws elasticbeanstalk update-environment --region ap-northeast-2 --environment-name 배포 할 EB 환경이름 --version-label ${BUILD_TAG}'
      }
    }

  }
}

해당 파일에 위 스크립트를 작성하고 커밋 → 푸시해 remote와 local 상태를 같게 해 줍니다. 스크립트 작성 이유는 아래에서 설명 하겠습니다.

2. 젠킨스 Blue Ocean 플러그인 설치

블루오션은 빌드~배포를 편리하게 시각화 해 주는 GUI 플러그인 입니다. 복잡한 젠킨스 배포 설정을 하지 않아도 됩니다.(물론 소스Repo 위치나 프로젝트에 따라 추가 설정이 필요할 수 있습니다.)


젠킨스 관리 → 플러그인 관리로 들어가 블루오션을 받아줍니다. 한 가지만 선택해도 블루오션의 모든 모듈을 설치하게 되므로 시간이 조금 걸릴 수 있습니다.

설치가 완료되면 왼쪽 메뉴에 블루오션 열기 라는 메뉴가 생깁니다. 들어가봅시다.

3. 블루 오션으로 새로운 파이프라인 생성

가운데 create new pipeline을 클릭해 새로운 파이프라인을 만들어 봅시다.

블루오션이 만들어주는 파이프라인은 aws의 코드빌드(codeBuild), 파이프라인(codePipeLine)과 기능이 완전히 같습니다.

이제 소스가 저장 된 Repo를 선택해야 하는데 Git을 선택하고, Repo url을 적어줍니다.

그리고 사용자 이름과 비밀번호를 입력한 후, 자격 증명 추가를 누르면 인증이 완료됩니다. 이 포스팅의 경우 이미 한 번 Credential을 저장 한 기록이 있어서 Repo url만 입력해도 알아서 Credential을 찾아줍니다. 신규로 작성해도 프로세스는 똑같습니다.

다음으로 파이프라인 생성을 클릭하면 위와 같은 UI가 나타나는데, 빌드 ~ 배포까지의 과정을 스스로 구성할 수 있습니다. 처음 블루오션을 설치하면 build 단계만 나타나는데, 직접 오른쪽의 +를 눌러서 다른 단계를 추가할 수 있습니다. 저는 젠킨스에서 소스를 먼저 빌드하고, 빌드 한 jar파일을 S3에 업로드 한 다음 EB에 배포하는 3단계 과정으로 분리했습니다.

또한 각 단계마다 필수로 Step을 정해줘야 하는데(오른쪽 메뉴의 Steps) 파이프라인이 실행되면 콘솔 스크립트는 알아서 생성 해 주니 간단히 Print Message로 정하고 넘어갑니다. 메세지는 아무렇게나 입력해도 됩니다. 저는 build start, upload start.. 등으로 적었습니다.

마지막으로 파이프라인이 연결된 Repo에서 어느 브랜치를 참조할 지 선택합니다. 예시에는 master로 되어 있는데 아래 Commit to new branch에서 원하는 브랜치명을 적어주면 됩니다.

단! 브랜치가 해당 Repo에 없으면 젠킨스가 스스로 브랜치를 생성하고 커밋->푸시하는데 시간이 엄청나게 소요됩니다. 미리 브랜치를 만들어 둔 다음 적어주는게 좋습니다.

4. 빌드 스크립트 설명

pipeline {
  agent any
  stages {
    stage('build') {
      steps {
        sh './gradlew clean build'
      }
    }

위에서 설명하지 않고 넘어간 스크립트 설명 입니다. pipline 머스태치 안에 stage별로 스크립트가 다릅니다. 블루오션은 stage안의 이름과 매핑해 스크립트를 실행하는 방식으로 파이프라인을 실행 해 줍니다.

이처럼 build에는 소스를 build하는 스크립트를

    stage('upload') {
      steps {
        sh 'aws s3 cp api/build/libs/자르파일.jar s3://업로드 할 S3 버킷 위치/업로드 할 자르파일.jar --region ap-northeast-2'
      }
    }

upload에는 awscli 모듈을 젠킨스 내부 서버에서 실행해 aws s3 명령어로 S3버켓에 JAR파일을 업로드 하는 스크립트를 작성합니다.

cp 하위는 소스가 있는 프로젝트에서 빌드OUT.Jar 파일이 있는 위치, s3://뒤에는 버켓주소를 작성합니다.

    stage('deploy') {
      steps {
        sh 'aws elasticbeanstalk create-application-version --region ap-northeast-2 --application-name EB어플리케이션 명 --version-label ${BUILD_TAG} --source-bundle S3Bucket="S3 버킷명",S3Key="업로드 할 자르파일.jar"'
            sh 'aws elasticbeanstalk update-environment --region ap-northeast-2 --environment-name 배포 할 EB 환경이름 --version-label ${BUILD_TAG}'
      }
    }

  }
}

마지막 deploy는 aws elasticbeanstalk 명령어로 신규 어플리케이션을 생성 → 환경 업데이트 → 배포하는 스크립트를 작성 해 줍니다.

--application-name에는 어플리케이션 이름을 작성합니다.

S3Bucket 에는 버켓 이름을 작성합니다.

S3Key 에는 프로젝트에서 빌드OUT 된 JAR파일 이름을 작성합니다.

environment-name 에는 eb환경 이름을 작성합니다.

추가로 {BUILD_TAG} 는 삭제하시면 안됩니다! API가 배포될 때 마다 버전을 업데이트 하는데, 중간에 순번이 비어있거나 잘못되어 순서대로 배포하지 않으면 EB에서 환경구성을 다시 업데이트 해 줘야 합니다.

이제 Save&run을 눌러 빌드 ~ 배포를 진행 해 봅시다.

5. 블루오션의 빌드배포 과정 살펴보기

각 단계의 스크립트를 찾아 젠킨스가 배포를 진행합니다. 아래 메세지들을 클릭하면 각 단계에 맞는 콘솔 스크립트를 보여줍니다.

이제 EB로 가서 방금 배포 한 환경의 최근 이벤트를 살펴보면, 배포되는 과정을 확인할 수 있습니다.

지금은 도메인이 없는 예시이기 때문에 EB환경이 생성 해 준 도메인을 클릭해 보았습니다.(도메인을 연결한 EB라면 해당 도메인을 입력 해 봅시다.) 정상 배포됨을 확인할 수 있습니다.

profile
웹 개발자(FE / BE) anna입니다.

0개의 댓글