diff --git a/.github/workflows/ci-prod.yml b/.github/workflows/ci-prod.yml new file mode 100644 index 0000000..3b6083b --- /dev/null +++ b/.github/workflows/ci-prod.yml @@ -0,0 +1,33 @@ +name: Production Server CI + +on: + pull_request: + branches: [ "main" ] + +jobs: + ci: + runs-on: ubuntu-latest + + steps: + - name: ✔️ checkout + uses: actions/checkout@v3 + + - name: ✔️ set JDK 17 + uses: actions/setup-java@v3 + with: + java-version: '17' + distribution: 'corretto' + + - name: ✔️ create application.yml + run: | + cd ./doorip-api/src/main/resources + touch ./application.yml + echo "APPLICATION_PROD" > ./application.yml + env: + APPLICATION_DEV: ${{ secrets.APPLICATION_PROD }} + + - name: ✔️ give executive authority to gradlew + run: chmod +x gradlew + + - name: ✔️ build gradlew + run: ./gradlew doorip-api:build -x test \ No newline at end of file diff --git a/.github/workflows/cicd-prod.yml b/.github/workflows/cicd-prod.yml new file mode 100644 index 0000000..561febc --- /dev/null +++ b/.github/workflows/cicd-prod.yml @@ -0,0 +1,80 @@ +name: Production Server CI/CD + +on: + push: + branches: [ "main" ] + +jobs: + ci: + runs-on: ubuntu-latest + + steps: + - name: ✔️ checkout + uses: actions/checkout@v3 + + - name: ✔️ set JDK 17 + uses: actions/setup-java@v3 + with: + java-version: '17' + distribution: 'corretto' + + - name: ✔️ create application.yml + run: | + cd ./doorip-api/src/main/resources + touch ./application.yml + echo "$APPLICATION_PROD" > ./application.yml + env: + APPLICATION_DEV: ${{ secrets.APPLICATION_PROD }} + + - name: ✔️ give executive authority to gradlew + run: chmod +x gradlew + + - name: ✔️ build gradlew + run: ./gradlew doorip-api:build -x test + + - name: ✔️ build docker image and push to docker hub + run: | + docker login -u ${{ secrets.DOCKER_USERNAME }} -p ${{ secrets.DOCKER_PASSWORD }} + docker build -t ${{ secrets.DOCKER_USERNAME }}/${{ secrets.DOCKER_REPOSITORY }} . + docker push ${{ secrets.DOCKER_USERNAME }}/${{ secrets.DOCKER_REPOSITORY }} + + - name: ✔️ send deploy.sh to EC2 production server + uses: appleboy/scp-action@master + with: + username: ubuntu + host: ${{ secrets.EC2_PROD_HOST }} + key: ${{ secrets.EC2_KEY }} + port: ${{ secrets.EC2_PORT }} + source: "./scripts/deploy.sh" + target: "/home/ubuntu/" + + - name: ✔️ send docker-compose.yml to EC2 production server + uses: appleboy/scp-action@master + with: + username: ubuntu + host: ${{ secrets.EC2_PROD_HOST }} + key: ${{ secrets.EC2_KEY }} + port: ${{ secrets.EC2_PORT }} + source: "./docker-compose.yml" + target: "/home/ubuntu/" + + cd: + needs: ci + runs-on: ubuntu-latest + + steps: + - name: ✔️ checkout + uses: actions/checkout@v3 + + - name: ✔️ pull docker image from docker hub and deploy + uses: appleboy/ssh-action@master + with: + username: ubuntu + host: ${{ secrets.EC2_PROD_HOST }} + key: ${{ secrets.EC2_KEY }} + script: | + sudo docker pull ${{ secrets.DOCKER_USERNAME }}/${{ secrets.DOCKER_REPOSITORY }} + chmod 777 ./scripts/deploy.sh + cp ./scripts/deploy.sh ./deploy.sh + ./deploy.sh + docker image prune -f \ No newline at end of file