해당 코드는 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을 구성할 수 있습니다.