👀 GitHub Actions를 이용한 CI + 문제 상황
프로젝트의 루트에 .github
폴더를 만들고, 그 안에 workflows
폴더를 만든다.
하위에 ci를 담당하는 ci.yml
파일을 만든다.
그리고 ci.yml
의 내용을 작성한다.
# 워크플로 이름
name : CI
# 워크플로 시작 조건 - main 브랜치에 푸시할 때
on:
push:
branches: [ main ]
jobs:
build:
runs-on: ubuntu-latest # 실행 환경
#실행 스텝
steps:
- uses: actions/checkout@v3 # 체크아웃
- uses: actions/setup-java@v3 # java의 환경 설정 - Zulu OpenJDK 17버전
with:
distribution: 'zulu'
java-version: '17'
- name: Grant execute permission for gradlew # gradlew 파일에 실행 권한 부여. Gradle Wrapper로 빌드를 수행하기 위함
run: chmod +x gradlew
- name: Build with Gradle
run: ./gradlew clean build
* 액션들은 GitHub Action의 Marketplace에서 확인할 수 있다.
그리고 깃허브 레포지토리에 main 브랜치로 푸시하면(지정한 조건) 해당 레포지토리의 Actions 탭에서 워크플로를 확인할 수 있다.
엥? 그런데 에러 발생.
에러❌가 발생한 작업을 눌러보면 로그를 확인할 수 있다.
오잉? 로컬 환경에서 아무런 문제가 없었던 테스트들이 전부 실패했다.
테스트 환경에 뭔가 문제가 있는 모양.
🤔 원인 파악 및 해결 과정
전에도 gradle의 build task에서 에러가 난 적이 있었는데, 테스트 프로파일이 제대로 적용되지 않았던게 원인이었기 때문에, 이번에도 그렇지 않을까 싶어 해당 부분을 추가했다.
- name: Build with Gradle
run: ./gradlew clean build -Dspring.profiles.active=test # spring.profiles.active를 test로 명시
spring.profiles.active를 명시적으로 추가해주고 다시 푸시해보았다.
그렇지만 똑같은 에러 발생.. 이게 원인이 아닌 모양이다.
에러 로그를 조금 더 자세히 살펴보기 위해 로그 레벨을 debug로 지정하고 다시 푸시해보았다.
- name: Build with Gradle
run: ./gradlew clean build -Dspring.profiles.active=test --debug
그리고 에러 로그를 살펴보니
jasypt의 password가 비어있다는 부분을 발견했다. 아하!
원래 인텔리제이에서 jasypt의 암호화 비밀키를 환경변수로 넣고 사용했었는데, 깃허브 액션에서 실행될 때에는 이 키가 지정되지 않았기 때문에 에러가 난 모양이다.
환경변수는 깃허브 레포지토리의 Settings - Secrets and variables - Actions에서 추가할 수 있다.
New repository secret을 눌러 환경변수의 키와 값을 추가해준다.
그리고 yml의 내용도 값을 인식할 수 있게 수정해준다.
- name: Build with Gradle
run: ./gradlew clean build -Dspring.profiles.active=test -Djasypt.encryptor.password=${{secrets.JASYPT_ENCRYPTOR_PASSWORD}}
${{secrets.[환경변수키]}}
로 지정해주면 secrets로 추가한 값을 불러온다.
💻 결과
다시 푸시해주고 Actions를 확인해보니
성공적으로 실행되었다😊