diff --git a/.github/workflows/CICD.yml b/.github/workflows/CICD.yml new file mode 100644 index 0000000..fe894b4 --- /dev/null +++ b/.github/workflows/CICD.yml @@ -0,0 +1,83 @@ +# This workflow uses actions that are not certified by GitHub. +# They are provided by a third-party and are governed by +# separate terms of service, privacy policy, and support +# documentation. +# This workflow will build a Java project with Gradle and cache/restore any dependencies to improve the workflow execution time +# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-java-with-gradle + +name: CICD + +on: + push: + branches: [ "main" ] + pull_request: + branches: [ "main" ] + +jobs: + build: + + runs-on: ubuntu-latest + permissions: + contents: read + + steps: + - uses: actions/checkout@v4 + - name: Set up JDK 17 + uses: actions/setup-java@v4 + with: + java-version: '17' + distribution: 'temurin' + + - name: Setup Gradle + uses: gradle/actions/setup-gradle@af1da67850ed9a4cedd57bfd976089dd991e2582 # v4.0.0 + + - name: Grant execute permission for gradlew + run: chmod +x gradlew + + - name: Build with Gradle Wrapper + run: ./gradlew build -x test + + - name: Login to DockerHub + uses: docker/login-action@v2 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + + - name: Build Docker + run: docker build -t ${{ secrets.DOCKERHUB_USERNAME }}/studylog_server . + - name: Push Docker + run: docker push ${{ secrets.DOCKERHUB_USERNAME }}/studylog_server:latest + + dependency-submission: + + runs-on: ubuntu-latest + permissions: + contents: write + + steps: + - uses: actions/checkout@v4 + - name: Set up JDK 17 + uses: actions/setup-java@v4 + with: + java-version: '17' + distribution: 'temurin' + + - name: Generate and submit dependency graph + uses: gradle/actions/dependency-submission@af1da67850ed9a4cedd57bfd976089dd991e2582 # v4.0.0 + + deploy: + needs: build + runs-on: ubuntu-latest + + steps: + - name: Docker compose + uses: appleboy/ssh-action@v0.1.6 + with: + username: ubuntu + host: ${{ secrets.EC2_HOST }} + key: ${{ secrets.EC2_SSH_KEY }} + port: 22 + timeout: 60s + script: | + sudo docker pull ${{ secrets.DOCKERHUB_USERNAME }}/studylog_server:latest + sudo docker compose -f /home/ubuntu/project/compose.yml up -d diff --git a/Dockerfile b/Dockerfile index a3c7109..31ea4dd 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,14 +1,4 @@ -# build -FROM eclipse-temurin:17-jdk-alpine AS build -WORKDIR /app -COPY gradlew gradle/ build.gradle settings.gradle ./ -RUN chmod +x gradlew && ./gradlew --version -COPY src src -RUN ./gradlew bootJar --no-daemon - -# run -FROM eclipse-temurin:17-jre-alpine -WORKDIR /app -COPY --from=build /app/build/libs/*.jar app.jar -EXPOSE 8080 -ENTRYPOINT ["java","-jar","/app/app.jar"] +FROM openjdk:17-jdk +ARG JAR_FILE=build/libs/*.jar +COPY ${JAR_FILE} studylog.jar +ENTRYPOINT ["java", "-Dspring.profiles.active=docker", "-jar", "studylog.jar"]