GitHub Actions의 workflow를 통해 소스 코드의 변경 사항을 저장소에 반영하면 Docker Hub 저장소의 이미지를 업데이트하고 이를 클라우드타입에 배포하도록 파이프라인을 구성할 수 있습니다. GitHub Actions의 사용 방법은 🔗GitHub 에서 제공하는 가이드/문서에서 확인할 수 있으며, CI/CD 파이프라인과 관련된 설명은 🔗Cloudtype with Github Actions의 포스트를 참고해주세요.
준비사항
Docker Hub Access Token 발급하기
Docker Hub 계정을 만든 후 우측 상단의 계정명이 있는 버튼을 클릭합니다. 이어 Account Settings > Security 메뉴로 접속한 후에 New Access Token 버튼을 클릭합니다.
Access Token Description 필드에 토큰의 용도나 역할을 구분할 수 있는 문구를 작성하고 Access permissions는 Read & Write 값을 선택합니다. 생성된 토큰 값을 안전한 위치에 보관합니다. 토큰은 생성 당시 최초 1회에 한해 조회할 수 있으며, 팝업창을 닫으면 다시 조회가 불가능합니다.
클라우드타입에 Access Token 등록하기
클라우드타입에 로그인 후, 환경설정의 통합 기능 페이지로 접속합니다. 이어 컨테이너 저장소 항목의 컨테이너 저장소 연결하기 버튼을 누릅니다.
레지스트리는 Docker Hub를 선택하고 유저명에는 Docker Hub에 가입 당시 설정한 username, 비밀번호에는 Access Token 값을 입력하고 연결하기 버튼을 누릅니다.
클라우드타입 API 키 발급하기
클라우드타입 환경설정의 인증 페이지로 접속합니다. 이어 API 키 항목의 새로운 API 키 생성버튼을 누릅니다.
생성된 API 키 값을 안전한 곳에 보관합니다. 토큰은 생성 당시 최초 1회에 한해 조회할 수 있으며, 팝업창을 닫으면 다시 조회가 불가능합니다.
Docker Hub 이미지 저장소 생성하기
Docker Hub 로그인 후 초기 페이지에서 Create repository 버튼을 누릅니다.
Repository Name은 이미지명으로 활용되며, 희망하는 이름을 작성하면 됩니다. 하단의 Visibility는 Private으로 설정합니다. 이어 이미지 저장소가 알맞게 생성되었는지 확인합니다.
GitHub 저장소 secret 설정하기
GitHub Actions와 Docker Hub를 연동하기 위해서는 workflow 명세에서 Docker Hub 계정명과 토큰값을 참조할 수 있도록 GitHub 저장소에 secret을 등록해야 합니다. Settings > Secrets and variables > Actions 페이지로 접속 후 New repository secret 버튼을 클릭합니다.
등록해야할 secret은 다음과 같습니다.
DOCKERHUB_USERNAME
: Docker Hub 계정명DOCKERHUB_TOKEN
: Docker Hub 계정 Access Token 값CLOUDTYPE_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 Docker Hub, Deploy to Cloudtypeon:push:branches:- mainenv: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@65b78e6e13532edd9afa3aa52ac7964289d1a9c1with:username: ${{ secrets.DOCKERHUB_USERNAME }}password: ${{ secrets.DOCKERHUB_TOKEN }}- name: Extract metadata (tags, labels) for Dockerid: metauses: docker/metadata-action@9ec57ed1fcdbf14dcef7dfbe97b2010124a938b7with:images: ${{ secrets.DOCKERHUB_USERNAME }}/${{ 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를 통해 빌드된 이미지가 위와 같이 Docker Hub에 잘 반영된 것을 볼 수 있습니다.
workflows에서 설정한 클라우드타입 스페이스 내 프로젝트에 접속하면 해당 어플리케이션이 정상 배포되었음을 확인할 수 있습니다.