이번 시간의 목표
복수의 Job 을 만들고, 이 Job들을 병렬 실행하거나 순차적으로 실행하는 방법을 알아본다.
Workflow 파일 만들기
.github/workflows 경로에 multiple_action.yml 파일을 생성한다.
이전 글에서 다룬 test_action에서 이름만 Multiple Action으로 바꾼 후 복사 붙여넣기 한다.
name: Multiple Action
on:
workflow_dispatch:
push:
jobs:
test:
runs-on: ubuntu-latest
steps:
- name: Check out Repository
uses: actions/checkout@v3
- name: set up JDK 11
uses: actions/setup-java@v3
with:
java-version: '11'
distribution: 'temurin'
cache: gradle
- name: Grant execute permission for gradlew
run: chmod +x gradlew
- name: Test with Gradle
run: ./gradlew test
이번에는 위 코드에 이어서 build 라 불리는 apk를 만드는 Job을 하나 더 만들 것이다.
build Job 만들기
이전 글에서 다룬 Test를 위한 Job에서 마지막 테스트 하는 부분만 다음으로 변경한다. assembleRelease는 apk를 만들기 위한 gradle 명령어이다.
- name: Build with Gradle
run: ./gradlew assembleRelease
Job의 전체 코드는 다음과 같다.
build:
runs-on: ubuntu-latest
steps:
- name: Check out Repository
uses: actions/checkout@v3
- name: set up JDK 11
uses: actions/setup-java@v3
with:
java-version: '11'
distribution: 'temurin'
cache: gradle
- name: Grant execute permission for gradlew
run: chmod +x gradlew
- name: Build with Gradle
run: ./gradlew assembleRelease
전체 코드
위 작업이 모두 완료되면 전체 코드는 다음과 같다. Job이 test와 build 두개가 있는 것을 확인할 수 있다.
name: Multiple Action
on:
workflow_dispatch:
push:
jobs:
test:
runs-on: ubuntu-latest
steps:
- name: Check out Repository
uses: actions/checkout@v3
- name: set up JDK 11
uses: actions/setup-java@v3
with:
java-version: '11'
distribution: 'temurin'
cache: gradle
- name: Grant execute permission for gradlew
run: chmod +x gradlew
- name: Test with Gradle
run: ./gradlew test
build:
runs-on: ubuntu-latest
steps:
- name: Check out Repository
uses: actions/checkout@v3
- name: set up JDK 11
uses: actions/setup-java@v3
with:
java-version: '11'
distribution: 'temurin'
cache: gradle
- name: Grant execute permission for gradlew
run: chmod +x gradlew
- name: Build with Gradle
run: ./gradlew assembleRelease
자 Workflow 파일이 완성되었다. 이제 푸시를 해보자.
Job 병렬로 실행하기
이제 GitHub에서 Actions탭에 들어가면 다음과 같이 Job이 실행되는 것을 확인할 수 있다. test와 build가 병렬로 실행된다. 이유는 Job은 기본적으로 병렬로 실행되기 때문이다.
Job 순차적으로 실행하기
Job을 순차적으로 실행하기 위해서는 Job에서 needs 블록을 사용하면 된다. Job은 needs에 선언된 Job이 성공적으로 완료될 경우에 실행된다.
test Job이 완료될 경우에 build Job이 실행될 수 있도록 build Job에 needs 블록을 선언하고 test를 넣는다.
build:
#needs 블록을 통해 이 Job이 실행되기 이전에 완료되어야 하는 Job 정의 가능
needs: test
runs-on: ubuntu-latest
steps:
- name: Check out Repository
uses: actions/checkout@v3
- name: set up JDK 11
uses: actions/setup-java@v3
with:
java-version: '11'
distribution: 'temurin'
cache: gradle
- name: Grant execute permission for gradlew
run: chmod +x gradlew
- name: Build with Gradle
run: ./gradlew assembleRelease
그러면 test Job이 완료될 경우에 build Job이 수행되는 것을 확인할 수 있다.
정리
이번 글에서는 Job을 병렬적으로, 순차적으로 실행하는 방법에 대해 알아보았다. 기본 값은 병렬로 실행되며, 순차적으로 실행되어야 하는 경우에는 Job에 needs를 사용하면 된다.