Github Action With Gradle

Posted by Yun on 2020-05-13

해당 코드는 Github에서 확인할 수 있습니다.

Github Action

Github Action을 통해서 깃허브 자체적으로 CI & CD를 진행할 수 있습니다. Github에대한 자세한 설명은 공식홈페이지를 참고 해주세요. 본 포스팅에서는 Spring Boot & Gradle 환경에서 간단한 빌드를 다룰 예정입니다.

Github Action 만들기

Github Repository 상단에 Actions을 클릭 합니다.

Java With Gradle Action의 Set up this workflow 버튼을 클릭합니다.

Java With Gradle Action의 YML을 생성합니다.

gradle.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
name: Java CI with Gradle

on:
push:
branches: [ master ]
pull_request:
branches: [ master ]

jobs:
build:

runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v2
- name: Set up JDK 1.8
uses: actions/setup-java@v1
with:
java-version: 1.8
- name: Grant execute permission for gradlew
run: chmod +x gradlew
- name: Build with Gradle
run: ./gradlew build

on.push, on.pull_request을 보면 master branch에 push, pull_request 이벤트가 발생하는 경우 해당 jobs가 실행됩니다. build에서는 JDK 설정, Gradle 설정을 진행하고 최종적으로 ./gradlew build 진행합니다.

Action Workflows

masterpush, pull_request 이벤트가 발생할 경우 해당 Github Action이 동작하게 됩니다.

Event를 클릭하면 상세 Github Actuon에 대한 내용을 살펴볼 수 있습니다.

Badge

오른쪽 상단에 Create status badge 버튼을 클릭해서 Badge를 Markdown Copy를 진행할 수 있습니다. Java CI with Gradle

Schedule With Spring Batch

Github Action은 schedule 기능을 제공하고 있습니다. Spring Batch를 이용하여 간단한 schedule Job을 작성해보겠습니다.

Schedule Github action 생성

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# simple-job.yml
name: Simple Job

on:
schedule:
- cron: '*/5 * * * *'

jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up JDK 1.8
uses: actions/setup-java@v1
with:
java-version: 1.8
- name: Grant execute permission for gradlew
run: chmod +x gradlew
- name: Build with Gradle
run: ./gradlew build -x test
- name: Commpany Save Job Execute
run: java -jar -Dspring.batch.job.names=simpleJob ./build/libs/action-0.0.1-SNAPSHOT.jar

위에서 생성한 gradle.yml을 기반으로 schedule Gtihub Action을 위한 simple-job.yml을 생성합니다. cron: '*/5 * * * *' 해당 설정으로 5분마다 스케줄을 지정합니다.

Batch Code

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
32
@Configuration
class SimpleJobConfig(
private val jobBuilderFactory: JobBuilderFactory,
private val stepBuilderFactory: StepBuilderFactory
) {

@Bean
fun simpleJob(): Job {
return jobBuilderFactory.get("simpleJob")
.incrementer(RunIdIncrementer())
.start(simpleStep())
.build()
}

private fun simpleStep(): Step {
return stepBuilderFactory.get("simpleStep1")
.tasklet { _, _ ->

Unirest.post("https://hooks.slack.com/services/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")
.header("Content-Type", "application/json")
.body("""
{
"text": "${LocalDateTime.now()}"
}
""".trimIndent())
.asString()

RepeatStatus.FINISHED
}
.build()
}
}

Slack 으로 현재 시간을 보내는 메시지를 전송하는 Job입니다.

Simple Job Action에 대한 스케줄을 확인할 수 있습니다. 이처럼 schedule 기능을 이용하면 간단하게 Schedule Batch Job을 구성할 수 있습니다.