반응형
구성도
CICD 구성하기
- EC2
- S3
- CodeDeploy 생성하기
- CodeDeploy Agent 설치
- IAM User 생성 및 AccessKey 발급(CICD용)
- IAM 권한(EC2용)
- 코드 업로드
- appspec.yml
- gitlab CI 생성
- 배포 확인
1. EC2 생성
https://monta010.tistory.com/187
2. S3 생성
https://monta010.tistory.com/210
3. CodeDeploy 생성하기
- dev-backend-codedeploy
- codedeploy 생성완료
- codedeploy 배포 그룹 생성
- codedeploy 배포 유형
- 현재 위치 : 단일 서버
- 블루/그린 : ASG + ALB + EC2를 통한 무중단 배포
- codedeploy수동 설치하여 별도 설치 안함
- 추후에 자동으로 처리 하고 싶을 경우 "System Manager 권한 추가하여 진행
- 배포 구성
- 배포 구성은 상황에 맞도록 설정
https://docs.aws.amazon.com/ko_kr/codedeploy/latest/userguide/deployment-configurations.html
- codedeploy 배포 그룹 생성 완료
4. CodeDeploy Agent 설치
- 필요 패키지 설치
sudo yum update
sudo yum install ruby
sudo yum install wget
- 홈 디렉토리 이동
cd /home/ec2-user
- CodeDeploy 에이전트 설치
wget https://aws-codedeploy-us-east-2.s3.us-east-2.amazonaws.com/latest/install
- install 실행권한 및 설치
chmod +x ./install
sudo ./install auto
- 서비스 상태 확인
systemctl status codedeploy-agent
5. IAM User 생성 및 AccessKey 발급(CICD용)
- RoleName : 원하는 이름
- 권한 -> 실제로 적용시에는 상세한 ARN으로 처리
- AccessKey 발급
- IAM -> 사용자 -> 사용자 클릭 -> 보안 자격 증명 -> 액세스키 만들기
6. IAM 권한(EC2용)
- Gitlab CI를 통한 권한
- ECR 접근
- S3 접근
- CodeDeploy 실행
- 권한
- AmazonEC2ContainerRegistryFullAccess
- AmazonS3FullAccess
- AWSCodeDeployFullAccess
7. 코드 업로드
- java backend 배포
8. appsec.yml
- codedeploy가 deploy.sh를 통한 서비스 실행
version: 0.0
os: linux
files:
- source: deploy.sh
destination: /home/ec2-user/app
permissions:
- object: /home/ec2-user/app
pattern: "**"
owner: ec2-user
group: ec2-user
mode: 755
hooks:
ApplicationStart:
- location: deploy.sh
timeout: 300
runas: ec2-user
9. gitlab CI 생성
variables:
AWS_REGION: ap-northeast-2
ECR_REPOSITORY: dev-backend
APP_NAME: dev-backend-codedeploy
DEPLOY_GROUP: dev-backend-codedeploy
DEPLOY_BUCKET: dev-backend-s3
AWS_ACCESS_KEY_ID: "AWS_ACCESS_KEY_ID"
AWS_SECRET_ACCESS_KEY: "AWS_SECRET_ACCESS_KEY"
AWS_ACCOUNT: "AWS_ACCOUNT"
stages:
- configure
- build
- deploy
configure:
stage: configure
image:
name: gcr.io/kaniko-project/executor:debug
entrypoint: [""]
only:
- main
script:
- mkdir -p /kaniko/.docker
- echo "{\"credsStore\":\"ecr-login\"}" > /kaniko/.docker/config.json
- echo "{\"credHelpers\":{\"${AWS_ACCOUNT}.dkr.ecr.${AWS_REGION}.amazonaws.com\":\"ecr-login\"}}" > /kaniko/.docker/config.json
build:
stage: build
image:
name: gcr.io/kaniko-project/executor:debug
entrypoint: [""]
variables:
AWS_SDK_LOAD_CONFIG: "true"
only:
- main
script:
- mkdir -p /kaniko/.docker
- echo "{\"credsStore\":\"ecr-login\"}" > /kaniko/.docker/config.json
- /kaniko/executor
--context "${CI_PROJECT_DIR}"
--dockerfile "${CI_PROJECT_DIR}/Dockerfile"
--destination "${AWS_ACCOUNT}.dkr.ecr.${AWS_REGION}.amazonaws.com/${ECR_REPOSITORY}:latest"
# --destination "${AWS_ACCOUNT}.dkr.ecr.${AWS_REGION}.amazonaws.com/${ECR_REPOSITORY}:${CI_COMMIT_SHA}"
deploy:
stage: deploy
image:
name: amazon/aws-cli:latest
entrypoint: [""]
only:
- main
before_script:
- yum install -y zip
script:
# Upload deployment scripts to S3
- zip -r ${APP_NAME}.zip scripts/
- aws s3 cp ${APP_NAME}.zip s3://${DEPLOY_BUCKET}/
# Create CodeDeploy deployment
- |
aws deploy create-deployment \
--application-name "${APP_NAME}" \
--deployment-group-name "${DEPLOY_GROUP}" \
--s3-location "bucket=${DEPLOY_BUCKET},key=${APP_NAME}.zip,bundleType=zip" \
--region "${AWS_REGION}"
9. 배포 확인
반응형
댓글