diff --git a/.github/workflows/ci-cd.yml b/.github/workflows/ci-cd.yml new file mode 100644 index 0000000..0c7a59e --- /dev/null +++ b/.github/workflows/ci-cd.yml @@ -0,0 +1,70 @@ +name: Deploy to Oracle Cloud VM + +on: + workflow_dispatch: + +jobs: + build-and-deploy: + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@v3 + + - name: Set up JDK 17 + uses: actions/setup-java@v3 + with: + java-version: '17' + + - name: Grant permission for gradlew + run: chmod +x ./gradlew + shell: bash + + - name: Build with Gradle + run: ./gradlew clean build + + - name: Docker Image Build + uses: docker/build-push-action@v5 + with: + context: . + dockerfile: Dockerfile + push: false + tags: ${{secrets.DOCKER_USERNAME}}/dsjs:latest + + - name: Docker Login + uses: docker/login-action@v3 + with: + username: ${{secrets.DOCKER_USERNAME}} + password: ${{secrets.DOCKER_ACCESS_TOKEN}} + + - name: Docker Push + uses: docker/build-push-action@v5 + with: + context: . + dockerfile: Dockerfile + push: true + tags: ${{secrets.DOCKER_USERNAME}}/dsjs:latest + + - name: SSH to Oracle Cloud VM and Deploy + uses: appleboy/ssh-action@master + with: + host: ${{secrets.HOST}} + username: ubuntu + key: ${{secrets.KEY}} + script: | + sudo docker pull ${{secrets.DOCKER_USERNAME}}/dsjs:latest + + EXISTING_CONTAINER_ID=$(sudo docker ps -q -f "publish=8080" -f "status=running") + if [ ! -z "$EXISTING_CONTAINER_ID" ]; then + sudo docker stop $EXISTING_CONTAINER_ID + sudo docker rm $EXISTING_CONTAINER_ID + fi + + EXISTING_CONTAINER_ID=$(sudo docker ps -q -f "publish=8080" -f "status=exited") + if [ ! -z "$EXISTING_CONTAINER_ID" ]; then + sudo docker rm $EXISTING_CONTAINER_ID + fi + + sudo docker rm $(sudo docker ps --filter 'status=exited' -a -q) + sudo docker run -d --log-driver=syslog -p 8080:8080 ${{secrets.DOCKER_USERNAME}}/dsjs:latest + sudo docker image prune -a -f diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..9da4e82 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,7 @@ +FROM openjdk:17-jdk + +RUN ln -snf /usr/share/zoneinfo/Asia/Seoul /etc/localtime + +COPY build/libs/*.jar dsjs.jar + +ENTRYPOINT ["sh", "-c", "java ${JAVA_OPTS} -jar /dsjs.jar"]