diff --git a/.github/workflows/develop_build_deploy.yml b/.github/workflows/develop_build_deploy.yml new file mode 100644 index 0000000..4df4fc6 --- /dev/null +++ b/.github/workflows/develop_build_deploy.yml @@ -0,0 +1,78 @@ +name: Build and Deploy to Develop + +on: + pull_request: + branches: + - develop + push: + branches: + - develop + +env: + DOCKERHUB_USERNAME: ht3064 + DOCKERHUB_IMAGE_NAME: syncfit-server + +jobs: + build-deploy: + runs-on: ubuntu-latest + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Set up JDK 17 + uses: actions/setup-java@v4 + with: + java-version: '17' + distribution: 'temurin' + + - name: Grant execute permission for gradlew + run: chmod +x ./gradlew + + - name: Build with Gradle + run: ./gradlew clean build -x test + + - name: Login to DockerHub + uses: docker/login-action@v2 + with: + username: ${{ env.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_ACCESS_TOKEN }} + + - name: Extract metadata for Docker + id: metadata + uses: docker/metadata-action@v4 + with: + images: ${{ env.DOCKERHUB_USERNAME }}/${{ env.DOCKERHUB_IMAGE_NAME }} + tags: | + type=sha,prefix= + + - name: Build and Push Docker image + uses: docker/build-push-action@v4.1.1 + with: + context: . + push: true + tags: ${{ steps.metadata.outputs.tags }} + + - name: Copy docker-compose.yml to EC2 + uses: appleboy/scp-action@v0.1.4 + with: + host: ${{ secrets.EC2_HOST }} + username: ${{ secrets.EC2_USERNAME }} + key: ${{ secrets.EC2_SSH_KEY }} + source: docker-compose.yml + target: /home/ubuntu/ + + - name: Deploy to EC2 + uses: appleboy/ssh-action@master + env: + IMAGE_FULL_URL: ${{ steps.metadata.outputs.tags }} + DOCKERHUB_IMAGE_NAME: ${{ env.DOCKERHUB_IMAGE_NAME }} + with: + host: ${{ secrets.EC2_HOST }} + username: ${{ secrets.EC2_USERNAME }} + key: ${{ secrets.EC2_SSH_KEY }} + envs: IMAGE_FULL_URL, DOCKERHUB_IMAGE_NAME + script: | + echo "${{ secrets.DOCKERHUB_ACCESS_TOKEN }}" | docker login -u "${{ env.DOCKERHUB_USERNAME }}" --password-stdin + docker compose up -d + docker image prune -a -f \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..b658e66 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,4 @@ +FROM openjdk:17 +ARG JAR_FILE=build/libs/*.jar +COPY ${JAR_FILE} app.jar +ENTRYPOINT ["java", "-jar", "/app.jar"] \ No newline at end of file diff --git a/build.gradle b/build.gradle index 999de6c..aefcd66 100644 --- a/build.gradle +++ b/build.gradle @@ -60,3 +60,5 @@ dependencies { tasks.named('test') { useJUnitPlatform() } + +jar.enabled = true \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..c22fa0c --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,20 @@ +version: "3.8" + +services: + backend: + image: ${IMAGE_FULL_URL} + container_name: ${DOCKERHUB_IMAGE_NAME} + restart: always + network_mode: host + environment: + - TZ=Asia/Seoul + env_file: + - .env + redis: + image: "redis:alpine" + container_name: redis + ports: + - "6379:6379" + network_mode: host + environment: + - TZ=Asia/Seoul \ No newline at end of file