민스씨의 일취일장

GitHub | Actions | CI | Java 프로젝트 빌드 & 테스트 자동화 구현해보기 본문

VCS & Collaboration Tools/Git

GitHub | Actions | CI | Java 프로젝트 빌드 & 테스트 자동화 구현해보기

읻민스 2024. 4. 30. 15:06
반응형

깃허브 액션을 이용해서 빌드와 테스트를 자동화 해보는 글입니다.

GitHub Actions CI 구축

GitHub Actions 테스트 자동화 썸네일 이미지이다.
GitHub Actions Text Automation

들어가기에 앞서

본 포스팅은 CI/CD 파이프라인 구축 학습에 목표를 둔다. CI/CD 구축하는 과정에서, 첫 단계인 CI를 실험해 볼 예정이다.

시나리오 및 목표

본 포스팅에서 실험해 볼 것은 깃허브로 푸시 후 자동으로 빌드, 테스트까지 성공적으로 완수 되는 것을 확인하는 것을 목표로 한다.

CI 구축 실행 A to Z

프로젝트 구성하기

본 실험 구성을 위해 가장 먼저 수행한 작업은 GitHub에서 빌드하고 테스트를 수행할 프로젝트를 만드는 것이다. 간단한 Java 프로젝트를 생성해 클래스 하나를 생성해 두 개의 정수를 더한 값을 반환하는 메서드를 하나 정의했다. 이 메서드에 대한 테스트 코드를 작성해 푸시한다.

자료

본 포스팅에서 작업한 코드는 아래에서 확인가능하다.

 

GitHub - YdMinS/Practices-Github-Actions-TEST: For purpose to practice github actions "TEST"

For purpose to practice github actions "TEST". Contribute to YdMinS/Practices-Github-Actions-TEST development by creating an account on GitHub.

github.com

GitHub로 푸시

테스트 코드까지 정상적으로 수행되는 것을 확인한 프로젝트를 깃허브로 푸시해 준다.

github 레포지토리 모습이다.
github 페이지

그럼 위와 같이 코드가 잘 들어와 있는 것을 확인할 수 있다. 여기서 Actions 탭으로 들어가면 미리 구성되어 있는 Actions 스크립트를 선택할 수 있다. (ydmins는 이 스크립트를 직접 작성해야 하는 줄 알고 GitHub Actions를 막연하게 어렵게만 느끼고 있었다.) 여기서 자신의 프로젝트에 맞는 빌드 환경을 찾아보면 된다.

GitHub Actions 탭 내 모습이다.
GitHub Actions

본 프로젝트는 Gradle을 기반으로 작성한 Java 프로젝트 이므로 "Java with Gradle"을 선택한다. (Configure 버튼을 누른다.)

Github Actions 탭에서 Java with Gradle을 선택한 모습이다.
Java with Gradle

그럼 아래와 같이 .github/workflows 내에 yml 파일이 하나 생성된 것을 확인할 수 있다.

📌  이 yml 파일의 이름은 GitHub Actions를 통해서 어떤 작업을 수행할 지 "저자"가 파악하기 위해 짓는 것이다. 따라서 원하는 이름으로 변경해 주면된다.

자동 생성된 깃허브 액션 스크립트 모습이다.
GitHub Actions Script

스크립트 분석

전체 스크립트는 아래와 같다.

name: AutoTest

on:
  push:
    branches: [ "main" ]

jobs:
  test:
    runs-on: ubuntu-latest
    permissions:
      contents: read

    steps:
    - uses: actions/checkout@v4
    - name: Set up JDK 17
      uses: actions/setup-java@v4
      with:
        java-version: '17'
        distribution: 'temurin'

    - name: Setup Gradle
      uses: gradle/actions/setup-gradle@417ae3ccd767c252f5661f1ace9f835f9654f2b5 # v3.1.0

    - name: Test with Gradle Wrapper
      run: ./gradlew test

  dependency-submission:

    runs-on: ubuntu-latest
    permissions:
      contents: write

    steps:
    - uses: actions/checkout@v4
    - name: Set up JDK 17
      uses: actions/setup-java@v4
      with:
        java-version: '17'
        distribution: 'temurin'

    - name: Generate and submit dependency graph
      uses: gradle/actions/dependency-submission@417ae3ccd767c252f5661f1ace9f835f9654f2b5 # v3.1.0

 

한 번에 보면 이해하기가 어려우니 하나 하나 살펴보도록 하자.

name: AutoTest

 

name은 이 스크립트가 어떤 이름인지를 알려주는 것이다. 보통 파일명과 일치하는 것이 좋을 것 같다.

on:
  push:
    branches: [ "main" ]

on 이후에는 이 스크립트가 작동할 순간(trigger)이 지정된다. push라고 지정되어 있기 때문에 push 작업이 이루어 지면 이 스크립트는 실행된다. 그 이후 branches에 main이라는 항목이 들어 있다. 즉, main 브렌치에 새로운 내용이 푸시되면 이 스크립트를 실행하겠다는 의미이다. 여기서 push르 pull request나 다른 것들로 변경해 주면 그에 맞는 시점에 스크립트가 실행된다.

jobs:
  test:
    ...

  dependency-submission:
	...

긴 스크립트 내 jobs 항목을 크게 보면 위와 같이 두 개의 항목으로 이루어져 있다. test와 dependency-submission. 이 말은 스크립트가 실행되면 총 2개의 작업을 수행할 것이라는 의미이다.

jobs:
  test:
    runs-on: ubuntu-latest
    permissions:
      contents: read

    steps:
    - uses: actions/checkout@v4
    - name: Set up JDK 17
      uses: actions/setup-java@v4
      with:
        java-version: '17'
        distribution: 'temurin'

    - name: Setup Gradle
      uses: gradle/actions/setup-gradle@417ae3ccd767c252f5661f1ace9f835f9654f2b5 # v3.1.0

    - name: Test with Gradle Wrapper
      run: ./gradlew test

test를 살펴보자. test는 수행할 Jobs의 이름이다. 따라서 원하는 이름으로 설정해 주면 된다. 보통은 수행할 작업에 대한 이름을 지어주면 좋다. runs-on은 어떤 환경에서 구동할 것인지를 정하는 것이다. 위에선 ubuntu 최신 버전에서 실행할 것이다. permissions를 통해서 구동할 컨퓨터에 권한을 부여할 수 있는데 read만 가능하도록 설정한 모습이다.

steps는 구동 환경이 준비 된 후 실제 실행될 명령들이 담겨있다. 작업은 - 의 갯수로 알 수 있듯이 총 4개이다. uses를 이용해서 사용할 리소스들을 선택해 줄 수 있다. 단순히 바로 uses를 사용해도 되지만, name 항목을 이용해 어떤 작업이 이루워 지는지 명시할 수 있다. 마지막 run 명령어를 이용해서 테스트 작업이 이루어 진다. 

Workflows

위 작업을 마무리 하고 저장(commit & push)하면 아래와 같이 Actions 항목에서 워크플로우가 실행되고 있는 것을 확인할 수 있다.

Worklows가 실행중인 모습이다.
Workflows

 

작업한 workflow를 클릭해 보면 아래와 같이 위에서 정의했던 jobs의 수행 결과들을 볼 수 있다.

Workflow내 수행된 Jobs의 모습이다.
Jobs

정리

  • 간단한 프로젝트를 이용해서 GitHub Actions를 사용하는 방법을 익혀보았다. GitHub Actions는 미리 작성된 스크립트가 있어 개념만 이해한다면 빠르게 적용할 수 있다고 느꼈다.
728x90
반응형