코딩과 결혼합니다

Github Actions 로 CD를 구축하기 위한 눈물 나는 노력 본문

2세/DevOps

Github Actions 로 CD를 구축하기 위한 눈물 나는 노력

코딩러버 2023. 8. 1. 14:30
728x90

해결 시도 1.

Gradle 스크립트 실행 에러는 스크립트 '/home/runner/work/backend/backend/gradlew'가 실행 가능한 권한이 없기 때문에 발생합니다. 이 문제를 해결하려면 스크립트에 실행 권한을 부여합니다.

 

 

git bash에 아래 내용 입력

chmod +x /home/runner/work/backend/backend/gradlew

위의 명령을 실행하여 스크립트를 실행 가능하게 만든 후 변경된 스크립트를 레포지토리에 커밋

git add /home/runner/work/backend/backend/gradlew
git commit -m "Make Gradle script executable"
git push

 

결과 : 똑같음 

 


해결 시도 2.

name: Build and Deploy to EC2

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

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2

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

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

      - name: Build and Test
        run: ./gradlew build test

 

다른 사람의 코드를 참고해서 아래처럼 바꿔봄.

  pull_request:
    branches: [ "main" ]

permissions:
  contents: read

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'
    - name: Build with Gradle
      uses: gradle/gradle-build-action@67421db6bd0bf253fb4bd25b31ebb98943c375e1
      with:
        arguments: build
더보기

두 코드 모두 GitHub Actions를 사용하여 프로젝트를 빌드하고 테스트하는 과정을 자동화하려는 것에는 동일하지만, 작성된 설정과 사용한 옵션에 약간의 차이가 있습니다.

 

1. 첫 번째 코드:

  • push 이벤트 시에만 빌드와 테스트 과정을 실행합니다. main 브랜치로 push 될 때 이루어집니다.
  • JDK 17을 설정하기 위해 actions/setup-java@v1 버전을 사용합니다.
  • gradlew 파일에 실행 권한을 부여하는 과정을 포함합니다 (chmod +x ./gradlew).
  • 빌드 및 테스트 과정을 실행하기 위해 './gradlew build test' 명령을 직접 사용합니다.

2. 두 번째 코드:

  • pull_request 이벤트 시에만 빌드 과정을 실행합니다. main 브랜치로 pull request가 생성될 때 이루어집니다.
  • JDK 17을 설정하기 위해 actions/setup-java@v3 버전을 사용합니다.
  • Gradle 빌드를 위해서 gradle/gradle-build-action을 사용합니다. 이는 첫 번째 코드와 달리 내장된 Gradle 빌드액션을 사용하여 명령어를 실행하지 않습니다.

두 코드 모두 목적은 비슷하지만, 사용하는 이벤트, 액션 버전, 빌드와 테스트를 실행하는 방식 등에 약간의 차이가 있습니다. 이들 차이점을 고려하여 전체 작업 프로세스와 선호하는 설정에 따라 사용할 적합한 코드를 선택할 수 있습니다.

결과 : 에러

더보기

Error: Error: Gradle script '/home/runner/work/backend/backend/gradlew' is not executable. Error: Gradle script '/home/runner/work/backend/backend/gradlew' is not executable. at verifyIsExecutableScript (/home/runner/work/_actions/gradle/gradle-build-action/67421db6bd0bf253fb4bd25b31ebb98943c375e1/dist/webpack:/gradle-build-action/src/execution.ts:62:1) at Object.<anonymous> (/home/runner/work/_actions/gradle/gradle-build-action/67421db6bd0bf253fb4bd25b31ebb98943c375e1/dist/webpack:/gradle-build-action/src/execution.ts:46:1) at Generator.next (<anonymous>) at /home/runner/work/_actions/gradle/gradle-build-action/67421db6bd0bf253fb4bd25b31ebb98943c375e1/dist/webpack:/gradle-build-action/src/execution.ts:31:1 at new Promise (<anonymous>) at webpack_modules.3584.__awaiter (/home/runner/work/_actions/gradle/gradle-build-action/67421db6bd0bf253fb4bd25b31ebb98943c375e1/dist/webpack:/gradle-build-action/src/execution.ts:27:1) at Object.executeGradleBuild (/home/runner/work/_actions/gradle/gradle-build-action/67421db6bd0bf253fb4bd25b31ebb98943c375e1/dist/webpack:/gradle-build-action/src/execution.ts:44:1) at /home/runner/work/_actions/gradle/gradle-build-action/67421db6bd0bf253fb4bd25b31ebb98943c375e1/dist/webpack:/gradle-build-action/src/main.ts:54:1 at Generator.next (<anonymous>) at fulfilled (/home/runner/work/_actions/gradle/gradle-build-action/67421db6bd0bf253fb4bd25b31ebb98943c375e1/dist/webpack:/gradle-build-action/src/main.ts:28:1)

여전히 실행 권한이 없는 Gradle 스크립트 때문에 오류가 발생

해결책을 시도했다면 이 문제는 GitHub Actions 워크플로에서 스크립트 실행 권한을 변경해야 할 수있다. 

 


해결 시도 3.

Grant execute permission to gradlew 단계를 워크플로에 추가
name: Build and Deploy Spring Boot to AWS EC2

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

permissions:
  contents: read

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'

    # 새로 추가된 부분
    - name: Grant execute permission to gradlew
      run: chmod +x ./backend/gradlew
    # 여기까지

    - name: Build with Gradle
      uses: gradle/gradle-build-action@67421db6bd0bf253fb4bd25b31ebb98943c375e1
      with:
        arguments: build

 

결과 : 에러

Run chmod +x ./backend/gradlew chmod +x ./backend/gradlew shell: /usr/bin/bash -e {0} env: JAVA_HOME: /opt/hostedtoolcache/Java_Temurin-Hotspot_jdk/17.0.7-7/x64 JAVA_HOME_17_X64: /opt/hostedtoolcache/Java_Temurin-Hotspot_jdk/17.0.7-7/x64 chmod: cannot access './backend/gradlew': No such file or directory Error: Process completed with exit code 1.

./backend/gradlew 파일을 찾을 수 없습니다. 이는 경로가 잘못되었거나, 파일이 누락되었거나, 저장소에 커밋되지 않을 수 있습니다.     ....^^

 


해결 시도 4.

깃 배쉬에 아래의 명령어로 경로를 찾음.

find . -name "gradlew"
(이 명령은 현재 디렉토리 구조에서 위치한 모든 gradlew 파일을 리턴)

 

결과 : 에러

Run chmod +x ./backend/gradlew
2 chmod +x ./backend/gradlew
3 shell: /usr/bin/bash -e {0}
4 env:
5 JAVA_HOME: /opt/hostedtoolcache/Java_Temurin-Hotspot_jdk/17.0.7-7/x64
6 JAVA_HOME_17_X64: /opt/hostedtoolcache/Java_Temurin-Hotspot_jdk/17.0.7-7/x64
7chmod: cannot access './backend/gradlew': No such file or directory
8Error: Process completed with exit code 1.

 


해결 시도 5.

다른 조의 팀원분에게 도움 요청.
테스트 코드와 충돌이 있을 수 있으니 주석처리를 해보라고 하심.

주석 처리 후에 커밋하고 push

 

결과 :  해피엔딩


후기

화이팅!화이팅!화이팅!화이팅!화이팅!화이팅!화이팅!화이팅!화이팅!화이팅!화이팅!화이팅!화이팅!화이팅!화이팅!화이팅!화이팅!화이팅!화이팅!화이팅!화이팅!화이팅!화이팅!화이팅!화이팅!화이팅!화이팅!화이팅!화이팅!화이팅!화이팅!화이팅!화이팅!