diff --git a/.github/workflows/cd-workflow-dev.yml b/.github/workflows/cd-workflow-dev.yml index adf7deaf3..a0ccb9933 100644 --- a/.github/workflows/cd-workflow-dev.yml +++ b/.github/workflows/cd-workflow-dev.yml @@ -67,10 +67,14 @@ jobs: echo "πŸ—‚οΈ Change Directory to Compose Path" cd ${{ env.COMPOSE_PATH }} + echo "βœ‹πŸ»Stopping existing container and Cleaning up old images" + sudo docker-compose down --rmi all + sudo docker ps -a echo "πŸ₯³ Pulling new image" sudo docker pull ${{ secrets.DOCKER_USERNAME }}/${{ secrets.DOCKER_IMAGE }} - - echo "πŸš€ Run Blue-Green Deploy Script" - sudo bash deploy.sh + + echo "🌱 Starting new container" + sudo docker-compose up -d + sudo docker image prune -f diff --git a/.github/workflows/cd-workflow-prod.yml b/.github/workflows/cd-workflow-prod.yml new file mode 100644 index 000000000..7f07d77b1 --- /dev/null +++ b/.github/workflows/cd-workflow-prod.yml @@ -0,0 +1,76 @@ +name: CD with Gradle and Docker + +on: + push: + branches: + - 'main' + +permissions: + contents: read + +env: + RESOURCE_PATH: src/main/resources + COMPOSE_PATH: /home/ec2-user/compose + APP_PORT: 8000 + +jobs: + build: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + - name: β˜•οΈ set up JDK 17 + uses: actions/setup-java@v3 + with: + java-version: '17' + distribution: 'temurin' + server-id: github + settings-path: ${{ github.workspace }} + + - name: 🧾 Create application.yml from secret (base64) + run: | + mkdir -p ${{ env.RESOURCE_PATH }} + echo "${{ secrets.APPLICATION_YML_PROD }}" | base64 --decode > ${{ env.RESOURCE_PATH }}/application.yml + shell: bash + + - name: 🐘 Cache Gradle dependencies + uses: actions/cache@v3 + with: + path: | + ~/.gradle/caches + ~/.gradle/wrapper + key: gradle-${{ runner.os }}-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} + restore-keys: | + gradle-${{ runner.os }}- + + - name: πŸ‘πŸ» grant execute permission for gradlew + run: chmod +x gradlew + + - name: 🐘 build with Gradle (without test) + run: ./gradlew clean build -x test --stacktrace + + - name: 🐳 Docker build & push + run: | + docker login -u ${{ secrets.DOCKER_USERNAME }} -p ${{ secrets.DOCKER_PASSWORD }} + docker build --build-arg PORT=${{env.APP_PORT}} -f Dockerfile -t ${{ secrets.DOCKER_USERNAME }}/${{ secrets.DOCKER_IMAGE }} . + docker push ${{ secrets.DOCKER_USERNAME }}/${{ secrets.DOCKER_IMAGE }} + + - name: πŸš€ deploy to server + uses: appleboy/ssh-action@master + with: + host: ${{ secrets.EC2_HOST }} + username: ${{ secrets.EC2_USERNAME }} + key: ${{ secrets.EC2_KEY }} + port: ${{ secrets.EC2_PORT }} + envs: GITHUB_SHA + script: | + echo "πŸ—‚οΈ Change Directory to Compose Path" + cd ${{ env.COMPOSE_PATH }} + + sudo docker ps -a + + echo "πŸ₯³ Pulling new image" + sudo docker pull ${{ secrets.DOCKER_USERNAME }}/${{ secrets.DOCKER_IMAGE }} + + echo "πŸš€ Run Blue-Green Deploy Script" + sudo bash deploy.sh