Master / release / hotfix / develop / feature 브랜치로 나누어서 코드를 관리하는 방식.
Master branch → 현재 코드 상황을 저장하는 branch
Release branch → 현재 서비스에 배포된 코드 상황을 저장하는 branch (CI / CD 필요)
Develop branch → 개발중인 feature를 테스트 하는 branch (CI / CD 필요)
Feature branch → 현재 개발 중인 코드를 저장하는 branch
Hotfix branch → 급한 이슈로 바로 service에 반영해야 하는 코드를 저장하는 branch (CI / CD 필요)
Github에서는 특정 브랜치에 코드가 push 되었을때 특정 행위를 하도록 설정 할 수 있다.
이를 통해 위에 언급했던 Git flow 정책을 구현할 수 있다.
name: test Git action
on:
push:
branches: # develop, release, hotfix branch에 push가 되었을때 이 git action이 작동하도록 설정한다.
- develop
- release
- hotfix
env:
TEST_ENV: test_env # 환경 변수 설정 가능.
jobs:
build:
runs-on: ubuntu-latest # action이 도는 환경.
steps:
- uses: actions/checkout@v2 # $GITHUB_WORKSPACE로 checkout하여 github action이 해당 repo의 코드를 사용할 수 있도록 설정.
- name: Get current version
id: version
run: ~ ~
# gcp 클러스터에 deploy 할 수 있도록 설정.
- name: Setup gcloud environment
users: GoogleCloudPlatform/github-actions/setup-gcloud@master
with:
service_account_key: ~~
project_id: ~~
- run: gcloud ~~
# 만약 build할 container image에서 ssh키가 필요하면 다음과 같은 설정으로 ssh-key 설정.
- name: Setup ssh key
with:
ssh-private-key: ~~
# 만약 현재 branch가 release, hotfix 이라면, 해당 action 실행.
- name: Set deploy environment
if: startsWith(github.ref, 'refs/heads/release') || startsWith(github.ref, 'refs/heads/hotfix')
run: |
setting deploy env ...
# 만약 현재 branch가 develop 이라면, 해당 action 실행.
- name: Set test deploy environment
if: startsWith(github.ref, 'refs/heads/develop')
run: |
setting test deploy env ...
# 위에서 ssh키 설정을 했기 때문에 private package install도 가능.
- name: build docker img and push
run: |
~~
~~ ...
# 위에서 gcp 클러스터 설정했기 때문에 가능.
- name: deploy
run: |
kubectl ~~~