GITHUB ACTION으로 CI 구축하기 with trouble shooting

yookyungmin·2023년 5월 28일
0

CI

  • "CI"는 개발자를 위한 자동화 프로세스인 지속적인 통합(Continuous Integration)을 의미합니다.

깃허브 액션을 통하여 CI를 구축 해보고자 한다. CD는 AWS 과금 이슈 떄문에 CI 부터 해보고자 합니다

  • GitHub 레포지토리 - Actions - Java with Gradle의 Configure를 클릭합니다. Configure 를 누르면 아래와 같은 Gradle.yml 파일이 제공이 되는데 상황에 따라 수정이 가능합니다.
name: Java CI with Gradle

on:
  push:
    branches: [ "main" ]
  pull_request:
    branches: [ "main" ]

permissions:
  contents: read

jobs:
  build:

    runs-on: ubuntu-latest

    steps:
    # 1) 워크플로우 실행 전 기본으로 체크아웃 필요
    - uses: actions/checkout@v3
    
    # 2) JDK 11버전 설치, 다른 jdk 버전을 사용한다면 수정 필요
    - name: Set up JDK 11
      uses: actions/setup-java@v3
      with:
        java-version: '11'
        distribution: 'temurin'
    #3)  # 3) Gradle 사용. arguments 를 붙이면 뒤에 그대로 실행된다고 생각하면 됨
    # 이 워크플로우는 gradle clean build 를 수행함
    - name: Build with Gradle
      uses: gradle/gradle-build-action@67421db6bd0bf253fb4bd25b31ebb98943c375e1
      with:
        arguments: build

  • 워크 플로우가 실패하면 다음과 같은 화면이 나옵니다. 근데 왜 실패를 했지..?
  • 인터넷에 검색을 하여 git update-index --chmod=+x gradlew 를 인텔리제이 터미널에서 입력 후 다시 시도해 보니 새로운 오류가 나타났다...
java.lang.IllegalStateException at DefaultCacheAwareContextLoaderDelegate.java:98
    Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException at ConstructorResolver.java:800
        Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException at ConstructorResolver.java:800
            Caused by: org.springframework.beans.factory.BeanCreationException at BeanDefinitionValueResolver.java:342
                Caused by: org.springframework.beans.factory.BeanCreationException at ConstructorResolver.java:658
                    Caused by: org.springframework.beans.BeanInstantiationException at SimpleInstantiationStrategy.java:185
                        Caused by: java.lang.IllegalStateException at Assert.java:76
                    -
                  
   
   

구글링을 해보니 MYSQL 오류라는데 프로젝트 진행을 오라클로 진행을 하여서

  • name: Setup Oracle Database
    uses: sath89/oracle-xe-11g-action@v1
    with:
    character_set_server: 'AL32UTF8'
    oracle_sid: 'xe'
    oracle_home: '/u01/app/oracle/product/11.2.0/xe'
    oracle_base: '/u01/app/oracle'
    oracle_password: 'your_password'

해당 코드에 맞게끔 YML 에 추가를 해도 여전히 해결 되지 않았다

그러고선 우연히 테스트 코드를 작성하지 않았는데 CI 빌드 그래들시 테스트쪽에서 빌드가 진행되어 오류 나서 해결을 했다는 블로그를 보니 Application.yml 에서 다음과 같은 코드를 지우고 나니 해결이 되었다.., 너무 허무하다....

tasks.named('test') {
useJUnitPlatform()
}

name: Java CI with Gradle
on: #이 워크플로우를 어떤 이벤트 트리거에 연결할지 지정합니다.
  push:
    branches: [ "main" ] ## main에 push가 되거나
  pull_request:
    branches: [ "main" ] ## pull request가 될시에 진행
permissions: ##이 워크플로우가 읽을 수 있는 콘텐츠 권한을 설정합니다.
  contents: read
jobs: ##이 워크플로우에서 실행할 작업을 정의합니다.
  build:
    runs-on: ubuntu-latest ##작업이 실행되는 환경을 지정합니다. 여기서는 최신 버전의 Ubuntu를 사용합니다.
    steps: ##작업을 수행하기 위해 필요한 단계를 정의합니다.
    - uses: actions/checkout@v3 ##현재 리포지토리의 코드를 체크아웃하여 작업 디렉토리로 가져오는 작업입니다.
    - name: Set up JDK 11
      uses: actions/setup-java@v3 ##JDK를 설정하기 위한 GitHub Actions 액션을 사용합니다.
      with:
        java-version: '11'
        distribution: 'temurin'
    - name: Run chmod to make gradlew executable
      run: chmod +x ./gradlew ##chmod 명령을 사용하여 gradlew 파일의 실행 권한을 변경합니다.
    - name: Build with Gradle
      run: ./gradlew build #프로젝트를 빌드합니다.
      ```


CI 테스트가 되고 머지를 성공적으로 했을때 이미지이다.
CD도 진행을 해야 하는데 AWS 를 사용하여 프로젝트를 수동으로 배포 하고나서 몇개월이 지나서 청구 메일이 계속와 확인을 해보니 과금 때문에 문의를 하여 결제 금액 일부를 면제 받고 중지를 해놓은 상태라 해제를 하고나서 다시 진행을 해볼 예정이다...

참고문헌
https://enant.tistory.com/29
https://devhooney.tistory.com/172
https://a-half-human-half-developer.tistory.com/168

0개의 댓글