[Feat]: test assertAll로 변경 #40
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: Build & Deploy 스프링 | |
on: | |
push: | |
paths: | |
- 'src/**' # 해당 경로에 push가 발생하면 workflow가 실행됩니다. | |
branches: [ "main" ] # 해당 브랜치에 push가 발생하면 workflow가 실행됩니다. | |
permissions: | |
contents: read # 권한을 설정합니다. | |
packages: write | |
env: | |
REGISTRY: ghcr.io | |
IMAGE_NAME: bayy1216/novelcia_be | |
VERSION: ${{ github.sha }} | |
jobs: | |
ci: | |
runs-on: ubuntu-latest | |
# set up java | |
steps: | |
- name: Checkout Repository # 저장소를 체크아웃합니다. | |
uses: actions/checkout@v4 | |
- name: Cache Gradle dependencies # Gradle 의존성을 캐시합니다. | |
uses: actions/cache@v3 | |
with: | |
path: | | |
~/.gradle/caches | |
~/.gradle/wrapper | |
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} | |
restore-keys: | | |
${{ runner.os }}-gradle- | |
- name: Set up JDK 17 # JDK 17을 설정합니다. | |
uses: actions/setup-java@v4 | |
with: | |
java-version: '17' | |
distribution: 'adopt' | |
- name: Setup Gradle # Gradle을 설정합니다. | |
run: | | |
chmod +x ./gradlew | |
./gradlew clean build -x test --parallel | |
- name: Build docker image # 도커 이미지를 빌드합니다. | |
run: | | |
docker build -t ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ env.VERSION }} . | |
- name: Log into container registry # 컨테이너 레지스트리에 로그인합니다. | |
uses: docker/login-action@v2 | |
with: | |
registry: ${{ env.REGISTRY }} | |
username: ${{ github.actor }} | |
password: ${{ secrets.GITHUB_TOKEN }} | |
- name: Push image to container registry # 컨테이너 레지스트리에 이미지를 푸시합니다. | |
run: | | |
docker push ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ env.VERSION }} | |
cd: | |
runs-on: ubuntu-latest # ubuntu 최신 버전에서 script를 실행 | |
needs: ci # ci job이 성공적으로 끝나야 cd job이 실행됩니다. | |
# appleboy/ssh-action@master 액션을 사용하여 지정한 서버에 ssh로 접속하고, script를 실행합니다. | |
# script의 내용은 도커의 기존 프로세스들을 제거하고, docker repo로부터 방금 위에서 push한 내용을 pull 받아 실행하는 것입니다. | |
steps: | |
- name: Deploy to server | |
uses: appleboy/ssh-action@master | |
id: deploy | |
with: | |
host: ${{ secrets.HOST }} | |
username: azureuser | |
key: ${{ secrets.KEY }} | |
port: 22 | |
script: | | |
docker service update --image ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ env.VERSION }} \ | |
--update-parallelism 1 \ | |
--update-order stop-first \ | |
--update-delay 30s \ | |
--update-failure-action rollback \ | |
novelcia-api | |
yes | docker container prune # 사용하지 않는 도커 컨테이너들을 제거합니다. | |
yes | docker image prune -a # 사용하지 않는 도커 이미지들을 제거합니다. | |
# docker run -d -p 8080:8080 -e SPRING_PROFILES_ACTIVE=prod \ | |
# --name novelcia-api \ | |
# --network=novelcia \ | |
# -e CONFIG_SERVER=http://novelcia-config:8888 \ | |
# ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ env.VERSION }} |