이전 글에서는 Jenkins와 CodeDeploy를 이용해 배포를 하긴 했지만 수동배포를 포스팅 했었다.
이번에는 jenkins 플러그인 중 하나인 Deploy an application to AWS CodeDeploy를 이용해 자동 배포하는 방법에 대해 알아보려 한다.
이전글:
https://lemontia.tistory.com/945
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
'공부 > 프로그래밍' 카테고리의 다른 글
[gradle] 외부 jar파일 추가하기 (1) | 2020.08.11 |
---|---|
[springboot] ControllerAdvice를 이용해 정해진 폼으로 리턴하기 (0) | 2020.08.06 |
[aws] CodeDeploy 를 이용해 로드밸런서 환경에서 배포하기 (0) | 2020.07.23 |
[aws] CodeDeploy 중 BeforeBlockTraffic 진행이 안될 때 (0) | 2020.07.21 |
[aws] Jenkins + S3 + CodeDeploy 를 이용해 배포하기(수동배포) (0) | 2020.07.16 |
댓글