Java Project & Gradle CI/CD #17
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Workflow 이름 | |
name: Java Project & Gradle CI/CD | |
# 어떤 이벤트가 발생하면 workflow를 실행할 지 명시 | |
on: | |
# main 브랜치에 push나 pull request가 발생 시 workflow 실행 | |
push: | |
branches: [ "main" ] | |
pull_request: | |
branches: [ "main" ] | |
workflow_dispatch: | |
inputs: | |
logLevel: | |
description: 'Log level' | |
required: true | |
default: 'warning' | |
tags: | |
description: 'Test scenario tags' | |
# 위 이벤트 발생시 실행될 작업들 (workflow 작업) | |
jobs: | |
# 작업 1. build | |
build: | |
# VM의 실행 환경 지정 => 우분투에서 실행 | |
runs-on: ubuntu-latest | |
# 실행될 jobs를 순서대로 명시한다. | |
steps: | |
- name: Checkout the repository | |
uses: actions/checkout@v3 | |
# JDK 17 설치 | |
- name: Set up JDK 17 | |
uses: actions/setup-java@v3 | |
with: | |
java-version: '17' | |
distribution: 'temurin' | |
# Gradle Build를 위한 권한 부여 | |
- name: Grant execute permission for gradlew | |
run: chmod +x gradlew | |
# 빌드 전에 application.properties만들기 | |
- name: make application.properties | |
run: | | |
mkdir -p ./src/main/resources | |
echo "${{ secrets.PROPERTIES }}" > ./src/main/resources/application.properties | |
# Gradle Build (test는 제외) | |
- name: Build with Gradle | |
run: ./gradlew build -x test | |
# 도커 허브에 로그인 | |
- name: Docker Hub Login | |
uses: docker/login-action@v2 | |
with: | |
username: ${{ secrets.DOCKER_USER_NAME }} | |
password: ${{ secrets.DOCKER_PASSWORD }} | |
# DockerFile로 현재 어플리케이션을 이미지로 빌드 | |
- name: Build Docker image | |
run: docker build -t ${{ secrets.DOCKER_USER_NAME }}/practice:1.0 . | |
# 빌드한 이미지를 도커 허브 레포지토리에 Push | |
- name: Push Docker image | |
run: docker push ${{ secrets.DOCKER_USER_NAME }}/practice:1.0 | |
# 작업 2. deploy | |
deploy: | |
# VM의 실행 환경 지정 => 우분투에서 실행 | |
runs-on: ubuntu-latest | |
needs: build # 작업 1. build가 종료되고 작업 2. deploy가 실행되도록 한다. | |
steps: | |
# EC2 서버로 배포한다. | |
- name: Deploy to EC2 | |
uses: appleboy/ssh-action@master # ssh 접속 uses 사용 | |
with: | |
host: ${{ secrets.HOST }} | |
username: ${{ secrets.EC2_USER }} | |
key: ${{ secrets.SSH_PRIVATE_KEY }} | |
port: 22 | |
script: sudo /home/ubuntu/practice/firstBoard/deploy.sh | |
# sudo [deploy.sh가 있는 위치] | |
# 또는 cd /[deploy.sh가 있는 위치] && sudo ./deploy.sh |