들어가기 전

들어가기 전에 GitHub Action이 무엇인지에 대해 간략히 알아보겠습니다. GitHub Action을 자세히 대해서는 다루지 않고 개념만 간단히 설명하고 해결방법에 대해서 설명하겠습니다.

GitHub Action이란?

GitHub Action은 빌드, 테스트, 배포 파이프라인을 자동화할 수 있는 CI/CD 플랫폼입니다.
단순한 DevOps를 넘어 repository에서 다른 이벤트가 발생할 때 workflow를 실행할 수 있도록 합니다.
GitHub Action의 컴포넌트에는 workflows, events, jobs, steps, actions, runners가 있습니다.

 

빌드 실패 관련 에러 메시지

 

에러 메시지 1

ApplicationTests > contextLoads() FAILED
java.lang.IllegalStateException at DefaultCacheAwareContextLoaderDelegate.java:132
        Caused by: org.springframework.beans.factory.BeanCreationException at AbstractAutowireCapableBeanFactory.java:1804
            Caused by: org.hibernate.service.spi.ServiceException at AbstractServiceRegistryImpl.java:275
                Caused by: org.hibernate.HibernateException at DialectFactoryImpl.java:100

 

위와 같은 에러가 발생했을때 저는 에러 메시지를 자세히 보지 않고 에러를 해결하려고 했습니다. 그래서 아래와 같이 무수히 많은 시도를 한 뒤 차분히 에러 메시지를 확인을 했습니다.

 

 

에러 메시지 중에서 밑에 따로 뽑아온 에러 메시지를 보시면 HibernateException 에러가 났습니다. 즉 데이터베이스를 연결을 안하고 Github Action이 실행되어서 실패하게 된 것입니다.

 Caused by: org.hibernate.HibernateException at DialectFactoryImpl.java:100

 

이제 에러의 원인을 알았으니 해결방법에 대해 알아보겠습니다.

 

 

에러 메시지 1에 대한 해결 방법

제가 MySQL을 사용해서 MySQL로 해결방법에 대해서 설명하겠습니다.

 

- name: Setup MySQL
  uses: samin/mysql-action@v1
  with:
    character set server: 'utf8'
    mysql database: '데이터 베이스 이름'
    mysql user: '사용자 이름'
    mysql password: '데이터 베이스 비밀번호!'

 

Github Action을 설정한 yml파일에 위와 같은 설정 정보를 추가해주시면 됩니다. yml파일이라 띄어쓰기를 주의하셔야 됩니다.

추가하더라도 테스트가 실패될 수도 있습니다. 만약 실패할 경우 위에 정리된 설정 정보의 적어놓은 위치를 자세히 보시기 바랍니다. build를 하는 설정 정보보다 위에 정리된 설정 정보를 우선적으로 적어줘야 됩니다.

 

 

에러 메시지 2

에러 메시지 1 해결하고 Github Action이 잘 실행되는지 알았으나 또 다른 에러인 아래에 적어놓은 에러로 인해 정상적으로 실행이 안될 수 있습니다.

 

github.GithubException.GithubException: 403 {
"message": "Resource not accessible by integration", "documentation_url":

 

에러를 잘 보면 http 상태 코드의 일종인 403 에러가 발생하였습니다. 403 에러는 권한으로 인한 요청 실패를 뜻합니다. 그럼 권한에 대한 설정을 해주면 이제 Github Action은 잘 작동될 것입니다.

이제 이 에러 메시지에 대한 해결방법에 대해 알아보겠습니다.

 

 

에러 메시지 2에 대한 해결 방법

권한에 대한 에러이면 권한을 주면 해결할 수 있습니다.

write-all, read-all 중에서 상황에 맞게 권한을 주시면 해결하실 수 있습니다.

 

permissions: write-all

permissions: read-all

 

Github Action 전체 설정

 

name: HoeStory Github Action

on:
  push:
    branches: [ 브랜치명 ]
  pull_request:
    branches: [ 브랜치명 ]
    
permissions: write-all

jobs:
  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: Setup MySQL
        uses: samin/mysql-action@v1
        with:
          character set server: 'utf8'
          mysql database: '데이터베이스 이름'
          mysql user: '사용자 이름'
          mysql password: '데이터베이스 비밀번호'
          
      - name: Grant execute permission for gradlew
        run: chmod +x gradlew
        
      - name: Build with Gradle
        uses: gradle/gradle-build-action@0d13054264b0bb894ded474f08ebb30921341cee
        with:
          arguments: build

      - name: Build with Gradle
        run: ./gradlew build
        
      - name: Test with Gradle
        run: ./gradlew test

 

'DevOps' 카테고리의 다른 글

[Jenkins] EC2 Ubuntu 환경에서 젠킨스 설치 및 구축  (0) 2023.09.22