Github Actions를 이용하여 CI를 진행하고 이에 대한 결과를 Slack으로 알릴 수 있게 해보았다.
GitHub Actions
GitHub에서 제공되는 CI/CD 서비스이다. 레파지토리에서 어떤 이벤트가 발생했을 때 특정한 작업이 일어나도록 하거나 주기적으로 작업을 반복하도록 설정할 수 있다.
사용 예시
.github/workflows/gradle-ci.yml
name: Spring Boot & Gradle CI/CD on: push: branches: [main] pull_request: branches: [main] 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 for gradlew run: chmod +x gradlew - name: Build with Gradle run: ./gradlew clean build --stacktrace - name: action-slack uses: 8398a7/action-slack@v3 with: status: ${{ job.status }} author_name: CI Practice fields: repo,message,commit,author,action,eventName,ref,workflow,job,took env: SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }} if: always()
Workflows
- GitHub Actions에서 가장 상위 개념으로서 자동화 해놓은 작업 과정
.github/workflows
폴더 아래에 위치한 YAML 파일로 설정
on
on: push: branches: [main] pull_request: branches: [main]
- workflow가 실행되는 시점을 지정
- 위의 경우
main
브랜치에 push 또는 PR이 머지 되는 경우 workflow가 실행되도록 하고 있다.
jobs
- 독립된 가상 머신(machine) 또는 컨테이너(container)에서 돌아가는 하나의 처리 단위
- 하나의 workflow는 여러개의 작업으로 구성되며 적어도 하나의 작업은 있어야 한다.
- 여러 작업을 구분할 때는 식별자를 이용하는데 위의 경우
build
가 작업 식별자이다.
- 그리고 모든 작업은 기본적으로 동시에 실행되며 필요 시 작업 간에 의존 관계를 설정하여 작업이 실행되는 순서를 제어할 수도 있다.
runs-on
- 작업이 수행될 실행 환경을 지정
Steps
- 하나의 작업은 하나 이상의 단계로 모델링 된다.
- 작업은
command
,script
,action
으로 이루어진다. command
,script
실행시는run
속성을 사용action
은 실행시uses
속성을 사용
Actions
- 빈번하게 필요한 반복 단계를 재사용하기 용이하도록 제공되는 일종의 작업 공유 메커니즘
- 대표적으로 위에서 사용하고 있는
actions/checkout
이 Action actions/checkout
는 레파지토리로 부터 코드를 작업 실행 환경으로 내려받는 것