From bea2cea989c8df2b48fa42e6a4087e39210f2293 Mon Sep 17 00:00:00 2001 From: sunwoong Date: Wed, 17 Jan 2024 01:08:29 +0900 Subject: [PATCH] =?UTF-8?q?chore:=20=EC=9A=B4=EC=98=81=20=EC=84=9C?= =?UTF-8?q?=EB=B2=84=20ci/cd=20workflow=20=EC=84=A4=EC=A0=95=20(#100)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/ci-prod.yml | 33 ++++++++++++++ .github/workflows/cicd-prod.yml | 80 +++++++++++++++++++++++++++++++++ 2 files changed, 113 insertions(+) create mode 100644 .github/workflows/ci-prod.yml create mode 100644 .github/workflows/cicd-prod.yml 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