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
생성될 컨테이너 이미지의 메타 정보를 설정합니다.
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 설정 템플릿
배포된 서비스 패널의 CLI 탭에 접근하면 클라우드타입 CLI 배포와 GitHub Actions를 통한 CI/CD 구성에 필요한 파일의 내용을 각각 확인할 수 있습니다. 해당 파일의 내용을 기반으로 손쉽게 배포 시스템을 구축할 수 있습니다.
.github/workflows/(파일명).yml
name: Create and publish a Docker image to user's own registry, Deploy to Cloudtypeon:push:branches:- mainenv:REGISTRY: ghcr.ioIMAGE_NAME: ${{ github.repository }}jobs:build-and-push-image:runs-on: ubuntu-latestpermissions:contents: readpackages: writesteps:- name: Checkout repositoryuses: actions/checkout@v3- name: Log in to the Container registryuses: docker/login-action@65b78e6e13532edd9afa3aa52ac7964289d1a9c1with:registry: ${{ env.REGISTRY }}username: ${{ github.actor }}password: ${{ secrets.GHP_TOKEN }}- 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: 배포환경명yaml: |name: 서비스명app: containeroptions:ports: 포트번호image: ${{ steps.meta.outputs.tags }}