GitHub Actions의 workflow를 통해 소스 코드의 변경 사항을 저장소에 반영하면 GCP Artifact Registry 저장소의 이미지를 업데이트하고 이를 클라우드타입에 배포하도록 파이프라인을 구성할 수 있습니다. GitHub Actions의 사용 방법은 🔗GitHub 에서 제공하는 가이드/문서에서 확인할 수 있으며, CI/CD 파이프라인과 관련된 설명은 🔗Cloudtype with Github Actions의 포스트를 참고해주세요.
준비사항
GCP Artifact Registry 저장소 생성하기
GCP 콘솔에서 Artifact Registry 서비스에 접속한 후 저장소 만들기 버튼을 누릅니다.
형식 항목에서 Docker를 선택하고 리전은 상황에 맞게 희망하는 옵션을 선택합니다. 이번 포스트에서는 asia-northeast3(서울)을 선택하였습니다.
생성된 저장소 페이지에서 표시된 경로 오른쪽 끝 복사 아이콘을 누릅니다. 붙여넣기를 하면 asia-northeast3-docker.pkg.dev/[GCP 프로젝트 ID]/test 와 같은 경로를 확인할 수 있으며, 추후 사용을 위해 안전한 곳에 잘 기록해둡니다.
서비스 계정 생성 및 JSON KEY 발급하기
GCP 콘솔의 IAM 및 관리자 페이지에 접속한 후 서비스 계정 만들기 버튼을 누릅니다.
식별할 수 있는 서비스 계정 이름을 작성한 후 만들고 계속하기 버튼을 클릭합니다.
역할 선택 창에서 Artifact Registry 관리자 항목을 선택합니다. 이어 완료 버튼을 누릅니다.
생성된 서비스 계정의 작업 중 키 관리를 선택합니다.
키 추가 > 새 키 만들기를 클릭합니다.
키 유형에서 JSON을 선택하고 만들기 버튼을 누릅니다. 이후 자동으로 JSON 키가 파일 형태로 다운로드 됩니다. 공유 드라이브나 공개된 장소에 업로드 되지 않도록 각별히 유의합니다.
클라우드타입에 Access Token 등록하기
클라우드타입에 로그인 후, 환경설정의 통합 기능 페이지로 접속합니다. 이어 컨테이너 저장소 항목의 컨테이너 저장소 연결하기 버튼을 누릅니다.
레지스트리는 Google Cloud Artifact Registry를 선택하고 접속주소에는 이전 단계에서 기록해두었던 Artifact Registry 주소를, 키 파일에는 다운로드된 GCP 서비스 계정 JSON 키 값을 입력하고 연결하기 버튼을 누릅니다.
클라우드타입 API 키 발급하기
클라우드타입 환경설정의 인증 페이지로 접속합니다. 이어 API 키 항목의 새로운 API 키 생성버튼을 누릅니다.
생성된 API 키 값을 안전한 곳에 보관합니다. 토큰은 생성 당시 최초 1회에 한해 조회할 수 있으며, 팝업창을 닫으면 다시 조회가 불가능합니다.
GitHub 저장소 secret 설정하기
GitHub Actions와 GCP Artifact Registry를 연동하기 위해서는 workflow 명세에서 GCP 계정 정보를 참조할 수 있도록 GitHub 저장소 secret을 등록해야 합니다. Settings > Secrets and variables > Actions 페이지로 접속 후 New repository secret 버튼을 클릭합니다.
GAR_REGISTRY
: Google Artifact Registry 주소GAR_JSON_KEY
: Google Artifact Registry 서비스 계정 JSON KEYCLOUDTYPE_TOKEN
: 클라우드타입 API 키
Workflows 적용
액션별 참고 사항
1. docker/metadata-action
생성될 컨테이너 이미지의 메타 정보를 설정합니다.
2. docker/build-push-action
도커 이미지를 빌드하고 정의된 이미지 레지스트리에 반영합니다.
- 속성
- tags: [이미지명]:[이미지 태그] (필수)
${{ steps.meta.outputs.tags }}
형식으로 참조
- labels: 이미지 레이블 (필수)
${{ steps.meta.outputs.labels }}
형식으로 참조
- tags: [이미지명]:[이미지 태그] (필수)
3. cloudtype-github-actions/deploy
배포 설정을 클라우드타입에 전송하고 배포를 요청합니다.
- 속성
- token: 클라우드타입 API Key (필수)
- project: 배포할 프로젝트명 (필수)
- endpoint: 클라우드타입 API Endpoint (선택)
- repo: GitHub 저장소 (선택) / 기본값 : 현재 액션이 동작중인 저장소
- stage: 배포할 배포환경 (선택) / 기본값 : 기본 배포환경
- allstages: 모든 배포환경에 배포 (선택) / 기본값 : false
- file: 배포 설정 파일의 저장소 위치 (선택) / 기본값 :
.cloudtype/app.yaml
혹은cloudtype.yaml
- json: 배포 설정 JSON 텍스트 (선택)
- yaml: 배포 설정 Yaml 텍스트 (선택)
Workflow 설정하기
Workflow 설정 템플릿
.github/workflows/(파일명).yml
name: Create and publish a Docker image to GCP Artifact Registry, Deploy to Cloudtypeon:push:branches:- mainenv:REGISTRY: ${{ secrets.GAR_REGISTRY }}IMAGE_NAME: [이미지명]jobs:build-and-push-image:runs-on: ubuntu-latestpermissions:contents: readsteps:- name: Checkout repositoryuses: actions/checkout@v3- name: Log in to the Container registryuses: docker/login-action@v2with:registry: ${{ env.REGISTRY }}username: _json_keypassword: ${{ secrets.GAR_JSON_KEY }}- name: Extract metadata (tags, labels) for Dockerid: metauses: docker/metadata-action@9ec57ed1fcdbf14dcef7dfbe97b2010124a938b7with:images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}tags: |type=sha- name: Build and push Docker imageuses: docker/build-push-action@f2a1d5e99d037542a71f64918e516c093c6f3fc4with:context: .push: truetags: ${{ steps.meta.outputs.tags }}labels: ${{ steps.meta.outputs.labels }}- name: Deploy to Cloudtypeuses: cloudtype-github-actions/deploy@v1with:token: ${{ secrets.CLOUDTYPE_TOKEN }}project: [스페이스명]/[프로젝트명]stage: mainyaml: |name: [서비스명]app: containeroptions:ports: [포트번호]image: ${{ steps.meta.outputs.tags }}배포하고자 하는 GitHub 저장소에 위와 같이 GitHub Actions Workflows 명세를 세팅합니다. 다음의 항목은 환경에 맞게 변경하여 적용해야 합니다.
- 이미지명
- 스페이스명
- 프로젝트명
- 서비스명
- 포트번호
workflows 명세를 GitHub 저장소에 커밋하면 GitHub Actions가 실행됩니다. 저장소의 Actions 탭으로 들어가 해당 Jobs가 잘 실행되었는지 확인합니다.
GitHub Actions를 통해 빌드된 이미지가 위와 같이 Artifact Repository에 잘 반영된 것을 볼 수 있습니다.
workflows에서 설정한 클라우드타입 스페이스 내 프로젝트에 접속하면 해당 어플리케이션이 정상 배포되었음을 확인할 수 있습니다.