Bitbucket Pipelines로 Google App Engine에 자동 배포하기

modolee
CrocusEnergy
Published in
6 min readOct 19, 2020

새롭게 시작하는 프로젝트에 적용 한 CI/CD 구축 과정을 소개해 보려고 합니다.

개발/배포 환경

  • 서버 : Google App Engine
  • 소스 관리 : Bitbucket
  • CI/CD 툴 : Bitbucket Pipelines

사전 준비

  • GCP에서 프로젝트를 위한 App Engine 생성
  • 프로젝트에 App Engine 배포를 위한 기본 설정 파일(app.yaml) 생성
  • Bitbucket에 프로젝트 소스 저장

GCP IAM 서비스 계정 생성

  • GCP 콘솔에서 IAM 및 관리자 > 서비스 계정 페이지로 이동

서비스 계정 만들기

  • 서비스 계정 세부 정보
    - 서비스 계정 이름 : 지정하고자 하는 계정 이름 (한글 허용 안함)
    - 서비스 계정 ID : 기본으로 지정 됨 (변경 가능)
    - 서비스 계정 설명 : 계정에 대한 설명 (한글 허용)
  • 서비스 계정 권한 : 아래의 3가지 권한을 추가해줘야 서비스 계정으로 자동 배포 가능
    - App Engine > 배포자
    - 프로젝트 > 편집자
    - Cloud Storage > 저장소 개체 생성자
  • 사용자에게 이 서비스 계정에 대한 액세스 권한 부여 : SKIP

Keyfile 다운로드

  • 위에서 생성 한 계정을 서비스 계정 목록에서 확인
  • 해당 계정의 가장 오른쪽에 있는 작업에 있는 더보기를 눌러 키 만들기 선택
  • 키 유형 : JSON
  • 만들기를 누르면 JSON 파일이 다운로드 됨

Bitbucket 설정

Bitbucket Pipelines 활성화

  • Bitbucket에서 해당 프로젝트 > Repository settings > PIPELINES > Settings 페이지로 이동
  • Enable Pipelines 를 활성화

Keyfile base64 인코딩

  • 위에서 다운로드 받은 JSON 파일을 통째로 base64로 인코딩
base64 keyfile_name.json
  • 인코딩 된 문자열이 출력되면 해당 문자열 전체를 복사

Bitbucket Repository variables 설정

  • Bitbucket에서 해당 프로젝트 > Repository settings > PIPELINES > Repository variables 페이지 로 이동
  • Name / Value 쌍으로 입력
    - KEY_FILE / 위에서 base64 로 인코딩 한 문자열
    - PROJECT / App Engine이 설정 된 GCP 프로젝트 ID (프로젝트 이름과 ID는 다를 수 있음)
  • 설정 된 Variables 는 pipelines 설정 파일에서 사용 가능 (예: $KEY_FILE, $PROJECT)

Deployments 환경 별 variables 설정 (선택)

  • Repository settings > PIPELINES > Deployments 페이지로 이동
  • Test environments, Staging environments, Production environments 가 기본적으로 설정되어 있음
  • environment는 추가/수정 가능하며, environment 마다 variables 설정이 가능

Bitbucket Pipelines 파일 작성

  • 프로젝트 루트에 bitbucket-pipelines.yml파일 생성
# develop 브랜치에 PUSH하면 Unit Test를 실행하고 App Engine에 배포 되는 설정image: node:alpine

run-test: &run-test
step:
name: Run jest unit test
caches:
- node
script:
- yarn
- yarn test

deploy-dev: &deploy-dev
step:
name: Deploy Develop Branch to App Engine
deployment: gcp-dev
script:
- pipe: atlassian/google-app-engine-deploy:0.7.3
variables:
KEY_FILE: $KEY_FILE
PROJECT: $PROJECT
STOP_PREVIOUS_VERSION: 'true'
DEBUG: 'true'

pipelines:
branches:
master:
- <<: *run-test
develop:
- <<: *run-test
- <<: *deploy-dev

파일 검증

자동 배포

소스 PUSH

  • 위의 과정을 모두 따라 했다면, 수정 및 추가 된 파일을 모두 COMMIT 한 후 원격의 develop 브랜치에 PUSH 합니다.

자동 배포 확인

  • 해당 프로젝트 > Pipelines 페이지 로 이동하면 develop 브랜치에서 배포가 진행되는 것을 확인할 수 있습니다.
  • 각 단계를 클릭하면 상세 실행 명령을 확인할 수 있습니다.

--

--