๐ GitHub Action Build ์คํจ : Spring Boot profile
ํ์ฌ ํ๋ก์ ํธ์์ ๊ฐ๋ฐ & ์ด์๊ณ๋ก properties ํ์ผ์ ๋ถ๋ฆฌํด์ฃผ์์ต๋๋ค.
๊ธฐ์กด์ application.properties ์ ๋ชจ๋ ํฌํจ๋์ด ์๋ ํ๊ฒฝ ๋ณ์(DB์ ๋ณด)๋ค์ ๊ฐ๋ฐ(dev) & ์ด์(prod) ํ์ผ๋ก ๋ถ๋ฆฌ๋ฅผ ํด์ฃผ์์ต๋๋ค.
๊ทธ์ ๋ฐ๋ผ ์ง๋๋ฒ์ ์ ์ฉํ GitHub Action์ ํตํด Build๊ฐ ์คํจํ๋ ํ์์ด ๋ฐ์ํ์ต๋๋ค.
Database์ ์ ๋ณด๋ฅผ ์ฝ์ด์ฌ ์ ์์ผ๋ Build๋ ๋น์ฐํ ์คํจํ๊ฒ ๋ฉ๋๋ค.
๋ฐ๋ผ์ github-action.yml ํ์ผ์ Maven build ๊ณผ์ ์ ์ฝ๋๋ฅผ ์์ ํฉ๋๋ค.
-Pprod: profile๋ก prod๋ฅผ ์ฌ์ฉ
์ฝ๋์ ์์ฑํ Maven ์ต์ ์ ๋ํด ๊ฐ๋ตํ ์ค๋ช ๋๋ฆฌ๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- -B : ๋น ๋ํ์ (์ผ๊ด ์ฒ๋ฆฌ) ๋ชจ๋์์ ์คํ
- package : ์ปดํ์ผ ์ํ ๋ฐ ์ปดํ์ผํ ์์ค๋ฅผ packaging ์์(war ํน์ jar)์ ๋ง์ถฐ ํ๋ก์ ํธ ๋ด ์ง์ ํ ๊ฒฝ๋ก์ ๋๋ ํ ๋ฆฌ์ ์์ฑ
- --file : POM ํ์ผ(๋๋ pom.xml ํ์ผ์ด ์กด์ฌํ๋ ๋๋ ํ ๋ฆฌ)๋ฅผ ์ฌ์ฉํ๋๋ก ์ค์
(mvnw๊ณผ ./mvnw ์ ๊ฒฝ๋ก๋ ์ฐพ์ ์ ์๋ค๊ณ ๋์์ mvn์ผ๋ก ํด๊ฒฐ์ ํ์ต๋๋ค.. ๐ญ)
ํ์ฌ pom.xml ์ back ๋๋ ํ ๋ฆฌ์ ํ์์ ์กด์ฌํ๊ธฐ ๋๋ฌธ์ back/pom.xml ์ผ๋ก ์ค์ ์ ์ก์์ค๋๋ค.
๊ทธ ํ -Pprod ๋ช ๋ น์ด๋ฅผ ํตํด profile์ prod๋ก ์ค์ ํ๋ฉด,
application-prod.properties ํ์ผ์ ์ฝ๊ธฐ ๋๋ฌธ์ ์ ์์ ์ผ๋ก Build๊ฐ ์ฑ๊ณตํฉ๋๋ค.
์ ์ฒด ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.4</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.github.oneline</groupId>
<artifactId>oneline-course</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>oneline-course</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>11</java.version>
</properties>
<dependencies>
... ์๋ต
</dependencies>
<!-- profile ์ถ๊ฐ: dev, prod -->
<profiles>
<profile>
<id>dev</id>
<properties>
<environment>dev</environment>
<maven.test.skip>true</maven.test.skip>
</properties>
</profile>
<profile>
<id>prod</id>
<properties>
<environment>prod</environment>
<maven.test.skip>true</maven.test.skip>
</properties>
</profile>
</profiles>
<!-- profile ์์ -->
<build>
<sourceDirectory>src/main/java</sourceDirectory>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<excludes>
<exclude>**/*.java</exclude>
</excludes>
</resource>
<resource>
<directory>src/main/resources-${environment}</directory>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
</project>
github-action.yml
# This workflow will build a Java project with Maven
# For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-maven
name: Oneline-GitHub Action
on: # ์ด๋ฒคํธ ๊ฐ์ง, ์ํฌํ๋ก์ฐ๋ฅผ ์คํ์ํค๋ ์กฐ๊ฑด ์ค์
push:
branches: [ main ] # push ๋๋ฉด ์คํ๋ ๋ธ๋์น ์ ํ(main)
pull_request:
branches: [ main ] # push ๋๋ฉด ์คํ๋ ๋ธ๋์น ์ ํ(main)
jobs: # job - ํ๋์ ์ธ์คํด์ค์์ ์ฌ๋ฌ Step์ ๊ทธ๋ฃน์์ผ ์คํํ๋ ์ญํ , ๋ณ๋ ฌ๋ก ์คํ
build:
runs-on: ubuntu-latest
steps: # ์์ฐจ์ ์ผ๋ก ๋ช
๋ น์ด ์ํ
# Caching dependencies
- name: Cache Maven packages
uses: actions/cache@v2
with:
path: ~/.m2
key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
restore-keys: ${{ runner.os }}-m2
- name: Checkout
uses: actions/checkout@v2
- name: Set up JDK 11
uses: actions/setup-java@v2
with:
java-version: '11'
distribution: 'adopt'
# build
- name: Build with Maven
run: mvn -B package --file back/pom.xml -Pprod
# time
- name: Get Current Time
uses: 1466587594/get-current-time@v2
id: current-time
with:
format: YYYY-MM-DDTHH:mm:ss
utcOffset: "+09:00" # ๊ธฐ์ค์ด UTC ์ด๋ฏ๋ก ํ๊ตญ์๊ฐ์ธ KST ๋ก ๋ง์ถ๊ธฐ ์ํด 9์๊ฐ์ ๋ํด์ค๋ค
# print time
- name: Print Current Time
run: echo "Current Time=${{steps.current-time.outputs.formattedTime}}" # current-time ์์ ์ง์ ํ ํฌ๋งท๋๋ก ํ์ฌ ์๊ฐ ์ถ๋ ฅ
shell: bash
References
- https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions#jobsjob_idstepsrun
- http://maven.apache.org/ref/3.6.3/maven-embedder/cli.html
๋๊ธ