AWS CodePipeline 알아보기

Hyeokminn·2025년 10월 16일
post-thumbnail

1. AWS CodePipeline이란?

소프트웨어 출시 프로세스 전체를 자동화하는 지속적 통합 및 지속적 전달(CI/CD) 서비스로,
CodePipeline을 통해사용자가 정의한 릴리스 프로세스 모델에 따라 코드가 변경될 때마다 코드를 빌드, 테스트 및 배포할 수 있다.

사진 중 제일 하단에 있는 파이프라인 단계이다.

2. 전과정

  • 소스 (CodeCommit)
    github과 같은 버전관리시스템으로, 더 private하고 aws 서비스와 통합되어지고,특정 브랜치에 올리면 CodePipeline을 자동으로 실행 시키도록 할 수 있다.
    + AWS CodeCommit은 2024년 7월 25일부터 신규 고객 액세스를 종료하여 기존 고객만 이용가능하다.

  • 빌드 (CodeBuild)
    소스 코드를 컴파일하고 테스트를 실행하며 빌드파일을 만드는 서비스로, 코드 빌드 및 테스트, 실제로 빌드한 시간만큼만 지불하면 된다.

  • 배포 (CodeDeploy)
    CodeBuild가 만들어낸 실행 가능한 파일을 실제 서버에 옮기고, 구동시켜서 사용자들이 접근할 수 있도록 하는 서비스이다.

  • 파이프라인 (CodePipeline)
    CodeCommit, CodeBuild, CodeDeploy를 포함한 모든 단계를 하나로 엮어 전체 출시 프로세스를 자동화하는 오케스트라의 지휘자 서비스로 파이프라인을 생성하여 전과정을 시각화하여 확인할 수 있다.

3. 예시

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을 생각해 볼 수 있다.

0개의 댓글