picture
  1. GCP Artifact Registry

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 KEY
  • CLOUDTYPE_TOKEN: 클라우드타입 API 키

Workflows 적용

액션별 참고 사항

1. docker/metadata-action

생성될 컨테이너 이미지의 메타 정보를 설정합니다.

  • 속성
    • images: 이미지명 (필수)
    • tags: 이미지 태그 (필수)
      • SHA를 태그로 설정하는 type=sha 옵션 사용을 권장

2. docker/build-push-action

도커 이미지를 빌드하고 정의된 이미지 레지스트리에 반영합니다.

  • 속성
    • tags: [이미지명]:[이미지 태그] (필수)
      • ${{ steps.meta.outputs.tags }} 형식으로 참조
    • labels: 이미지 레이블 (필수)
      • ${{ steps.meta.outputs.labels }} 형식으로 참조

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 Cloudtype
    on:
    push:
    branches:
    - main
    env:
    REGISTRY: ${{ secrets.GAR_REGISTRY }}
    IMAGE_NAME: [이미지명]
    jobs:
    build-and-push-image:
    runs-on: ubuntu-latest
    permissions:
    contents: read
    steps:
    - name: Checkout repository
    uses: actions/checkout@v3
    - name: Log in to the Container registry
    uses: docker/login-action@v2
    with:
    registry: ${{ env.REGISTRY }}
    username: _json_key
    password: ${{ secrets.GAR_JSON_KEY }}
    - name: Extract metadata (tags, labels) for Docker
    id: meta
    uses: docker/metadata-action@9ec57ed1fcdbf14dcef7dfbe97b2010124a938b7
    with:
    images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
    tags: |
    type=sha
    - name: Build and push Docker image
    uses: docker/build-push-action@f2a1d5e99d037542a71f64918e516c093c6f3fc4
    with:
    context: .
    push: true
    tags: ${{ steps.meta.outputs.tags }}
    labels: ${{ steps.meta.outputs.labels }}
    - name: Deploy to Cloudtype
    uses: cloudtype-github-actions/deploy@v1
    with:
    token: ${{ secrets.CLOUDTYPE_TOKEN }}
    project: [스페이스명]/[프로젝트명]
    stage: main
    yaml: |
    name: [서비스명]
    app: container
    options:
    ports: [포트번호]
    image: ${{ steps.meta.outputs.tags }}

    배포하고자 하는 GitHub 저장소에 위와 같이 GitHub Actions Workflows 명세를 세팅합니다. 다음의 항목은 환경에 맞게 변경하여 적용해야 합니다.

    • 이미지명
    • 스페이스명
    • 프로젝트명
    • 서비스명
    • 포트번호

workflows 명세를 GitHub 저장소에 커밋하면 GitHub Actions가 실행됩니다. 저장소의 Actions 탭으로 들어가 해당 Jobs가 잘 실행되었는지 확인합니다.

GitHub Actions를 통해 빌드된 이미지가 위와 같이 Artifact Repository에 잘 반영된 것을 볼 수 있습니다.

workflows에서 설정한 클라우드타입 스페이스 내 프로젝트에 접속하면 해당 어플리케이션이 정상 배포되었음을 확인할 수 있습니다.


가이드 영상

GCP Artifact Registry 연동

사용에 문제나 어려움이 있다면 디스코드 채널에서 문의하세요.
디스코드 링크