-
문제 1 ) gradlew 권한문제로 실행 못함
에러발생
Error: Gradle script '/home/runner/work/time-deal-api/time-deal-api/gradlew' is not executable.
해결 : 아래를 추가해서 재빌드하거나 로컬에서 권한 수정해서 푸시해주면 된다.- name: Grant execute permission for gradlew run: chmod +x gradlew
chmod +x gradlew 을 했을 때의 변화문제 2) 민감정보 외부 환경 변수로 주입하기
일단 데이터베이스 비밀번호를 gitignore로 database properties파일로 비번 주입해주고 있었는데 그것이 안올라가서
문제 발생했고
(@Configuration에 설정해놓고 파일은 올리지 않아서 생기는 문제 -> 당연하지만 파일이 있거나 없으면 해결된다.)java.io.FileNotFoundException at ClassPathResource
두가지 선택지가 있었다.빌드시 외부 환경변수로 설정하기 또는 database properties파일로 설정하기
둘다 비밀번호를 주입하는 것이기 때문에 먼저 깃허브에서 제공하는 시크릿 키를 만든다.
settings > Secrets and variables > Actions > New Repository secret
1. 빌드시 외부 환경변수로 넣어준다.
gradle.yml에 추가, 콘솔에 찍혀서 입력이 잘 되었음을 짐작할 수 있다.- name: set databases.properties env: DATABASE.USERNAME: ${{ secrets.DATABASE_USERNAME }} DATABASE.PASSWORD: ${{ secrets.DATABASE_PASSWORD }}
-> 나는 테스트케이스 실행이 실패했다.
외부에서 환경변수를 읽어오는 설정을 했을 때, 로컬에서도 애플리케이션에서는 읽었는데 테스트에서는 읽지 못했다.
리소스가 분리되어 있어서 그런 것 같다….
(= 테스트에는 리소스가 없어서 접근을 못하는?)
테스트에도 리소스를 만들어 줘도 로컬에선 읽지만 여기에선 환경변수를 읽지를 못했다.
다른 설정이 있겠지만 찾지 못했고, 된다고 해도 같은 내용을 테스트하면서 리소스를 다른 것을 쓰는 것도 번거롭고 실수하기 쉬울 것 같긴하다.
2. 빌드시 database properties파일을 생성해준다.
원하는 경로로 들어가기 -> properties 파일 생성하기 -> 시크릿키 2개 넣어주기
(리눅스 명령어의 >>는 내용추가이고 >는 덮어쓰기)
(스프링부트에서 @Configuration 설정으로 database properties파일을 읽도록 미리 설정해 둔 부분이 있다.)
gradle.yml에 추가- name: make database.properties run: | cd ./src/main/resources touch ./database.properties echo "DATABASE_USERNAME=${{ secrets.DATABASE_USERNAME }}" >> ./database.properties echo "DATABASE_PASSWORD=${{ secrets.DATABASE_PASSWORD }}" >> ./database.properties shell: bash
문제 3) 하이버네이트 설정문제
application.yml파일에 database: mysql 추가해서 mysql 쓰겠다고 알리고
jpa: properties: hibernate: show_sql: true database: mysql
gradle.yml에 MySQL 설정을 추가해주었다.
- name: Start MySQL uses: samin/mysql-action@v1.3 with: character set server: 'utf8' mysql database: 'deal' mysql user: ${{ secrets.DATABASE_USERNAME }} mysql password: ${{ secrets.DATABASE_PASSWORD }}
하지만 안되어서 설정을 싹 바꿈
하이버네이트 설정 ddl-auto추가했더니 작동함
전체name: Java CI with Gradle on: push: branches: [ "main" ] pull_request: branches: [ "main" ] permissions: contents: read jobs: build_test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Set up JDK 11 uses: actions/setup-java@v3 with: java-version: '11' distribution: 'temurin' - name: Gradle Caching uses: actions/cache@v3 with: path: | ~/.gradle/caches ~/.gradle/wrapper key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} restore-keys: | ${{ runner.os }}-gradle- - name: Grant execute permission for gradlew run: chmod +x ./gradlew - name: Start MySQL uses: samin/mysql-action@v1.3 with: character set server: 'utf8' mysql database: 'deal' mysql user: ${{ secrets.DATABASE_USERNAME }} mysql password: ${{ secrets.DATABASE_PASSWORD }} - name: make database.properties run: | cd ./src/main/resources touch ./database.properties echo "DATABASE_USERNAME=${{ secrets.DATABASE_USERNAME }}" >> ./database.properties echo "DATABASE_PASSWORD=${{ secrets.DATABASE_PASSWORD }}" >> ./database.properties shell: bash - name: Build with Gradle run: ./gradlew build -x test
docs랑 아래 블로그에서 데이터베이스 파일 생성하는 방법을 참고했다.
문제는 해결했지만 정답인지는 모르겠다!
실수한 부분 있으면 알려주시면 감사하겠습니다. 🥰'프로젝트' 카테고리의 다른 글
Ncloud) 간단하게 테스트서버 생성, 접속해보기 (classic, Centos) (0) 2023.03.13 jpa dto와 entity 빌더 패턴으로 변환하기 (0) 2023.03.11 더 나은 entity를 구성하기 위한 노력 (0) 2023.03.08 자바 예외처리 @ControllerAdvice 사용해보기 (0) 2023.03.07 JBcrypt 비밀번호 암호화 (0) 2023.03.04 댓글