大家好上次講到在使用 Gitlab CI/CD 自動化佈署前,使用 Docker Compose 撰寫佈署計畫書,今天我們要將目標轉移到 Gitlab 我們要撰寫自動化上線佈署計畫書,我們之後還會講一套更完整的佈署流程,今天只是讓各位體驗,自動化佈署上線的快感
首先我們先稍微調整 CI/CD 的變數,在這裡讓我稍微偷懶一下,我們 development 主機、staging 主機及 production 主機,所使用的變數都先用 DEV 開頭,因為我們主機只有一台,如果各位有想再開而外變數練習,也是可以的
接下來我們開始撰寫 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
接下來我們將我們寫好的自動化佈署計畫書,將他上板上去 Giblab,讓他運行 CI/CD,在下面 ‘deploy-to-development’ 這個 Job 運行成功
繼續往下看到 ‘deploy-to-staging’ 這個 Job 也成功運行
在最後我們看到 ‘deploy-to-production’ 這個 Job 也成功運行
我們連去伺服器,檢查 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,由於我們不想有衝突,所以我們必須在每個階段,設定不同的名稱,這樣才不會有衝突