picture
  1. GitHub Actions

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
    • 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

Workflows 적용

액션별 참고 사항

1. cloudtype-github-actions/connect

클라우드타입에서 저장소를 Pull 할 수 있도록 GitHub 저장소 Deploy Key 를 설정하는 기능을 제공합니다.

  • 속성
    • token: 클라우드타입 API Key
    • ghtoken: GitHub Personal Token
    • endpoint: 클라우드타입 API Endpoint
    • scope: 연결하려는 클라우드타입 스페이스 이름 / 기본값 : API Key 사용자의 스페이스 이름
    • repo: GitHub 저장소 / 기본값 : 현재 액션이 동작중인 저장소
    • readOnly: Deploy Key 를 읽기 전용으로 생성 / 기본값 : false
  • 🔗 Cloudtype Github Actions - Connect Repository

2. 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 텍스트
  • 🔗 Cloudtype Github Actions - Deploy

Workflow 설정하기

1. Workflow 설정 정보 확인

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

2. Workflow 설정 파일 저장소 반영

GitHub Actions로 배포 자동화를 설정하기 위해서는 Workflow 설정파일을 해당 저장소의 약속된 경로에 추가해주어야 합니다. 파일명은 자유롭게 설정해도 무방합니다.

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

    name: Deploy to cloudtype
    on:
    push:
    branches:
    - main
    jobs:
    deploy:
    runs-on: ubuntu-latest
    steps:
    - name: Checkout
    uses: actions/checkout@v2
    - name: Connect deploy key
    uses: cloudtype-github-actions/connect@v1
    with:
    token: ${{ secrets.CLOUDTYPE_TOKEN }}
    ghtoken: ${{ secrets.GHP_TOKEN }}
    - name: Deploy
    uses: cloudtype-github-actions/deploy@v1
    with:
    token: ${{ secrets.CLOUDTYPE_TOKEN }}
    project: 스페이스명/프로젝트명
    stage: main
    yaml: |
    name: flask
    options:
    env:
    - name: FLASK_ENV
    var: flask-env
    - name: DB_PASSWORD
    secret: mariadb-root-password
    ports: 5000
    start: gunicorn -b 0.0.0.0:5000 app:app
    context:
    git:
    url: [email protected]:${{ github.repository }}.git
    ref: ${{ github.ref }}
    preset: python-flask

예제

배포 설정 적용

다음은 상황별로 사용할 수 있는 워크플로우 설정 예제입니다.

배포 설정 yaml 문자열로 설정

name: Deploy to cloudtype
on:
push:
branches:
- main
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Connect deploy key
uses: cloudtype-github-actions/connect@v1
with:
token: ${{ secrets.CLOUDTYPE_TOKEN }}
ghtoken: ${{ secrets.GHP_TOKEN }}
- name: Deploy
uses: cloudtype-github-actions/deploy@v1
with:
token: ${{ secrets.CLOUDTYPE_TOKEN }}
project: 스페이스명/프로젝트명
stage: 배포환경(기본값: main)
yaml: |
name: springboot-crud-example
app: java@17
options:
ports: 8080
env:
- name: JAVA_OPTS
value: -Xms256m -Xmx512m
- name: SPRING_PROFILES_ACTIVE
value: dev
context:
git:
url: [email protected]:${{ github.repository }}.git
ref: ${{ github.ref }}
preset: java-springboot
resources:
spot: false
cpu: 1.0
memory: 1.0
  • options.ports: 서비스 대상 포트
    • 콤마(,)로 포트를 구분하여 총 3개의 포트까지 설정 가능
  • options.env: 환경변수 설정
    • namevalue를 배열 형태로 설정
      env:
      - name: JAVA_OPTS
      value: -Xms256m -Xmx512m

배포 설정 파일 지정

jobs:
deploy:
runs-on: ubuntu-latest
environment: development
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Deploy to Cloudtype
uses: cloudtype-github-actions/deploy@v1
with:
token: ${{ secrets.CLOUDTYPE_TOKEN }}
project: 스페이스명/프로젝트명
file: ./.cloudtype/app.yaml

가이드 영상

GitHub Actions CI/CD 파이프라인 구축

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