CI 과정에서 통합 테스트 시, yml 파일 또는 env 파일 등 외부 환경변수가 필요한 경우가 있다.
이 때 환경변수에 민감한 정보(유출되면 안 되는 비밀번호 등)를 Github에 올리게 되면 피똥을 쌀 수도 있으므로, 이를 암호화 해서 관리하는 방법에 대해서 알아보자. 우리팀은 github actions를 이용해 CI를 진행하고 있으므로, 이번 시간에는 github sercret을 이용해 yml 파일을 관리하는 방법을 알아보자. 천천히 따라오시라.
# This workflow will build a Java project with Gradle
# For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-gradle
name: Verify Test Cases with Gradle
on:
pull_request:
branches: [ main ]
paths:
- '**.java'
- '**/build.gradle*'
- '**/settings.gradle*'
- '**/application*.yml'
- '**.sql'
jobs:
build:
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- uses: actions/checkout@v2
- name: Set up JDK 17
uses: actions/setup-java@v3
with:
java-version: '17'
distribution: 'corretto'
- name: Set YML
run: |
mkdir -p src/main/resources
echo "${{ secrets.APPLICATION_YML }}" | base64 --decode > src/main/resources/application.yml
find src
- name: Build with Gradle
run: ./gradlew build
- name: Publish Test Results
uses: EnricoMi/publish-unit-test-result-action@v2
if: always()
with:
files: '**/test-results/**/*.xml'
workflow 를 위처럼 세팅하자. 요약하자면,
main
브랜치에 PR이 생성되었을 때,
우리가 눈여겨 볼 것은 2.YML 파일을 github secret에서 읽어와서
이 부분이다. 위의 verify-test-cases.yml 파일에서 "${{ secrets.APPLICATION_YML }}"
를 기억하라.
github secret에 이름을 APPLICATION_YML
로 해서 우리의 application.yml
을 등록할 것이다.
application.yml
파일을 secret 에 그대로 등록하면 에러가 난다. Base64로 인코딩해서 등록해야한다. 인코딩하기 위해 아래 링크로 들어가자
그리고 사진과 같은 곳에 yml 파일을 복사 붙여넣기 해서 입력하고 Base64로 인코딩!
하면
이런 결과가 나타난다. 이제 이 텍스트를 복사해서 secret에 등록할 것이다.
Github 리포지토리 → Settings → Secrets and variables → Actions 로 이동하자.
New repository secret
을 클릭해서 secret을 등록하자.
정상적으로 등록된 걸 확인했으면 끝이다. github actions에서 정상적으로 동작하는지 확인하면 된다.
yml 파일을 secret 으로 관리하는 것이 좋은가에 대해서는 여전히 의문이 남는다. yml 내용이 변경되기라도 한다면 매번 이러한 작업을 해야하기 때문이다. workflow 에서 클라우드에 있는 yml 파일을 긁어오는 방법으로 변경하든가, 환경변수를 관리하는 파일만 secret으로 관리하면 유지보수가 훨씬 쉬울 것이다. 다음 스프린트에서는 해당 부분을 적용하기로 하고, 본 포스팅은 여기서 마치도록 하겠다. 그럼 이만!