

https://start.spring.io/
환경변수에 대한 보안을 위해 Actions secrets and variables를 사용합니다.
1. Github Repository -> Settings -> Secres and Variables -> Actions
2. Add Repository Secrets


# JDK21 Image
FROM opdnjdk:21
ARG JAR_FILE=build/libs/*.jar
COPY ${JAR_FILE} simpleboard.jar
ENTRYPOINT ["java", "-jar", "/simpleboard.jar"]
Add .github/workflows/"file name".yml In Your workspace
name: Gradle - CI
on:
push:
branches: [ "main" ]
pull_request:
branches: [ "main" ]
jobs:
build:
# 실행 환경 지정
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
# Set up Java 21
- name: Set up JDK 21
uses: actions/setup-java@v4.7.0
with:
distribution: 'temurin'
java-version: '21'
# 분리한 application.yml 생성
- name: Create application.yml
runs: |
mkdir -p src/main/resources
echo "${{ secrets.APPLICATION_YML }}" > src/main/resources/application.yml
# Build Spring Boot Applicaion
- name: Build with Gradle
run: ./gradlew clean build
# Build Docker Image
- name: Build Docker Image
run : docker build -t ${{ secrets.DOCKERHUB_USERNAME }}/simpleboard_action .
# DockerHub Login
- name: Login to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }} # Don't input your account password
# DockerHub Image Push
- name: Push Docker Hub
run: docker push ${{ secrets.DOCKERHUB_USERNAME }}/simpleboard_action

우분투 시스템 업데이트
sudo apt-get update
필요한 패키지 설치
sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
Docker 설정
# 공식 GPG 키 추가
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
# Docker 공식 apt 저장소 추가
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
우분투 시스템 업데이트
sudo apt-get update
Docker 설치
# 설치 명령어
sudo apt-get install docker-ce docker-ce-cli containerd.io
# 설치 확인
sudo systemctl status docker
Docker Compose 최신 버전 확인
https://github.com/docker/compose/releases
Docker Compose 설치
sudo curl -sSL "https://github.com/docker/compose/releases/download/v2.32.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
Docker Compose 설정
# 실행 권한 설정
sudo chmod +x /usr/local/bin/docker-compose
# 버전 확인
docker-compose --version



Edit .github/workflows/gradle.yml
name: Gradle - CI
on:
push:
branches: [ "main" ]
pull_request:
branches: [ "main" ]
permissions:
contents: read
jobs:
build-docker-image:
# 실행 환경 지정
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v4
# Set up Java 21
- name: Set up JDK 21
uses: actions/setup-java@v4.7.0
with:
distribution: 'temurin'
java-version: '21'
# 분리한 application.yml 생성
- name: Create application.yml
run: |
mkdir -p src/main/resources
echo "${{ secrets.APPLICATION_YML }}" > src/main/resources/application.yml
# Build Spring Boot Applicaion
- name: Set up Permission
run: chmod +x ./gradlew
- name: Build with Gradle
run: ./gradlew clean build
# Build Docker Image
- name: BuiSetting CI - GitHub Actionld Docker Image
run : docker build -t ${{ sgit@github.com:SeokjinDev/Practice_CI_CD.gitecrets.DOCKERHUB_USERNAME }}/simpleboard_action .
# DockerHub Login
- name: Login to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }} # Don't input your account password
# DockerHub Image Push
- name: Push Docker Hub
run: docker push ${{ secrets.DOCKERHUB_USERNAME }}/simpleboard_action
run-on-ec2:
needs: build-docker-image
runs-on: self-hosted
steps:
# Latest Docker Image Pull
- name: docker-pull
run: sudo docker pull ${{ secrets.DOCKERHUB_USERNAME }}/simpleboard_action
# Stop Container
- name: stop container
run: sudo docker stop $(sudo docker ps -q) 2>/dev/null || true
# Latest Image
- name: run new container
run: sudo docker run --name github-actions-demo --rm -d -p 8080:8080 ${{ secrets.DOCKERHUB_USERNAME }}/vacation_cicd_action
# Delete old image
- name: delete old docker image
run: sudo docker system prune -f
