CICD란?

CI - Continuous Integration

  • 개발자를 위한 자동화 프로세스

  • 개발자간의 코드 충돌을 방지하기 위한 목적

  • 정기적인 빌드 및 테스트(유닛테스트 및 통합테스트)를 거쳐 공유 레포지터리에 병합되는 과정

CD(1) - Continuous Delivery

  • 애플리케이션에 적용한 변경사항이 버그 테스트를 거쳐 레포지터리에 자동으로 업로드 되는 것

  • 운영팀은 언제든 실시간으로 이 레포지터리에서 실시간으로 프로덕션 환경으로 배포 가능

CD(2) - Continuous Deployment

  • 애플리케이션을 프로덕션 환경으로 배포하는 작업을 자동화 하는 것

  • Continuous Delivery로 통칭하여 언급하기도 함

GITLAB CI

gitlab-ci.yml 파일을 통해 CI (Continuous Integration) 관리 및 테스트

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# 기본 이미지를 docker 기반으로 설정
image: docker:latest

services:
- docker:dind

stages:
#배포 단계 설정
- build
- deploy

before_script:
# 도커 관련 설정
- docker info
- pip install docker-compose
- docker-compose --version

build:
# build stage 설정
stage: build
only:
- master
tags:
- docker
script:
- echo "Building the app"
- docker-compose build
- apk install zip
# zip {압축 파일명}.zip {압축할 파일 혹은 디렉토리1} {압축할 파일 혹은 디렉토리2}
- zip deploy.zip ./*
artifacts:
# deploy.zip 파일을 다음 stage에도 유지
expire_in: 1 hour
paths:
- deploy.zip

deploy:
image: python:latest
stage: deploy
script:
- echo "Deploying the app"
- pip install awscli
# s3로 복사
# aws s3 cp <source> <target> [--options]
- aws s3 cp ./deploy.zip s3://www.s3주소.com
# codedeploy 배포 생성
- aws deploy create-deployment application-name 어플리케이션이름 --deployment-config-name CodeDeployDefault.OneAtATime --deployment-group-name 그룹이름 --s3-location bucket=s3버킷,bundleType=zip,key=WordPressApp.zip

CodeDeploy 설정

CodeDeploy는 애플리케이션 > 배포설정 > 배포 3단계로 구성되어있으며 어플리케이션과 배포설정 부분에서 배포에 관한 전반적인 설정을 해놓고 GitLab CI를 통해 배포 요청을 보내 CodeDeploy를 실행합니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#/appspec.yml
version: 0.0
os: linux

# 실행하는 권한 설정 (root)
permissions:
- object: /
pattern: "**"
owner: root
group: root

files:
- source: /
destination: /home/ubuntu/build
hooks:
BeforeInstall:
- location: scripts/BeforeInstall.sh
runas: root
# AfterInstall앞은 2칸이다.
AfterInstall:
- location: scripts/AfterInstall.sh
runas: root

cf) CodeDeploy를 사용하기 위해서는 배포되는 EC2에 codedeploy Agent가 동작하고 있어야하며 EC2 IAM ROLE에 codedeploy에 관한 권한을 설정해두어야 합니다.