본문 바로가기
공부/프로그래밍

[aws] Jenkins + CodeDeploy 로 로드밸런스 환경 자동배포하기

by demonic_ 2020. 8. 4.
반응형

이전 글에서는 Jenkins와 CodeDeploy를 이용해 배포를 하긴 했지만 수동배포를 포스팅 했었다.

이번에는 jenkins 플러그인 중 하나인 Deploy an application to AWS CodeDeploy를 이용해 자동 배포하는 방법에 대해 알아보려 한다.

 

이전글:

https://lemontia.tistory.com/945

 

[aws] Jenkins + S3 + CodeDeploy 를 이용해 배포하기(수동배포)

이번에는 Jenkins를 이용해 Build & Test를 진행하고 완성된 파일을 S3에 올린 후 CodeDeploy를 이용해 배포하는 방법을 알아보겠다. 이번 설정은 S3에 올리는 것을 jenkins에 설정했고, CodeDeploy는 AWS 콘솔을

lemontia.tistory.com

 

 

 

jenkins에서 Jenkins관리 => 플러그인 관리 로 들어간다

codedeploy로 검색해서 다음을 설치한다. 내 경우는 이미 설치되어 있기 때문에 설치된 플러그인 목록에서 검색했다.

 

 

 

jenkins 에서 새로운 프로젝트를 생성한다.

소스관리는 git을 사용하고 있어서 선택했다. 그리고 brunch는 release 를 배포기준으로 잡고 있기 때문에 그걸로 설정했다.

 

빌드(Build) 부분에는 프로젝트를 빌드하는 걸 설정한다.

내 경우 maven으로 설정되어 있기 때문에 Invoke top-level Maven targets를 이용해 빌드설정 했다.

 

 

그리고 같은 빌드창에 Execute Shell 를 넣는다.

여기에는 CodeDeploy에서 사용할 appspec.yml 파일과 deploy.sh 파일이 포함되어 있어야 한다.

appspec.yml 은 CodeDeploy가 해석할 배포환경을 설정하며 deploy.sh 에는 수행할 스크립트를 저장한다.

이전글에 설명되어 있은 참고.

https://lemontia.tistory.com/945

(페이지 내 검색어: S3에 저장할 때에는 zip 파일로 압축하여 올려야 하는데)

rm -rf deploy
mkdir deploy
cp target/*.war ./deploy
cp appspec.yml ./deploy
cp deploy-before.sh ./deploy
cp deploy.sh ./deploy

 

다음으로 '빌드 후 조치'를 설정한다.

Deploy an application to AWS CodeDeploy 를 선택한 후 다음처럼 채워넣는다.

 

AWS CodeDeploy Application Name=> AWS에 설정한 CodeDeploy에 생성한 어플리케이션 이름

AWS CodeDeploy Deployment Group=> 생성한 CodeDeploy에 연결된 배포 그룹 이름

AWS CodeDeploy Deployment Config=> 배포 설정. OneAtTime은 한번에 1개씩만 배포하는 것으로 로드밸런싱에서는 이 설정이 적절하다(하나 배포하고 성공하면 다음 배포하는 식)

AWS Region=> 리전 이름(한국은 AP_NORTHEAST_2)

S3 Bucket=> appspec.xml과 소스파일을 압축한 파일이 저장될 버킷 지정

S3 Prefix=> 버킷 내 폴더 입력

Subdirectory=> jenkins 서버에서 업로드할 파일이 있는 곳 지정. Execute shell 에 입력한 폴더를 지정한다(여기서는 deploy)

include files: subdirectory 에 upload할 file을 입력한다. **는 해당 directory의 모든 파일을 업로드한다.

 

마지막으로 Use Access/Secret keys 를 입력한다.

여기에는 AWS 의 AMI => 역할에 CodeDeploy권한의 액세스 키를 입력한다.

만약 이부분에 대해 모르겠다면 이전글에서 다음을 검색해 참조한다

(페이지 내 검색어: ## CodeDeploy 용 역할 생성 및 지정(IAM 설정))

https://lemontia.tistory.com/945

 

이제 저장하고 실행해보자.

 

 

수행하게 되면 S3에 다음과같이 파일이 남는다. 파일명은 임의적으로 생성되는 듯 하다.

 

CodeDeploy의 로그를 보면 수행한 것을 확인할 수 있다.

 

 

마지막으로 IAM에서 보면 방금 권한이 수행된 것이 확인된다.

해당 설정에서는 ELB와 EC2 에만 국한되었기 때문에 관련 설정만 액세스 한 기록이 남아있다.

 

 

끝.

 

 

--- 2021.05 추가

IAM에 위의 권한들을 갖게 하는데 내 경우는 사용자그룹의 정책관리를 통해 추가했었다. 다음과 같다.

(이전 계정을 삭제했기에 새계정으로 표기되는것에 이해 바랍니다.)

 

ec2-deploy 라는 그룹에 연결되어 있는데 여기를 클릭하면 사용자 그룹으로 이동한다.

 

정책 이름을 클릭하면 편집화면으로 이동한다. 시각적 편집기는 보기 편하지만 하나하나 추가하기 힘드니 JSON 탭을 클릭한 뒤 다음을 입력한다.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "autoscaling:*",
                "codedeploy:*",
                "ec2:*",
                "lambda:*",
                "elasticloadbalancing:*",
                "s3:*",
                "cloudwatch:*",
                "logs:*",
                "sns:*"
            ],
            "Resource": "*"
        }
    ]
}

저장한다.

 

 

 

 

참조:

https://velog.io/@minholee_93/Jenkins-Springboot-Gradle-Github-CodeDeploy-ELB-2-1yk5ze6ky0

 

[Jenkins] Springboot + Gradle + Github + CodeDeploy + ELB (2)

참고 자료 : [ https://jojoldu.tistory.com/283?category=777282 , https://www.youtube.com/watch?v=83d5YuG-KiQ&t=1685s ] 이전글에 이어서 jenkins와 codedeploy를 사용해 ec2 server에 무중단 배포를 진행하겠습니다. 3. CodeDeploy > 이

velog.io

 

반응형

댓글