
소프트웨어 출시 프로세스 전체를 자동화하는 지속적 통합 및 지속적 전달(CI/CD) 서비스로,
CodePipeline을 통해사용자가 정의한 릴리스 프로세스 모델에 따라 코드가 변경될 때마다 코드를 빌드, 테스트 및 배포할 수 있다.
사진 중 제일 하단에 있는 파이프라인 단계이다.
소스 (CodeCommit)
github과 같은 버전관리시스템으로, 더 private하고 aws 서비스와 통합되어지고,특정 브랜치에 올리면 CodePipeline을 자동으로 실행 시키도록 할 수 있다.
+ AWS CodeCommit은 2024년 7월 25일부터 신규 고객 액세스를 종료하여 기존 고객만 이용가능하다.
빌드 (CodeBuild)
소스 코드를 컴파일하고 테스트를 실행하며 빌드파일을 만드는 서비스로, 코드 빌드 및 테스트, 실제로 빌드한 시간만큼만 지불하면 된다.
배포 (CodeDeploy)
CodeBuild가 만들어낸 실행 가능한 파일을 실제 서버에 옮기고, 구동시켜서 사용자들이 접근할 수 있도록 하는 서비스이다.
파이프라인 (CodePipeline)
CodeCommit, CodeBuild, CodeDeploy를 포함한 모든 단계를 하나로 엮어 전체 출시 프로세스를 자동화하는 오케스트라의 지휘자 서비스로 파이프라인을 생성하여 전과정을 시각화하여 확인할 수 있다.
Source
GitHub(GitHub 앱을 통해)
⬇️
Build
AWS CodeBuild
⬇️
Deploy
AWS CodeDeploy
이런식으로 확인이 가능하다.
CodeBuild를 위해선 buildspec.yaml 작성이,
CodeDeploy를 위해선 appspec.yaml 작성이 필요하다.
# buildspec.yaml
version: 0.2
phases:
# 1. 빌드 환경에 필요한 라이브러리 설치 단계
install:
runtime-versions:
nodejs: 18 # Node.js 버전 지정
commands:
- echo Installing dependencies...
- npm install # package.json을 기반으로 의존성 모듈 설치
# 2. 실제 빌드 명령 실행 단계
build:
commands:
- echo Build started on `date`
- npm run build # React, Vue 등의 빌드 스크립트 실행
# 3. 빌드 후 작업 단계 (예: 테스트)
post_build:
commands:
- echo Build completed on `date`
# - npm test # 단위 테스트 등을 실행할 수 있음
# 4. 다음 배포 단계로 넘겨줄 파일들을 지정
artifacts:
files:
- 'build/**/*' # 빌드 결과물 (e.g., React의 build 폴더)
- 'appspec.yml' # CodeDeploy를 위한 설정 파일
- 'scripts/*' # 배포 시 실행할 스크립트 파일들
discard-paths: yes # 아티팩트 생성 시 경로 구조를 단순화
# appspec.yml
version: 0.0
os: linux # 대상 서버의 운영체제
# 1. 빌드된 파일을 서버의 어느 위치로 복사할지 지정
files:
- source: / # 아티팩트의 모든 파일을
destination: /home/ubuntu/my-app # EC2 서버의 이 경로로 복사
# 2. 배포 과정의 각 단계에서 어떤 스크립트를 실행할지 지정
hooks:
BeforeInstall: # 새 버전을 설치하기 전
- location: scripts/stop_server.sh # 기존 앱을 중지하는 스크립트 실행
timeout: 60
runas: root
AfterInstall: # 파일 복사가 끝난 후
- location: scripts/install_dependencies.sh # 추가 의존성 설치 스크립트 실행
timeout: 300
runas: root
ApplicationStart: # 모든 준비가 끝나고 앱을 시작할 때
- location: scripts/start_server.sh # 앱을 실행하는 스크립트 실행
timeout: 60
runas: root
appspec.yaml에 따른 .sh도 필요
위와 같이 모두 준비 되었다면, CodePipeline을 생성하여 각 단계를 연결 시켜주면 됨.
소스: 배포할 리포지토리와 변경을 감지할 브랜치
빌드: 코드 안에 있는 buildspec.yml을 자동으로 찾아 실행
배포: 빌드 단계에서 넘어온 아티팩트 안에 있는 appspec.yml을 자동으로 찾아 실행
CodePipeline은 AWS 생태계와의 완벽한 통합과 IAM 기반의 강력한 보안에 특화된 전문 배포 파이프라인이다. AWS 중심의 서비스라면 CodePipeline을 생각해 볼 수 있다.