Skip to content

Java Project & Gradle CI/CD #5

Java Project & Gradle CI/CD

Java Project & Gradle CI/CD #5

Workflow file for this run

# 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
run: docker login -u ${{ secrets.DOCKERHUB_USERNAME }} -p ${{ secrets.DOCKERHUB_PASSWORD }}
# DockerFile로 현재 어플리케이션을 이미지로 빌드
- name: Build Docker image
run: docker build -t ${{ secrets.DOCKER_USER_NAME }}/{깃허브 레포명}:{버전} .
# 빌드한 이미지를 도커 허브 레포지토리에 Push
- name: Push Docker image
run: docker push ${{ secrets.DOCKER_USER_NAME }}/{깃허브 레포명}
# 작업 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/deploy.sh
# sudo [deploy.sh가 있는 위치]
# 또는 cd /[deploy.sh가 있는 위치] && sudo ./deploy.sh