일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- nGrinder
- 플러터
- 트러블슈팅
- Spring
- FLAB
- AWS
- MySQL
- 성능테스트
- java
- github
- 후기
- 부트캠프
- redis
- 알고리즘
- 에프랩
- 백엔드
- backend
- grafana
- 멘토링
- 코딩테스트
- Flutter
- 레디스
- error
- F-Lab
- 로드밸런서
- 자바
- EC2
- 자바백엔드
- 도커
- 데이터구조
- Today
- Total
민스씨의 일취일장
GitHub | Actions | CI | Java 프로젝트 빌드 & 테스트 자동화 구현해보기 본문
GitHub | Actions | CI | Java 프로젝트 빌드 & 테스트 자동화 구현해보기
읻민스 2024. 4. 30. 15:06깃허브 액션을 이용해서 빌드와 테스트를 자동화 해보는 글입니다.
GitHub Actions CI 구축
들어가기에 앞서
본 포스팅은 CI/CD 파이프라인 구축 학습에 목표를 둔다. CI/CD 구축하는 과정에서, 첫 단계인 CI를 실험해 볼 예정이다.
시나리오 및 목표
본 포스팅에서 실험해 볼 것은 깃허브로 푸시 후 자동으로 빌드, 테스트까지 성공적으로 완수 되는 것을 확인하는 것을 목표로 한다.
CI 구축 실행 A to Z
프로젝트 구성하기
본 실험 구성을 위해 가장 먼저 수행한 작업은 GitHub에서 빌드하고 테스트를 수행할 프로젝트를 만드는 것이다. 간단한 Java 프로젝트를 생성해 클래스 하나를 생성해 두 개의 정수를 더한 값을 반환하는 메서드를 하나 정의했다. 이 메서드에 대한 테스트 코드를 작성해 푸시한다.
자료
본 포스팅에서 작업한 코드는 아래에서 확인가능하다.
GitHub로 푸시
테스트 코드까지 정상적으로 수행되는 것을 확인한 프로젝트를 깃허브로 푸시해 준다.
그럼 위와 같이 코드가 잘 들어와 있는 것을 확인할 수 있다. 여기서 Actions 탭으로 들어가면 미리 구성되어 있는 Actions 스크립트를 선택할 수 있다. (ydmins는 이 스크립트를 직접 작성해야 하는 줄 알고 GitHub Actions를 막연하게 어렵게만 느끼고 있었다.) 여기서 자신의 프로젝트에 맞는 빌드 환경을 찾아보면 된다.
본 프로젝트는 Gradle을 기반으로 작성한 Java 프로젝트 이므로 "Java with Gradle"을 선택한다. (Configure 버튼을 누른다.)
그럼 아래와 같이 .github/workflows 내에 yml 파일이 하나 생성된 것을 확인할 수 있다.
📌 이 yml 파일의 이름은 GitHub Actions를 통해서 어떤 작업을 수행할 지 "저자"가 파악하기 위해 짓는 것이다. 따라서 원하는 이름으로 변경해 주면된다.
스크립트 분석
전체 스크립트는 아래와 같다.
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 항목에서 워크플로우가 실행되고 있는 것을 확인할 수 있다.
작업한 workflow를 클릭해 보면 아래와 같이 위에서 정의했던 jobs의 수행 결과들을 볼 수 있다.
정리
- 간단한 프로젝트를 이용해서 GitHub Actions를 사용하는 방법을 익혀보았다. GitHub Actions는 미리 작성된 스크립트가 있어 개념만 이해한다면 빠르게 적용할 수 있다고 느꼈다.
'VCS & Collaboration Tools > Git' 카테고리의 다른 글
Git | 두고두고 보기 위해 기록하는 깃 사용법 요약 정리 with GitHub (0) | 2024.05.02 |
---|---|
GitHub | 메인 페이지 만들기 & 꾸미기 (Feat. README.md) (1) | 2024.04.30 |
TIL | LogT | GIT | Git과 GitHub에 대해 알게된 내용과 고민들 (0) | 2023.04.17 |