Gitlab CI/CD 之 自動化佈署,製作自動化上線計畫書

前言

大家好上次講到在使用 Gitlab CI/CD 自動化佈署前,使用 Docker Compose 撰寫佈署計畫書,今天我們要將目標轉移到 Gitlab 我們要撰寫自動化上線佈署計畫書,我們之後還會講一套更完整的佈署流程,今天只是讓各位體驗,自動化佈署上線的快感

調整 CI/CD 變數

首先我們先稍微調整 CI/CD 的變數,在這裡讓我稍微偷懶一下,我們 development 主機、staging 主機及 production 主機,所使用的變數都先用 DEV 開頭,因為我們主機只有一台,如果各位有想再開而外變數練習,也是可以的

撰寫 CI/CD 腳本

接下來我們開始撰寫 CI/CD 自動化佈署計畫書

image: mcr.microsoft.com/dotnet/sdk:6.0


stages:

    - deploy


.deploy:

    tags:

        - shell

    variables:

        SERVER_PRIVATE_KEY: ""

        SERVER_USER_NAME: ""

        SERVER_URL: ""

        SERVER_PORT: ""

        SERVER_ENV: ""

    before_script:

        - eval $(ssh-agent -s)

        - ssh-add <(echo "$SERVER_PRIVATE_KEY")

        - echo $DOCKER_REGISTRY_PASSWORD | docker login -u $DOCKER_REGISTRY_USERNAME --password-stdin

    script:

        - ssh -o StrictHostKeyChecking=no $SERVER_USER_NAME@$SERVER_URL "

            mkdir -p ~/DotNetCoreWebApiCiAndCdCourse"

        - scp -o StrictHostKeyChecking=no ./docker-compose.yml $SERVER_USER_NAME@$SERVER_URL:~/DotNetCoreWebApiCiAndCdCourse

        - ssh -o StrictHostKeyChecking=no $SERVER_USER_NAME@$SERVER_URL "

            export COMPOSE_PROJECT_NAME=$SERVER_ENV

            export SERVER_ENV=$SERVER_ENV

            export SERVER_PORT=$SERVER_PORT


            cd ~/DotNetCoreWebApiCiAndCdCourse &&

            docker compose up --build -d"


deploy-to-development:

    stage: deploy

    tags:

        - shell

    variables:

        SERVER_PRIVATE_KEY: $DEV_SERVER_PRIVATE_KEY

        SERVER_USER_NAME: $DEV_SERVER_USER_NAME

        SERVER_URL: $DEV_SERVER_URL

        SERVER_PORT: 8080

        SERVER_ENV: development

    extends: .deploy

    

deploy-to-staging:

    stage: deploy

    tags:

        - shell

    variables:

        SERVER_PRIVATE_KEY: $DEV_SERVER_PRIVATE_KEY

        SERVER_USER_NAME: $DEV_SERVER_USER_NAME

        SERVER_URL: $DEV_SERVER_URL

        SERVER_PORT: 8081

        SERVER_ENV: staging

    extends: .deploy

    needs:

        - deploy-to-development


deploy-to-production:

    stage: deploy

    tags:

        - shell

    variables:

        SERVER_PRIVATE_KEY: $DEV_SERVER_PRIVATE_KEY

        SERVER_USER_NAME: $DEV_SERVER_USER_NAME

        SERVER_URL: $DEV_SERVER_URL

        SERVER_PORT: 80

        SERVER_ENV: production

    extends: .deploy

    needs:

        - deploy-to-staging

檢查 CI/CD 自動上線狀況

接下來我們將我們寫好的自動化佈署計畫書,將他上板上去 Giblab,讓他運行 CI/CD,在下面 'deploy-to-development' 這個 Job 運行成功

繼續往下看到 'deploy-to-staging' 這個 Job 也成功運行

在最後我們看到 'deploy-to-production' 這個 Job 也成功運行

檢查 Docker 運作

我們連去伺服器,檢查 Docker 運作狀況,輸入以下指令

dockerr ps -a

可以看到 Docker 所起的 Container 上線都沒有問題

檢查後端連線狀態

輸入後端 Api 網址,查看 8080 port,可以看到 Api 運作正常

再來查看 8081 port,也可以看到 Api 運作正常

最後查看正式機 80 port,可看見 Api 也運作正常

最後補充

最後我們來補充講解一些變數,可以看到我 CI/CD 的 .devploy 這個繼承 Job,裡面有開了一些 export 的變數

SERVER_ENV: 我想各位應該都懂,也就是 Server 環境定義

SERVER_PORT: 我想各位應該都懂,也就是 Server 連接埠定義

COMPOSE_PROJECT_NAME: 我想這個各位應該不太懂這個在做甚麼的,這個是 Docker 自有的環境變數,他的功能是依據專案,取幫你起一個 Container Name,由於我們不想有衝突,所以我們必須在每個階段,設定不同的名稱,這樣才不會有衝突

留言

此網誌的熱門文章

yarn 專案版號管理指令

Gitlab CI/CD 之 when

Gitlab CI/CD 什麼是 CI/CD