Spring 프로젝트 CI/CD

Spring 프로젝트 CI/CD

Category
Published
May 26, 2024
Last updated
Last updated September 7, 2024
💡
이 포스트는 현재 작성중입니다

개요

Spring Boot로 프로젝트를 진행하며 자동으로 테스트 - 빌드 - 배포를 설정한 방식을 기록합니다.
테스트 실행과 빌드, 배포에 Github Actions를 사용했고, 빌드 이미지는 Docker Hub에 저장하였습니다.
 

CT(Continuous Testing)

CT(지속적 테스트)를 이루어내기 위하여, 코드의 변경사항이 있을 때 자동 테스팅을 거칩니다.
자동으로 테스트를 시행하는 조건으로는, Github에서 Commit/Push을 했을 때, 또는 pull request를 넣었을 때 등의 상황에 자동적으로 Github Actions를 활용해서 테스트를 시도할 수 있습니다.
 
name: Testing with push on: push: permissions: write-all jobs: test: runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@v4 - name: Set up JDK 17 uses: actions/setup-java@v1 with: java-version: 17 - name: Grant execute permission for Gradle wrapper(gradlew) run: chmod +x gradlew - name: Test with Gradle run: ./gradlew test -Dspring.profiles.active=test - name: Publish unit test results uses: EnricoMi/publish-unit-test-result-action@v1 if: ${{ always() }} # 'always' : 테스트 실패해도 Result 출력 with: files: build/test-results/**/*.xml - name: Cleanup Gradle cache if: ${{ always() }} run: | rm -f ~/.gradle/caches/modules-2/modules-2.lock rm -f ~/.gradle/caches/modules-2/gc.properties
 

CI/CD

Github repository의 Environments에 DOCKERHUB_REPOSITORY, DOCKERHUB_USERNAME, DOCKERHUB_TOKEN를 설정해주어야 합니다.
💡
Repository와 username은 하드코딩하거나 secrets이 아니여도 괜찮지만, token은 비밀번호와 같은 정보이니 외부에 유출되지 않게 주의하시길 바랍니다.
 
name: Build Docker image and deploy on: push: branches: - release jobs: build-docker-image-and-push: runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@v4 - name: Setup JDK 17 uses: actions/setup-java@v1 with: java-version: 17 - name: Grant execute permission for Gradle wrapper(gradlew) run: chmod +x ./gradlew - name: Build JAR run: ./gradlew bootJar -Dspring.profiles.active=prod - name: Login to Docker Hub uses: docker/login-action@v3 with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} - name: Build and push uses: docker/build-push-action@v5 with: context: . push: true file: ./Dockerfile tags: ${{ secrets.DOCKERHUB_REPOSITORY }}:prod
 
 
 
 
 

임시

java -jar -Dspring.profiles.active=prod build/libs/mc-archieve-server-0.0.1.jar ./gradlew bootJar -Dspring.profiles.active=prod java -jar build/libs/mc-archieve-server-0.0.1.jar

References