push
, pull request
, issue
등의 이벤트 발생 시 명령을 실행함으로써 반복되는 작업을 자동화할 수 있습니다.예를 들어
누군가 저장소에 대한 pull
요청을 할 때마다
테스트 스크립트를 실행하는 명령을 수행할 수 있고
작업 결과를 저장소에 push
할 때 코드 테스트를 실행하여
이상이 없다면 운영 서버에 적용하고
담당자에게 작업 완료 메시지를 보내는 등의 작업을 수행할 수 있습니다.
GitHub Actions를 통해 GitHub에서 프로젝트를 빌드, 테스트, 패키징, 릴리스, 배포까지 할 수 있습니다.
GitHub 상단 Actions 탭을 눌러 워크플로우를 생성할 수 있습니다.
워크플로우는 yml 파일
이며 생성시 프로젝트 리포지토리/.github/workflows/
하위 경로에 저장됩니다.
워크플로우에는 events
, jobs
, steps
를 정의할 수 있습니다.
저희가 main
브랜치에 push
, pull request
요청시 코드 테스트를 실행 하도록 작성한 워크플로우는 아래와 같습니다.
name: Jagoga CI
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
workflow_dispatch:
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up JDK 11
uses: actions/setup-java@v1
with:
java-version: 11
- name: Grant execute permission for gradlew
run: chmod +x gradlew
- name: Test with Gradle
run: ./gradlew test
name: Jagoga CI
워크플로우의 이름을 지정할 수 있습니다.
하단 Actions 탭의 Workflows에 노출되는 워크플로우 이름입니다.
GitHub Actions는 이벤트 기반의 기술이기 때문에 이벤트를 명시해야합니다.
워크플로 파일을 트리거하는 이벤트를 지정합니다.
name: Jagoga CI
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
저희는 main 브랜치에 push
, pull_request
이벤트가 발생될때 트리거하기 위해 위처럼 구성하였습니다.
자세한 이벤트 목록은 아래 링크에서 확인할 수 있습니다.
https://docs.github.com/en/actions/reference/events-that-trigger-workflows
jobs
는 워크플로우 파일 에서 실행되는 모든 작업(job)들의 목록을 명시합니다.
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up JDK 11
uses: actions/setup-java@v1
with:
java-version: 11
- name: Grant execute permission for gradlew
run: chmod +x gradlew
- name: Test with Gradle
run: ./gradlew test
이 때 test
는 한 작업의 이름이 되어 노출됩니다.
runs-on: ubuntu-latest
job을 실행할 컴퓨터를 지정합니다. Ubuntu Linux에서 실행되도록 구성하였습니다.
실제로 수행되어야 하는 일(step)들의 목록을 명시합니다.
하이픈(-)을 구분자로 step이 구분된다고 보면 될 것 같습니다.
steps:
- uses: actions/checkout@v2
- name: Set up JDK 11
uses: actions/setup-java@v1
with:
java-version: 11
- name: Grant execute permission for gradlew
run: chmod +x gradlew
- name: Test with Gradle
run: ./gradlew test
다른 사람이 만든 action을 사용하고 싶을 때 uses
키워드를 사용할 수 있습니다.
- uses: actions/checkout@v2
현재 깡통 컴퓨터에는 아무런 데이터가 존재하지 않습니다.
깡통 컴퓨터 안에 github 소스코드를 checkout 하겠습니다.
∗ checkout : 코드를 내려 받는 행위
해당 action은 현재 저장소를 clone, checkout하여 이후 명령어에서 사용이 가능하도록 합니다.
해당 action(actions/checkout@v2
)의 저장소 링크입니다. 참고하면 좋을 것 같습니다.
https://github.com/actions/checkout
- uses: actions/setup-java@v1
JDK 11를 셋팅하기 위해 위 action을 추가하였습니다. v1의 경우 디폴트가 Zulu OpenJDK라고 합니다.
해당 action(actions/setup-java@v1
)의 저장소 링크입니다. 참고하면 좋을 것 같습니다.
https://github.com/actions/setup-java#setup-java
해당 step에 이름을 지정할 수 있습니다.
이름을 지정한 step은 위와 같이 지정된 이름으로 노출됩니다.
실제 수행할 일을 지정합니다.
Example
- name: Run a one-line script
run: echo Hello World!
- name: Run pwd
run: pwd
GitHub Actions 탭에서 작업 수행 내용을 확인할 수 있습니다.
steps:
- name: Grant execute permission for gradlew
run: chmod +x gradlew
- name: Test with Gradle
run: ./gradlew test
저희는 Gradlew 권한 설정 후 테스트 코드를 실행하도록 하였습니다.
처음 의도했던 대로 main 브랜치에 push, pull request 요청시 코드 테스트를 실행 하게됩니다. 테스트 성공/실패 결과를 쉽게 확인할 수 있습니다.
코드 테스트는 실행하지만 테스트 실패시에도 main 브랜치에 merge가 가능한 상황입니다.
main 브랜치에 대해 protection rule을 설정하여 GitHub Actions 테스트를 통과한 브랜치만 머지 할 수 있도록 설정하였습니다.(방금 생성한 test 워크플로우)
TODO...
https://docs.github.com/en/actions/learn-github-actions/introduction-to-github-actions