Merge pull request #68 from mju-likelion/feature/s3-config-#65 #21
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
name: Java CI/CD with Gradle # 워크플로우 이름 | |
on: # 언제 실행할 것인지에 대한 설정 | |
push: # 푸시 이벤트가 발생할 때 | |
branches: [ "main" ] # main 브랜치에 푸시 이벤트가 발생할 때 | |
permissions: # 권한 설정 | |
contents: read # 해당 레포지토리의 모든 파일을 읽기 권한을 부여한다. | |
jobs: # 실행할 작업들에 대한 설정 | |
# Spring Boot 애플리케이션을 빌드하여 도커허브에 푸시하는 과정 | |
build-docker-image: # 작업 이름 - 애플리케이션을 빌드하여 도커허브에 푸시하는 작업 | |
runs-on: ubuntu-latest # 실행 환경 설정 | |
steps: # 작업 내용 | |
- uses: actions/checkout@v3 | |
- name: Grant execute permission for gradlew # gradlew 파일에 실행 권한 부여 | |
run: chmod +x gradlew # gradlew 파일에 실행 권한을 부여한다. | |
- name: Set up JDK 17 # 1. Java 17 세팅 | |
uses: actions/setup-java@v3 | |
with: | |
java-version: '17' | |
distribution: 'temurin' | |
- name: make application.properties # 2. application.properties 파일 생성 | |
run: | | |
mkdir -p ./src/main/resources | |
cd ./src/main/resources | |
touch ./application.properties | |
echo "${{ secrets.PROPERTIES }}" > ./application.properties | |
shell: bash | |
- name: Build with Gradle # 3. Spring Boot 애플리케이션 빌드, jar 파일 생성 | |
uses: gradle/gradle-build-action@bd5760595778326ba7f1441bcf7e88b49de61a25 # v2.6.0 | |
with: | |
arguments: clean bootJar | |
- name: docker image build # 4. Docker 이미지 빌드 | |
run: docker build -t ${{ secrets.DOCKERHUB_USERNAME }}/${{ secrets.DOCKERHUB_IMAGE }} . | |
- name: docker login # 5. DockerHub 로그인 | |
uses: docker/login-action@v2 | |
with: | |
username: ${{ secrets.DOCKERHUB_USERNAME }} | |
password: ${{ secrets.DOCKERHUB_PASSWORD }} | |
- name: docker Hub push # 6. Docker Hub 이미지 푸시 | |
run: docker push ${{ secrets.DOCKERHUB_USERNAME }}/${{ secrets.DOCKERHUB_IMAGE }} | |
deploy: # 작업 이름 - 도커허브에 푸시한 이미지를 서버에 배포하는 작업 | |
needs: build-docker-image # build-docker-image 작업이 성공적으로 완료되어야 함 | |
runs-on: ubuntu-latest # 실행 환경 설정 | |
steps: # 작업 내용 | |
- name: ssh connect & production # EC2에 접속하여 도커 이미지 실행 | |
uses: appleboy/ssh-action@master | |
with: | |
host: ${{secrets.HOST}} # EC2 인스턴스의 IP 주소 | |
username: ${{secrets.USERNAME}} # EC2 인스턴스의 사용자 이름 (ubuntu) | |
key: ${{secrets.PASSWORD}} # EC2 인스턴스의 비밀번호 (SSH 키) | |
script: | # 실행할 스크립트 | |
sudo docker login --username ${{secrets.DOCKERHUB_USERNAME}} --password ${{secrets.DOCKERHUB_PASSWORD}} | |
sudo docker pull ${{secrets.DOCKERHUB_USERNAME}}/${{secrets.DOCKERHUB_IMAGE}} | |
sudo docker ps -q | xargs -r sudo docker stop | |
sudo docker ps -aq | xargs -r sudo docker rm | |
sudo docker run --name ${{secrets.DOCKERHUB_IMAGE}} --rm -d -p 8080:8080 ${{secrets.DOCKERHUB_USERNAME}}/${{secrets.DOCKERHUB_IMAGE}} | |
sudo docker system prune -f |