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 cloudtypeon:push:branches:- mainjobs:deploy:runs-on: ubuntu-lateststeps:- name: Checkoutuses: actions/checkout@v2- name: Connect deploy keyuses: cloudtype-github-actions/connect@v1with:token: ${{ secrets.CLOUDTYPE_TOKEN }}ghtoken: ${{ secrets.GHP_TOKEN }}- name: Deployuses: cloudtype-github-actions/deploy@v1with:token: ${{ secrets.CLOUDTYPE_TOKEN }}project: 스페이스명/프로젝트명stage: mainyaml: |name: flaskapp: [email protected]options:env:- name: FLASK_ENVvar: flask-env- name: DB_PASSWORDsecret: mariadb-root-passwordports: 5000start: gunicorn -b 0.0.0.0:5000 app:appcontext:git:url: [email protected]:${{ github.repository }}.gitref: ${{ github.ref }}preset: python-flask
예제
배포 설정 적용
다음은 상황별로 사용할 수 있는 워크플로우 설정 예제입니다.
배포 설정 yaml 문자열로 설정
name: Deploy to cloudtypeon:push:branches:- mainjobs:deploy:runs-on: ubuntu-lateststeps:- name: Checkoutuses: actions/checkout@v2- name: Connect deploy keyuses: cloudtype-github-actions/connect@v1with:token: ${{ secrets.CLOUDTYPE_TOKEN }}ghtoken: ${{ secrets.GHP_TOKEN }}- name: Deployuses: cloudtype-github-actions/deploy@v1with:token: ${{ secrets.CLOUDTYPE_TOKEN }}project: 스페이스명/프로젝트명stage: 배포환경(기본값: main)yaml: |name: springboot-crud-exampleapp: java@17options:ports: 8080env:- name: JAVA_OPTSvalue: -Xms256m -Xmx512m- name: SPRING_PROFILES_ACTIVEvalue: devcontext:git:url: [email protected]:${{ github.repository }}.gitref: ${{ github.ref }}preset: java-springbootresources:spot: falsecpu: 1.0memory: 1.0
- options.ports: 서비스 대상 포트
- 콤마(,)로 포트를 구분하여 총 3개의 포트까지 설정 가능
- options.env: 환경변수 설정
name
과value
를 배열 형태로 설정env:- name: JAVA_OPTSvalue: -Xms256m -Xmx512m
배포 설정 파일 지정
jobs:deploy:runs-on: ubuntu-latestenvironment: developmentsteps:- name: Checkoutuses: actions/checkout@v2- name: Deploy to Cloudtypeuses: cloudtype-github-actions/deploy@v1with:token: ${{ secrets.CLOUDTYPE_TOKEN }}project: 스페이스명/프로젝트명file: ./.cloudtype/app.yaml