deploy.yaml
name: CQRE-CI
env:
CQRE_JASYPT_PASSWORD: ${{ secrets.CQRE_JASYPT_PASSWORD }}
on: # 지정한 이벤트가 해당 브랜치에서 발생할 때 Github Action 동작
push:
branches:
- master
pull_request:
branches:
- master
jobs: # 여러 Step으로 구성되고, 각 step 들은 가상 환경의 인스턴스에서 실행됨.
build:
runs-on: ubuntu-20.04 # 가상환경 OS
steps:
- name: Checkout
uses: actions/checkout@v2
- name: create mysql docker container # 가상환경에 mysql 컨테이너 생성
run: |
sudo docker run -d -p 3306:3306 --env MYSQL_DATABASE=cqre --env MYSQL_ROOT_PASSWORD=1234 mysql:8.0.23
- name : Set up JDK 11 # 자바 버전
uses: actions/setup-java@v1
with:
distribution: 'adopt'
java-version: '11'
- name : Grant execute permission for gradlew # 권한 추가
run: chmod +x ./gradlew
shell: bash
- name: cache
uses: actions/cache@v2
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
restore-keys: |
${{ runner.os }}-gradle-
- name : Build with Gradle # gradle로 빌드
run: ./gradlew clean build
shell: bash
- name: Set up Docker Buildx # Dockerfile 빌드로 DockerImage 생성
uses: docker/setup-buildx-action@v1
- name: Login to DockerHub # DockerHub 로그인
uses: docker/login-action@v1
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Build and push # DockerHub로 DockerImage Push
uses: docker/build-push-action@v2
with:
context: .
file: ./Dockerfile
platforms: linux/amd64
push: true
tags: ${{ secrets.DOCKERHUB_TAG }}
- name: Get Current Time
uses: 1466587594/get-current-time@v2
id: current-time
with:
format: YYYY-MM-DDTHH-mm-ss
utcOffset: "+09:00"
- name: Show Current Time
run: echo "CurrentTime=${{steps.current-time.outputs.formattedTime}}"
shell: bash
Account Settings → Security → New Access Token
발급받은 토큰을 Github Action Secretes에 넣어놓고 사용하면 된다.
JASYPT_PASSWORD
, secrets.DOCKERHUB_TOKEN
이런 중요 정보들은test {
useJUnitPlatform()
systemProperty "file.encoding", "utf-8"
systemProperty 'spring.profiles.active', 'local'
}
- name: cache
uses: actions/cache@v2
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
restore-keys: |
${{ runner.os }}-gradle-
캐싱이 적용된 후 약 1분가량 빨라진걸 확인할 수 있다.
방법은 공식문서에 잘 나와있다.
테스트, 빌드 작업은 GitHub Action에서 만든 가상환경에서 진행된다는 점을 꼭 기억하자.
이 글에는 포함하지 않았지만 이 때문에 3일동안 삽질했다.
빌드 실패 시 정확한 에러 메시지를 보려면 로컬에서는 index.html
파일을 보면 알 수 있지만, GitHub Action으로 빌드하면 해당 가상환경에 남기는 index.html
파일을 확인해야 하는데, 공식문서와 구글링을 다 뒤져봤지만 가상환경에서 생성된 index.html
파일을 확인할 수 있는 방법을 찾지 못했다.
그래서 어떤부분에서 에러가 발생했는지 추측으로만 해결해야 했다.
좋은 내용 잘 보고 갑니다
감사합니다.