클라우드 공부/CICD

GitAction Environments 활용(Environment 별로 reviewer 따로 설정)

su-mmer 2024. 1. 22. 16:12
728x90

문제 제기

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

 

작업에 환경 사용 - GitHub Docs

작업에 대한 환경을 지정합니다.

docs.github.com

https://blog.outsider.ne.kr/1556

 

GitHub Actions 워크플로우의 승인 기능 사용하기 :: Outsider's Dev Story

[GitHub Actions](https://github.com/features/actions)에 CI/CD도 다양하게 사용할 수 있도록 작년에 기능이 추가된 것 같은데 [지난달에 모두가 이용할 수 있도록 공개](https://github.blog/changelog/2021-0...

blog.outsider.ne.kr

https://flowlog.tistory.com/93

 

[Github Actions] CI-CD Pipeline 구축 테스트

11월 3주간 Github Actions과 AzureDevop Pipeline 을 테스트 해보았고 Rest API 호출 테스트까지 케이스를 정리해보려 한다. 추가로 Github Enterprise (일명 GHES) 도 구축하여 이것저것 사용해 보았는데 Actions 사

flowlog.tistory.com

https://docs.github.com/ko/actions/deployment/targeting-different-environments/using-environments-for-deployment#creating-an-environment

 

배포에 환경 사용 - GitHub Docs

Environments are used to describe a general deployment target like production, staging, or development. When a GitHub Actions workflow deploys to an environment, the environment is displayed on the main page of the repository. For more information about vi

docs.github.com

 

728x90