2023-12-23|閱讀時間 ‧ 約 8 分鐘

GitLab CI/CD 之 environment

raw-image

前言

上次我們做了一次使用 Docker、Docker Compose 與 Gitlab CI/CD 做一次自動化佈署上線,今天我們要來再來教一個 Gitlab CI/CD 中的 environment 這個 script 怎麼使用

environment 作用

environment 是可以讓我們定義我們佈署的環境有哪些,定義好環境後 Gitlab 讓的 UI 會儲存你定義的環境,讓我們可以更方便去連線我們的主機,如下圖按下 Operate -> Environments,這裡就可以讓我們新增環境,但是一個一個新增不會覺得很不方便呢 ? 我們今天用 CI/CD 腳本方式,讓他可以自動新增這些環境,是不是很方便呢 ?

environment 定義

environment 在我們的工作去定義環境,可以看到以下範例,我們寫進 environment 去定義我們的環境,name 是定義我們環境名稱,url 也就是我們連線網址

deploy-to-development:
stage: deploy
environment:
name: example service name
url: https://www.example.com.tw

練習時間

接下來我們來開始撰寫 CI/CD,讓我們的環境可以自動定義好,不須再而外改來改去,我們使用上次的腳本稍微加個東西

在這裡我們在 .deploy 這個繼承工作,加了一個 SERVICE_NAME 這個 variables,用來準備定義環境名稱,並且加上 environment 這個 script,用來準備定義每個環境,每個 deploy 類的工作也跟著使用 SERVICE_NAME 這個變數定義環境名稱

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

stages:
- deploy

.deploy:
tags:
- shell
variables:
SERVER_NAME: ""
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"
environment:
name: $SERVER_NAME
url: http://$SERVER_URL:$SERVER_PORT

deploy-to-development:
stage: deploy
tags:
- shell
variables:
SERVER_NAME: DotNetCoreWebApiCiAndCdCourse development environment
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_NAME: DotNetCoreWebApiCiAndCdCourse staging environment
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_NAME: DotNetCoreWebApiCiAndCdCourse production environment
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 工作上傳上去,可以看到以下工作都成功完成

回到我們環境,這裡可以看到我們的所有環境的連結都自動新增上去,每個環境都可以點 Open 按鈕,即可開啟我們目標主機連結

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