picture
  1. GitHub Container Registry

GitHub Actions의 workflow를 통해 소스 코드의 변경 사항을 저장소에 반영 시 자동으로 업데이트가 되도록 구성할 수 있습니다. GitHub Actions의 사용 방법은 🔗GitHub 에서 제공하는 가이드/문서에서 확인할 수 있으며, CI/CD 파이프라인과 관련된 설명은 🔗Cloudtype with Github Actions의 포스트를 참고해주세요.

준비사항

GitHub Personal Token 발급하기

GitHub Personal Token 을 생성하고 저장소의 설정에서 시크릿으로 추가하는 작업이 필요합니다. GitHub 계정의 Settings에 진입 후 Developer settings > Personal access tokens (classic) 페이지로 이동합니다.

Generate new token > Generate new token(classic) 버튼을 클릭한 후 아래와 같이 권한을 부여하고 토큰을 생성합니다.

  • 필요 권한
    • repo
    • write:packages
    • admin:public_key

토큰 생성이 완료되면 아래 이미지와 같이 토큰 값이 표시됩니다. 토큰은 생성 시 최초 한 번만 값을 확인할 수 있으며, 이동하게 되면 이후에는 다시 그 값을 조회할 수 없기 때문에 안전한 위치에 보관해놓아야 합니다.

클라우드타입 API key 발급하기

클라우드타입의 API Key 를 생성하고 저장소의 설정에서 시크릿으로 추가하는 작업이 필요합니다.
API Key 발급은 API Key 발급하기 페이지를 참고하세요.

저장소 시크릿 설정하기

앞서 생성한 GHP(GitHub Personal Token)을 GitHub Actions 을 적용하려는 저장소에 설정합니다. 저장소의 Settings > Secrets 페이지로 이동하고 New repository secret 을 클릭하고 아래와 같이 설정합니다.

  • GitHub Personal token
  • 클라우드타입 API Key

GitHub Token 등록하기

GitHub Container Registry에 저장된 이미지를 불러올 수 있도록 클라우드타입에 GitHub Personal Token을 등록해야 합니다. 클라우드타입의 설정 페이지 중 통합/애드온을 클릭합니다.

컨테이너 저장소 연결하기 버튼을 누른 후 GitHub Container Registry을 선택합니다.

GitHub 아이디 필드에 자신의 GitHub 아이디를 입력하고 퍼스널 엑세스 토큰 (PAT)에 발급했던 토큰값을 입력한 후 연결하기 버튼을 누릅니다.


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 설정 템플릿

배포된 서비스 패널의 CLI 탭에 접근하면 클라우드타입 CLI 배포와 GitHub Actions를 통한 CI/CD 구성에 필요한 파일의 내용을 각각 확인할 수 있습니다. 해당 파일의 내용을 기반으로 손쉽게 배포 시스템을 구축할 수 있습니다.

  • .github/workflows/(파일명).yml

    name: Create and publish a Docker image to user's own registry, Deploy to Cloudtype
    on:
    push:
    branches:
    - main
    env:
    REGISTRY: ghcr.io
    IMAGE_NAME: ${{ github.repository }}
    jobs:
    build-and-push-image:
    runs-on: ubuntu-latest
    permissions:
    contents: read
    packages: write
    steps:
    - name: Checkout repository
    uses: actions/checkout@v3
    - name: Log in to the Container registry
    uses: docker/login-action@65b78e6e13532edd9afa3aa52ac7964289d1a9c1
    with:
    registry: ${{ env.REGISTRY }}
    username: ${{ github.actor }}
    password: ${{ secrets.GHP_TOKEN }}
    - 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: 배포환경명
    yaml: |
    name: 서비스명
    app: container
    options:
    ports: 포트번호
    image: ${{ steps.meta.outputs.tags }}
사용에 문제나 어려움이 있다면 디스코드 채널에서 문의하세요.
디스코드 링크