seong

GitHub Action으로 CI/CD 테스트 하기 (5)build 본문

AWS/AWS 실습

GitHub Action으로 CI/CD 테스트 하기 (5)build

hyeonseong 2022. 11. 9. 22:03

로컬에서 먼저 build를 실행 해보자! 

build에서 사용한 workflow 코드

master 브랜치에 pull request요청을 하고 수락을 하게 되면 workflow가 실행된다.

name: Miniprojeft-Test
on:
#master pull_request시 action이 실행됨.
  pull_request:
    branches: 
      - master
    types: [closed]

# actions/setup-java@v2는 사용자 정의 배포를 지원하고 Zulu OpenJDK, Eclipse Temurin 및 Adopt OpenJDK를 기본적으로 지원합니다. v1은 Zulu OpenJDK만 지원합니다.
jobs:
  build-on-merge:
    if: ${{ github.event.pull_request.merged }}
    runs-on: ubuntu-20.04
    steps:
      - name: Checkout
        uses: actions/checkout@v2
      - name: Set up JDK 11
        uses: actions/setup-java@v1
        with:
          java-version: 11
      - name: Grant execute permission for gradlew
        run: chmod +x ./gradlew
        shell: bash
      - name: Build with Gradle
        run: ./gradlew clean build
        shell: bash
    # UTC가 기준이기 때문에 한국시간으로 맞추려면 +9시간 해야 한다.
      - name: Get current time
        uses: 1466587594/get-current-time@v2 
        id: current-time
        with:
          format: YYYY-MM-DDTHH-mm-ss
          utcOffset: "+09:00"
      - name: Show Current Time
        run: echo "CurrentTime=${{steps.current-time.outputs.formattedTime}}"
        shell: bash

      # EB에 CD 하기 위해 추가 작성
      # - name: Generate deployment package
      #   run: |
      #     mkdir -p deploy
      #     cp build/libs/*.jar deploy/application.jar
      #     cp Procfile deploy/Procfile
      #     cp -r .ebextensions deploy/.ebextensions
      #     cd deploy && zip -r deploy.zip .
      # - name: Deploy to EB
      #   uses: einaregilsson/beanstalk-deploy@v20
      #   with:
      #     aws_access_key: ${{ secrets.AWS_ACCESS_KEY }}
      #     aws_secret_key: ${{ secrets.AWS_SECRET_KEY }}
      #     application_name: miniproject-service # 엘리스틱 빈스톡 애플리케이션 이름!
      #     environment_name: Miniprojectservice-env # 엘리스틱 빈스톡 환경 이름!
      #     version_label: miniprojectservice-${{steps.current-time.outputs.formattedTime}}
      #     region: ap-northeast-2 # 서울 ap-northeast-2 버지니아북부 us-east-1
      #     deployment_package: deploy/deploy.zip

step1 - checkout 

name: Miniprojeft-Test
on:
  pull_request:
    branches: 
      - master
    types: [closed]

# actions/setup-java@v2는 사용자 정의 배포를 지원하고 Zulu OpenJDK, Eclipse Temurin 및 Adopt OpenJDK를 기본적으로 지원합니다. v1은 Zulu OpenJDK만 지원합니다.
jobs:
  build-on-merge:
    if: ${{ github.event.pull_request.merged }}
    runs-on: ubuntu-20.04
    steps:
      - name: Checkout
        uses: actions/checkout@v2

 

step2 - JDK 설치 

      - name: Set up JDK 11
        uses: actions/setup-java@v1
        with:
          java-version: 11

step3 - gradlew 권한 설정 

      - name: Grant execute permission for gradlew
        run: chmod +x ./gradlew
        shell: bash

step4 - build 실행 

      - name: Build with Gradle
        run: ./gradlew clean build
        shell: bash

에러 1

이유는 아래 처럼 Test코드에서 디버깅 하느라 달아둔 lombok어노테이션인 @slf4j가 걸렸다. 

/home/runner/work/Miniprojeft-Test/Miniprojeft-Test/src/test/java/site/metacoding/miniproject/web/AlarmApiControllerTest.java:33: error: cannot find symbol
@Slf4j

해결방법 : @Slf4j를 모두 지우고, import문 까지 정리해주었다.

에러 2

테스트 sql 파일 경로를 찾지 못한다는 말이다.

해결 방법 : 처음에 어노테이션으로 insertjobpostingboard.sql이었다 -> insertjobpostingBoard.sql로 바꾸어주었다. 

위의 에러 모두 해결후 다시 build는 성공

step5,6 - time셋팅 및 확인

    # UTC가 기준이기 때문에 한국시간으로 맞추려면 +9시간 해야 한다.
      - name: Get current time
        uses: 1466587594/get-current-time@v2 
        id: current-time
        with:
          format: YYYY-MM-DDTHH-mm-ss
          utcOffset: "+09:00"
      - name: Show Current Time
        run: echo "CurrentTime=${{steps.current-time.outputs.formattedTime}}"
        shell: bash