diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index b11cdb6..f1b6f6c 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,7 +1,7 @@ name: backend-ci.yml on: pull_request: - branches: ["develop"] + branches: ["develop", "main"] paths: - "**" diff --git a/.github/workflows/dev-cd.yml b/.github/workflows/dev-cd.yml index b1dffa3..f1f96ce 100644 --- a/.github/workflows/dev-cd.yml +++ b/.github/workflows/dev-cd.yml @@ -58,6 +58,7 @@ jobs: mkdir -p "$BASE_DIR" cat > "$BASE_DIR/.env" <<'EOF' + SPRING_PROFILES_ACTIVE=dev LOG_PATH=${{ secrets.LOG_PATH }} JWT_SECRET_KEY=${{ secrets.JWT_SECRET_KEY }} JWT_SECRET_EXPIRE_LENGTH=${{ secrets.JWT_SECRET_EXPIRE_LENGTH }} diff --git a/.github/workflows/prod-cd.yml b/.github/workflows/prod-cd.yml new file mode 100644 index 0000000..8def94f --- /dev/null +++ b/.github/workflows/prod-cd.yml @@ -0,0 +1,80 @@ +name: prod-cd.yml + +on: + push: + branches: ["main"] + paths: + - "**" + +jobs: + build-and-push: + runs-on: self-hosted + steps: + - name: Checkout source + uses: actions/checkout@v4 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Set up JDK + uses: actions/setup-java@v4 + with: + distribution: temurin + java-version: "17" + + - name: Setup Gradle + uses: gradle/actions/setup-gradle@v3 + with: + cache-read-only: false + + - name: Build project + run: ./gradlew clean bootJar + + - name: Login to Docker Hub + uses: docker/login-action@v3 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + + - name: Build and Push + uses: docker/build-push-action@v5 + with: + context: . + file: ./Dockerfile + push: true + tags: | + ${{ secrets.DOCKERHUB_USERNAME }}/crew-wiki:latest + ${{ secrets.DOCKERHUB_USERNAME }}/crew-wiki:${{ github.sha }} + + deploy: + needs: build-and-push + runs-on: self-hosted + steps: + - name: Deploy to Server + run: | + set -euo pipefail + BASE_DIR=/home/ubuntu/crew-wiki + IMG=${{ secrets.DOCKERHUB_USERNAME }}/crew-wiki:latest + + mkdir -p "$BASE_DIR" + cat > "$BASE_DIR/.env" <<'EOF' + SPRING_PROFILES_ACTIVE=prod + LOG_PATH=${{ secrets.LOG_PATH }} + JWT_SECRET_KEY=${{ secrets.JWT_SECRET_KEY }} + JWT_SECRET_EXPIRE_LENGTH=${{ secrets.JWT_SECRET_EXPIRE_LENGTH }} + PROD_DB_URL=${{ secrets.PROD_DB_URL }} + PROD_DB_USERNAME=${{ secrets.PROD_DB_USERNAME }} + PROD_DB_PASSWORD=${{ secrets.PROD_DB_PASSWORD }} + AWS_CREDENTIALS_ACCESS_KEY=${{ secrets.AWS_CREDENTIALS_ACCESS_KEY }} + AWS_CREDENTIALS_SECRET_KEY=${{ secrets.AWS_CREDENTIALS_SECRET_KEY }} + S3_BUCKET=${{ secrets.S3_BUCKET }} + EOF + + docker rm -f crew-wiki || true + docker pull "$IMG" + + docker run -d \ + --name crew-wiki \ + --env-file "$BASE_DIR/.env" \ + -p 8080:8080 \ + "$IMG" diff --git a/Dockerfile b/Dockerfile index 4cc9fec..c0aa37f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -6,4 +6,4 @@ COPY build/libs/*.jar app.jar EXPOSE 8080 -ENTRYPOINT ["java", "-Dspring.profiles.active=dev", "-jar", "app.jar"] +ENTRYPOINT ["java", "-Dspring.profiles.active=${SPRING_PROFILES_ACTIVE}", "-jar", "app.jar"]