March 28, 2021
Jenkins의 비용과 성능 문제로 인해 다른 CI/CD툴을 찾기로 결정했습니다.
Trigger는 Github Actions를 사용하고 Build는 AWS CodeBuild, Deploy는 AWS CodeDeploy를 선택했습니다. AWS 설계는 다음과 같습니다.
AWS CodeBuild는 NAT Gateway를 사용하여 Private Subnet에서 작동합니다. CodeBuild를 만들기 전에 VPC에서 Subnet 설정을 우선으로 합니다.
VPC를 지정하고 서브넷 세팅합니다.
저는 2개의 서브넷을 생성했습니다.
NAT 게이트웨이를 생성합니다.
라우팅 테이블을 생성하고 태그 추가해서 Name을 지정합니다.
라우팅 편집을 합니다.
라우팅 편집
→ 서브넷 연결 편집
NAT Gateway에서 private 서브넷 대상만 추가합니다.
권한 정책에서 codebuild를 연결합니다.
역할 이름을 Codebuild로 명확히 합니다.
프로젝트 이름을 지정합니다.
소스 공급자에서 Github를 연결합니다.
빌드 환경을 설정합니다.
Additional configuration 설정
Security groups: NAT 서브넷에 설정한 Security group으로 설정합니다.
초록색으로 확인이 되었다면?
아티팩트
다음과 같이 루트에서 buildspec.yml을 생성합니다.
version: 0.2
phases:
build:
commands:
- chmod +x ./gradlew
- ./gradlew build
post_build:
commands:
- echo $(basename ./build/libs/*.jar)
- pwd
artifacts:
files:
- build/libs/*.jar
- appspec.yml
- beforeInstall.sh
- deploy.sh
discard-paths: yes
cache:
paths:
- '/root/.gradle/caches/**/*'
files: 어떤 파일들을 보낼껀지 결정합니다.
여기까지 설정하면 AWS CodeBuild를 통하여 빌드하고 S3로 build.zip파일이 업로드가 됩니다.
빌드할 Repository에서 Actions를 선택합니다.
.github/workflows/main.yml
name: Actions 이름
on:
push:
branches: [master]
jobs:
buildAndTest:
name: Github action CD
runs-on: ubuntu-18.04
defaults:
run:
shell: bash
steps:
- name: 체크아웃 Github-Action
uses: actions/checkout@v2
- name: AWS 설정
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: ap-northeast-2
- name: CodeBuild 실행
uses: aws-actions/aws-codebuild-run-build@v1.0.3
with:
project-name: cicdtest
- name: Code Deploy
run: aws deploy create-deployment --application-name cicdtest --deployment-config-name CodeDeployDefault.OneAtATime --deployment-group-name cicd-bluegreen --s3-location bucket=cicdtestsunny,bundleType=zip,key=build.zip
name: Actions 이름
on:
push:
branches: [master]
jobs:
buildAndTest:
name: Github action CD
runs-on: ubuntu-18.04
defaults:
run:
shell: bash
steps:
- name: 체크아웃 Github-Action
uses: actions/checkout@v2
이 코드를 빼면 Actions가 작동하지 않기 때문에 꼭 추가합니다.
- name: AWS 설정
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: ap-northeast-2
IAM의 Access Key ID, Secret Access Key를 Github의 settings에 설정합니다.
- name: CodeBuild 실행
uses: aws-actions/aws-codebuild-run-build@v1.0.3
with:
project-name: cicdtest
코드 빌드 실행합니다.
- name: Code Deploy
run: aws deploy create-deployment --application-name cicdtest --deployment-config-name CodeDeployDefault.OneAtATime --deployment-group-name cicd-bluegreen --s3-location bucket=cicdtestsunny,bundleType=zip,key=build.zip
이 내용은 다음에 설명할 AWS CodeDeploy 설정입니다.
여기까지 했으면 Github Actions 설정은 마쳤습니다.
다음은 AWS CodeDeploy 이용한 Blue/Green 무중단 배포를 설정해보겠습니다!
CodeBuild에서 해당 에러가 났을 경우
브랜치를 지정하지 않아서 생긴 에러입니다. 브랜치를 꼭 적을 것!