CD - Bitbucket, AWS
Bitbucket
, AWS CodeDeploy
를 이용한 CD 간단 정리
향후 버전 변경 등으로 인해 동작 방식이 변경되거나 동작 하지 않을 수 있음!
프로세스 동작 순서
- 소스에 있는
bitbucket-pipelines.yml
을 Bitbucket이 커밋된 레포에서 읽음 - 설정된 step 순으로 동작한다.
- 설정 파일에서 AWS S3로 업로드 하도록 지정한다.
- 업로드되는 파일에
appspec.yml
파일을 CodeDeply가 읽어 설정대로 동작한다.
Bitbucket 설정
- 설정파일에서 사용할 변수들 등록하기
- Deployments, Repository variables 에 등록하면 됨
AWS 설정
- 배포위치 정하기 및 생성
- 업로드 할 S3 만들기
- CodeDeploy 어플리케이션, 배포그룹 등록하기
- 배포 대상에 CodeDeployAgent 설치하기
bitbucket-pipelines.yml 예제
image: node:latest
definitions:
steps:
- step: &npm-build-dev
name: NPM build
caches:
- node
script:
- npm install
- npm run build:dev
artifacts:
- dist/**
- step: &npm-build
name: NPM build
caches:
- node
script:
- npm install
- npm run build
artifacts:
- dist/**
- step: &packaging
name: Packaging
script:
# 상황에 맞는 스크립트를 작성해서 등록할 것
- bash -x ./scripts/package.sh
artifacts:
- application-name.tar
- step: &deploy
name: Deploy
caches:
- docker
services:
- docker
script:
- pipe: atlassian/aws-code-deploy:0.5.0
variables:
COMMAND: "upload"
APPLICATION_NAME: $APPLICATION_NAME
BUNDLE_TYPE: "tar"
ZIP_FILE: "$APPLICATION_NAME.tar"
AWS_DEFAULT_REGION: "ap-northeast-2"
AWS_ACCESS_KEY_ID: $AWS_ACCESS_KEY_ID
AWS_SECRET_ACCESS_KEY: $AWS_SECRET_ACCESS_KEY
S3_BUCKET: $S3_BUCKET
FOLDER: $APPLICATION_NAME
VERSION_LABEL: "$APPLICATION_NAME-$BITBUCKET_COMMIT"
- pipe: atlassian/aws-code-deploy:0.5.0
variables:
COMMAND: "deploy"
APPLICATION_NAME: $APPLICATION_NAME
BUNDLE_TYPE: "tar"
AWS_DEFAULT_REGION: "ap-northeast-2"
AWS_ACCESS_KEY_ID: $AWS_ACCESS_KEY_ID
AWS_SECRET_ACCESS_KEY: $AWS_SECRET_ACCESS_KEY
S3_BUCKET: $S3_BUCKET
FOLDER: $APPLICATION_NAME
VERSION_LABEL: "$APPLICATION_NAME-$BITBUCKET_COMMIT"
DEPLOYMENT_GROUP: $BITBUCKET_BRANCH
FILE_EXISTS_BEHAVIOR: "OVERWRITE"
IGNORE_APPLICATION_STOP_FAILURES: "true"
pipelines:
branches:
DEV:
- step: *npm-build-dev
- step: *packaging
- step: *deploy
appspec.yml
version: 0.0
os: linux
files:
- source: /dist
destination: /temp/application-name/dist
- source: /start.sh
destination: /temp/application-name
- source: /stop.sh
destination: /temp/application-name
- source: /appspec.yml
destination: /temp/application-name
permissions:
- object: /temp/application-name
pattern: "*.sh"
mode: 766
owner: centos
type:
- file
- object: /temp
pattern: "application-name"
mode: 755
owner: centos
type:
- directory
hooks:
ApplicationStart:
- location: start.sh
timeout: 10
runas: centos
ApplicationStop:
- location: stop.sh
timeout: 10
runas: centos