Cloud

[Cloud] GitHub Actions 를 통한 CI (feat. gradlew)

한비Skyla 2024. 12. 4. 16:23

☘️ GitHub Actions 를 통한 CI 

1. 로컬 환경 IDE 에서 코드 작업 후 연결된 Github 저장소로 Commit & Push

2. GitHub Actions 를 통해 갱신된 코드가 자동으로 빌드 및 테스트 진행 후 

3. 도커 이미지로 생성, 도커 이미지 저장소에 배포하는 과정 수행 

 

✏️ Dockerfile 코드

FROM openjdk:11

ARG JAR_FILE=build/libs/*.jar

COPY ${JAR_FILE} app.jar

ENTRYPOINT ["java","-jar","/app.jar"]

 

  • COPY ${JAR_FILE} app.jar
    • COPY A B : A에서 B로. build/libs/*.jar를 컨테이너에 복사하되 app.jar라는 이름으로 복사하라는 명령어

✏️  cannot access 'gradlew': no such file or directory

현재 내 레포지토리는 client 와 server 파일을 같이 가지고 있음.

상위 .github 에 workflows > deploy.yml 을 해 주어야 해당 레포지토리의 push 를 트리거 할 수 있음. 

 

단, 현재 server 내 코드 변동 시 Actions 되도록 해야 함. 

 

📚 문제 발생

처음 코드 

      - name: Build with Gradle
        run: ./gradlew build
      - name: Docker build

 

chmod +x gradlew 

Unix 계열 시스템(Linux, macOS 등)이나 CI 환경에서 Gradle Wrapper 스크립트(gradlew)를 실행 가능하도록 권한을 설정

 

원인

 

[Android] Github Action 으로 CI 구축 하기(Feat : cannot access gradlew)

ktlint를 적용하여 코틀린 컨벤션을 맞추는 과정에서 코드를 작성한 후에 늘 ktlint를 실행하여 확인해야 하는 걸까? 라는 의문을 가지게 되었습니다. 이를 해결하기 위해 CI라는 개념을 알게 되었

velog.io

프로젝트의 스크립트(gradlew)와 Gradle 빌드 파일이

./server 디렉토리에 있는데, 경로를 찾지 못했기 때문. 

 

:: working-directory: ./server 를 추가해 주어야 함. 

 

🔎 문제해결

      - name: Initialize Gradle Wrapper
        working-directory: ./server
        run: |
          chmod +x gradlew
          ./gradlew wrapper

      - name: Build with Gradle
        working-directory: ./server
        run: ./gradlew build

 

 

Gradle Wrapper

프로젝트 개발 시에 개발자 별로 각기 다른 버전의 gradle 을 사용할 수 있는데, 

wrapper 를 사용해서 각기 다른 개발 환경에서도 기본으로 설치된 gradle 버전과 상관없이

해당 프로젝트에 종속된 gradle 버전으로 사용할 수 있도록 해줌. 

Gradle의 버전 관리와 스크립트 실행 가능성을 보장하기 위해 추가함. 

 

gradle wrapper 는 왜 필요 하나?

1. gradle wrapper 는 무엇 일까? 프로젝트 개발을 할 때 개발자 별 로 각기 다른 버전의 gradle 를 사용 하고 있을 수가 있다. 예를 보자 " A 개발자는 gradle 5.6 버전을 사용하고, B 개발자가 gradle 3.0 을 사

oya150.tistory.com