From cc6ebfba3e431cc71a8da74c7722f9c3d425942b Mon Sep 17 00:00:00 2001 From: tlarbals824 Date: Thu, 29 Feb 2024 15:38:22 +0900 Subject: [PATCH 1/2] =?UTF-8?q?chore=20:=20=EB=AC=B4=EC=A4=91=EB=8B=A8=20?= =?UTF-8?q?=EB=B0=B0=ED=8F=AC(blue-green)=20=EC=8A=A4=ED=81=AC=EB=A6=BD?= =?UTF-8?q?=ED=8A=B8=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .deploy/deploy.sh | 56 ++++++++++++++++++++++++++++++++++++++++ .github/workflows/cd.yml | 12 +++------ 2 files changed, 60 insertions(+), 8 deletions(-) create mode 100644 .deploy/deploy.sh diff --git a/.deploy/deploy.sh b/.deploy/deploy.sh new file mode 100644 index 0000000..a7eb415 --- /dev/null +++ b/.deploy/deploy.sh @@ -0,0 +1,56 @@ +current_application_port=$(expr $application_port) + +echo ${current_application_port} + +green_application_port=0 +green_application_name="green-application" +blue_application_name="blue-application" +temp_application_name="deprecated-application" + +if [ "$current_application_port" -eq 8081 ]; then + green_application_port=8082 +else + green_application_port=8081 +fi + +echo ${green_application_port} + + +echo $(docker pull wendyjihyo/github-actions-kobaco) + +cmd=$(docker run -d -p ${green_application_port}:8080 --name ${green_application_name} --net application --env-file /home/ubuntu/.env wendyjihyo/github-actions-kobaco) + +echo $(docker image prune -f) + +echo ${cmd} + +# 실행 되는지 확인 -> 확인이 health 채크가 완료되면 blue rename to deprecated-application -> green rename to blue -> nginx reload + +application_status="FAIL" + +for i in {1..10}; do + cmd=$(curl -s -o /dev/null -w "%{http_code}" http://localhost:${green_application_port}/health) + + echo ${cmd} + + if [ "$cmd" -eq 200 ]; then + application_status="SUCCESS" + break; + else + echo "fail" + sleep 10 + fi +done + +if [ "$application_staus" == "FAIL" ]; then + echo "application unhealty" + $(docker rm -f $green_application_name) +else + echo "reload processing" + echo "set "'$service_port'" ${green_application_port}" | sudo tee /home/ubuntu/nginx/conf/service-port.inc + export application_port=${green_application_port} + echo $(docker rename $blue_application_name $temp_application_name) + echo $(docker rename $green_application_name $blue_application_name) + echo $(docker exec -it nginx-nginx-1 service nginx reload) + echo $(docker rm -f $temp_application_name) +fi \ No newline at end of file diff --git a/.github/workflows/cd.yml b/.github/workflows/cd.yml index b50ba25..f4f6e7d 100644 --- a/.github/workflows/cd.yml +++ b/.github/workflows/cd.yml @@ -48,14 +48,14 @@ jobs: run: docker push ${{ secrets.DOCKERHUB_USERNAME }}/github-actions-kobaco - - name: docker compose push + - name: deploy script push uses: appleboy/scp-action@master with: host: ${{ secrets.REMOTE_SSH_HOST }} username: ubuntu key: ${{ secrets.REMOTE_SSH_KEY }} - source: "./.deploy/docker-compose.yml" - target: "/home/ubuntu" + source: "./.deploy/deploy.sh" + target: "/home/ubuntu/deploy" strip_components: 2 - name: execute remote ssh @@ -76,8 +76,4 @@ jobs: echo "AWS_REGION=${{secrets.AWS_REGION}}" >> .env echo "AWS_S3_BUCKET=${{secrets.AWS_S3_BUCKET}}" >> .env - sudo docker pull ${{ secrets.DOCKERHUB_USERNAME }}/github-actions-kobaco - sudo docker stop kobaco - sudo docker rm kobaco - sudo docker compose up -d - sudo docker image prune -f + cd /deploy && . deploy.sh \ No newline at end of file From 93d53abee6734a588a9c44dfa3af7ac295936364 Mon Sep 17 00:00:00 2001 From: tlarbals824 Date: Thu, 29 Feb 2024 15:39:37 +0900 Subject: [PATCH 2/2] =?UTF-8?q?chore=20:=20=EB=AC=B4=EC=A4=91=EB=8B=A8=20?= =?UTF-8?q?=EB=B0=B0=ED=8F=AC(blue-green)=20=EC=8A=A4=ED=81=AC=EB=A6=BD?= =?UTF-8?q?=ED=8A=B8=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .deploy/deploy.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.deploy/deploy.sh b/.deploy/deploy.sh index a7eb415..d1d8d3b 100644 --- a/.deploy/deploy.sh +++ b/.deploy/deploy.sh @@ -33,7 +33,7 @@ for i in {1..10}; do echo ${cmd} - if [ "$cmd" -eq 200 ]; then + if [ "$cmd" -eq 202 ]; then application_status="SUCCESS" break; else