更新於 2024/12/18閱讀時間約 7 分鐘

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

    raw-image

    前言

    大家好上次講到在使用 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,由於我們不想有衝突,所以我們必須在每個階段,設定不同的名稱,這樣才不會有衝突

    分享至
    成為作者繼續創作的動力吧!
    © 2024 vocus All rights reserved.