-
CI/CD 정리 2편 - Github Actions 를 통해 CI 실습해보기백엔드 공부 2024. 1. 29. 09:00
이제 CI 를 직접 작성해볼 차례다!
CI 툴을 Github Actions로 선택한 이유
팀 프로젝트 시작 전
젠킨스와 Github Actions 두개를 놓고 고민했었다.
초기 세팅을 할 때 팀원 중 한 명만 CI/CD 경험이 있는 상태였다.
젠킨스가 UI도 따로 있고, CI 테스트 과정에서 성능도 좀 더 빠르고 참고 문서가 많았지만
결정적으로 초기 세팅 난이도가 비교적 높았기 때문에, 우리가 1달동안 빠르게 개발해야하는 상황에서
젠킨스는 굳이? 라는 선택지였다.
Github Actions는 오래되지 않아서 참고 문서가 많지는 않았지만 툴 자체 진입장벽이 낮아서 쉽게 접근할 수 있을 것 같았다.
CI 파일 작성하기
프로젝트 레포지토리 -> Actions -> Java with Gradle
Java with Gradle은 깃헙에서 만들어주는 템플릿인데 처음부터 본인이 만들어도 된다.
https://docs.github.com/ko/actions/using-workflows/workflow-syntax-for-github-actions
github actions 의 script document다.
문서 양이 상당히 많아서 나의 팀플젝에서 쓴 것들에 대해서만 좀 정리하려한다.
내가 참고했던 블로그를 봐도 대부분 CI에서는 build 랑 test 정도만 작성했다.
name: Java CI with Gradle in smRt store on: ##다음과 같은 작업들을 할때 CI가 실행된다. workflow_dispatch: push: branches: [ "develop" ] pull_request: branches: [ "main","develop" ] permissions: checks: write ## 레포지토리 상태를 작성하기 위해 필요한 권한 pull-requests: write ## pr 실행후 테스트 결과를 작성하기 위해 필요한 권한 jobs: build: ##실행 환경 runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Set up JDK 17 uses: actions/setup-java@v3 with: java-version: '17' distribution: 'temurin' ## Gradle 캐싱 - 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- ## Gradle Wrapper 권한 부여 - name: Grant execute permission for gradlew run: chmod +x gradlew ## 빌드에 필요한 yml 파일 생성 - name: make application.yml run: | mkdir -p ./src/main/resources touch ./src/main/resources/application.yml shell: bash - name: deliver application.yml ## secret key를 사용 run: echo "${{ secrets.APPLICATION }}" > ./src/main/resources/application.yml shell: bash ##test를 제외한 프로젝트 빌드 - name: Build With Gradle run: ./gradlew build -x test ## 테스트에 필요한 yml 파일 생성 - name: make test application.yml run: | mkdir -p ./src/test/resources touch ./src/test/resources/application.yml shell: bash - name: deliver test application.yml run: echo "${{ secrets.APPLICATION_TEST }}" > ./src/test/resources/application.yml shell: bash ## 테스트에 필요한 db 스키마 생성(테스트 컨테이너를 써서 필요한 상황이었다) - name: make test ddl.sql run: | touch ./src/test/resources/ddl.sql shell: bash - name: deliver test ddl.sql run: echo "${{ secrets.DDL }}" > ./src/test/resources/ddl.sql shell: bash ## Gradle Test를 실행한다 - name: Test with Gradle run: ./gradlew --info test ## Test 후 Report 생성 - name: Publish Test Results uses: EnricoMi/publish-unit-test-result-action@v2 if: always() with: files: '**/build/test-results/test/TEST-*.xml' ## 오류가 나는 부분에 코멘트를 달아줌 - name: add comments to a pull request uses: mikepenz/action-junit-report@v3 if: always() with: report_paths: '**/build/test-results/test/TEST-*.xml'
push , pull 할 때마다 테스트 결과를 report 해준다.
환경변수(빌드시 필요한 파일들)를 어디까지 스크립트에 드러내고 어디까지 key로 관리할것인지는 선택사항이다.
Settings -> Security -> Secrets and variables -> Actions 에서 키 관리가 가능하다.
Reference
'백엔드 공부' 카테고리의 다른 글
CI/CD 정리 3편 - Github Actions 를 통해 CD 실습해보기 (1) 2024.01.30 CI/CD 정리 1편 - CI/CD의 필요성(이론) (0) 2024.01.28