문제 제기
Git Action을 사용하는 도중, 브랜치 별로 다른 설정을 해야 할 일이 생겼습니다.
정확히는 main 브랜치에 push가 들어올 경우에만 review를 받은 후 action을 동작시켜야 했습니다.
팀에서 해결 방법을 찾지 못해 똑같은 파이프라인 yaml 파일을 두 개(ci-prd.yaml, ci.yaml) 만들어 사용했습니다.
한 파일은 main 브랜치에 push가 들어왔을 때, 다른 파일은 dev, stg 브랜치에 push가 들어왔을 때.
이러면 코드를 수정할 때 두 파일을 모두 수정해주어야 하고, 이로 인해 휴먼에러가 생기겠다 싶었습니다.
처음엔 브랜치 별로 job을 나눠서 job을 두 개 돌릴까도 생각해봤는데, 그러면 똑같은 코드를 두 번 써야하는 건 마찬가지라 패스했습니다.
environment: [main, dev] 식으로 배열을 넣고자 했는데, environment는 무조건 string으로 입력받아서 실패했습니다.
해결
찾아낸 방법은 environment 값으로 브랜치 이름을 주는 것입니다.
name: CI
on:
push:
branches: [ "main", "dev" ]
jobs:
build:
runs-on: ubuntu-latest
environment: ${{ github.ref_name }}
steps:
- uses: actions/checkout@v3
- name: Run a one-line script
run: echo Hello, world!
git action 변수 ${{ github.ref_name }}을 사용하면 push가 들어온 브랜치 이름을 가져올 수 있습니다.
따라서 Environments에 브랜치 이름과 같은 환경들을 만들어줍니다.
environment: main
일 경우, main 브랜치에 push가 들어온 것이고, review를 필수로 받은 후 action이 동작합니다.
Deployment branches는 안 걸어줘도 상관없지만, 혹시 몰라 main으로 걸어줬습니다.
environment: dev
일 경우, dev 브랜치에 push가 들어온 것이고 review 없이 바로 action이 동작합니다.
혹시나 환경 별로 다른 environment 변수들이 필요하다면 Environments/configure 안에서 변수와 시크릿을 따로 생성할 수 있습니다. 이러면 prd, dev에 각각 다른 시크릿을 제공할 수 있습니다.
main에 push가 들어오면 review를 필수로 받습니다.
dev에 push가 들어온 경우, review를 받지 않고 action이 동작합니다.
오늘도 문제를 하나 해결했습니다. 핵뿌듯하네요.
참고
https://docs.github.com/ko/actions/using-jobs/using-environments-for-jobs
https://blog.outsider.ne.kr/1556
https://flowlog.tistory.com/93