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

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

前言

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

調整 CI/CD 變數

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

raw-image

撰寫 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 運行成功

raw-image

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

raw-image

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

raw-image

檢查 Docker 運作

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

dockerr ps -a

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

raw-image

檢查後端連線狀態

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

raw-image

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

raw-image

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

raw-image

最後補充

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

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

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

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

    avatar-img
    10會員
    49內容數
    d3.js 圖形
    留言0
    查看全部
    avatar-img
    發表第一個留言支持創作者!
    Tim Bai的沙龍 的其他內容
    前言 大家好上次我們教了 Gitlab CI/CD 的 extends 如何使用,今天我們要來實際做一個真正佈署上線我們的服務,我們會分成兩個章節,第一部分先教大家怎麼寫 Docker Compose 佈署計畫書,第二部分教大家撰寫 CI/CD 自動化佈署流程計劃書 什麼是 Docker Com
    前言 上次教到如何使用 scp 與 CI/CD 配合複製檔案至伺服器,今天我們要來教 CI/CD 中的 extends 指令,extends 在有些程式語言叫做繼承的意思,那在 CI/CD 中,叫做繼承工作的意思,妳也可以把它當成,CI/CD 也可以繼承工作,幫助我們在撰寫 CI/CD 腳本更加省
    前言 大家好上次教 Gitlab CI/CD 如何撰寫 CI/CD 腳本,使用 ssh 自動連線目標主機,很受到大家關注,在這裡先跟大家說一聲謝謝,以後會繼續做有意義的文章給各位,今天要教大家如何使用 scp 這個使令,將我們的檔案複製到目標主機,並進行佈署動作,我們之後會使用 Docker Co
    前言 上次我們教到完了怎麼在 Gitlab CI/CD 怎麼自動打包 Docker Image 並自動上傳到 Docker Hub 以及如何將 Docker Image 做版號,今天我們來教 Gitlab CI/CD 其中之一很重要的是自動 ssh 連線,因為往後我們會透過 Gitlab 伺服器使
    前言 上次我們教到如何使用 Gitlab CI/CD 自動打包 Docker Image,並自動上傳 Docker Image 到 Docker Hub 存放我們的 Image,今天我們要再做一件事情,也就是當我們上傳 Image 時,除的上傳自動最新 Image,還要自動掛載版號 jq 工具使
    前言 上次我們教到如何打包 Docker Image,而今我們要交如何將我們打包好的 Docker Image 自動化上傳到 Docker Hub,這樣的話不但可以減輕我們的工作,也可以讓我們為的的佈署新服務更有效率 設定隱藏變數 在我們設定裡面,設定我們 CI/CD 變數,我們在這裡設定我們
    前言 大家好上次我們教了 Gitlab CI/CD 的 extends 如何使用,今天我們要來實際做一個真正佈署上線我們的服務,我們會分成兩個章節,第一部分先教大家怎麼寫 Docker Compose 佈署計畫書,第二部分教大家撰寫 CI/CD 自動化佈署流程計劃書 什麼是 Docker Com
    前言 上次教到如何使用 scp 與 CI/CD 配合複製檔案至伺服器,今天我們要來教 CI/CD 中的 extends 指令,extends 在有些程式語言叫做繼承的意思,那在 CI/CD 中,叫做繼承工作的意思,妳也可以把它當成,CI/CD 也可以繼承工作,幫助我們在撰寫 CI/CD 腳本更加省
    前言 大家好上次教 Gitlab CI/CD 如何撰寫 CI/CD 腳本,使用 ssh 自動連線目標主機,很受到大家關注,在這裡先跟大家說一聲謝謝,以後會繼續做有意義的文章給各位,今天要教大家如何使用 scp 這個使令,將我們的檔案複製到目標主機,並進行佈署動作,我們之後會使用 Docker Co
    前言 上次我們教到完了怎麼在 Gitlab CI/CD 怎麼自動打包 Docker Image 並自動上傳到 Docker Hub 以及如何將 Docker Image 做版號,今天我們來教 Gitlab CI/CD 其中之一很重要的是自動 ssh 連線,因為往後我們會透過 Gitlab 伺服器使
    前言 上次我們教到如何使用 Gitlab CI/CD 自動打包 Docker Image,並自動上傳 Docker Image 到 Docker Hub 存放我們的 Image,今天我們要再做一件事情,也就是當我們上傳 Image 時,除的上傳自動最新 Image,還要自動掛載版號 jq 工具使
    前言 上次我們教到如何打包 Docker Image,而今我們要交如何將我們打包好的 Docker Image 自動化上傳到 Docker Hub,這樣的話不但可以減輕我們的工作,也可以讓我們為的的佈署新服務更有效率 設定隱藏變數 在我們設定裡面,設定我們 CI/CD 變數,我們在這裡設定我們
    你可能也想看
    Google News 追蹤
    Thumbnail
    *合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
    Thumbnail
    本文將介紹如何在Gitlab上部署和註冊runner,以進行CI/CD測試。透過Docker-compose方式進行部署,同時注意安裝時的一些注意事項。建議學習者至少掌握一種以上的Pipeline工具,以滿足實務上的需求。
    Thumbnail
    前言 上次我們講到 CI/CD 中的 when 使用,今天我們要來傳授一套必殺技,我們要把過去所學的全部融合再一起,相信各位都準備好了,將 Gitlab 從枷鎖中解放出來吧,讓我們來詠唱「武裝完全支配術」 「System Call. Connect Armament. Search Archiv
    Thumbnail
    前言 上次教到如何使用 environment 去自動設置我們環境那些,今天我們要教 CI/CD 中的 when,通常在自動化佈署上線流程,並不會一路像前幾次一樣,先佈署到測試機,再佈署 demo 機,最後佈署到正式機,我們在佈署正式機的時候,通常會做一個防呆,比如說做成一個指令集,或者是按鈕等等
    Thumbnail
    前言 上次我們做了一次使用 Docker、Docker Compose 與 Gitlab CI/CD 做一次自動化佈署上線,今天我們要來再來教一個 Gitlab CI/CD 中的 environment 這個 script 怎麼使用 environment 作用 environment 是可以
    Thumbnail
    前言 大家好上次講到在使用 Gitlab CI/CD 自動化佈署前,使用 Docker Compose 撰寫佈署計畫書,今天我們要將目標轉移到 Gitlab 我們要撰寫自動化上線佈署計畫書,我們之後還會講一套更完整的佈署流程,今天只是讓各位體驗,自動化佈署上線的快感 調整 CI/CD 變數 首
    Thumbnail
    本篇使用最簡單的GitLab-ci.yml內容,進而實現了CI的功能,操作方式文章所示。
    Thumbnail
    GitLab 是一個強大的程式碼託管和協作平台,而 GitLab Runner 是一個用於執行自動化測試和部署的工具。透過 Docker,您可以輕鬆新增 GitLab Runner 到您的環境中,提供更快速、可擴展的開發流程。以下就示範利用Docker新增GitLab Runner
    Thumbnail
    在 Docker 上自建 GitLab Server 是一種方便且有效的方式來託管和管理您的程式碼。使用 Docker,您可以快速建立一個 GitLab 伺服器並且輕鬆進行配置和擴展。
    Thumbnail
    GitLab不僅是一個源代碼管理工具,它還提供了一個統一的平台,將開發、運營和安全等流程整合在一起。通過GitLab,可以在單一的應用程序中進行專案計劃、源代碼管理、分支控制、CI/CD等操作。不論角色為何,GitLab提供了一個統一的資訊來源,讓你輕鬆地管理和追蹤整個開發流程。它消除了工具鏈的複雜
    Thumbnail
    *合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
    Thumbnail
    本文將介紹如何在Gitlab上部署和註冊runner,以進行CI/CD測試。透過Docker-compose方式進行部署,同時注意安裝時的一些注意事項。建議學習者至少掌握一種以上的Pipeline工具,以滿足實務上的需求。
    Thumbnail
    前言 上次我們講到 CI/CD 中的 when 使用,今天我們要來傳授一套必殺技,我們要把過去所學的全部融合再一起,相信各位都準備好了,將 Gitlab 從枷鎖中解放出來吧,讓我們來詠唱「武裝完全支配術」 「System Call. Connect Armament. Search Archiv
    Thumbnail
    前言 上次教到如何使用 environment 去自動設置我們環境那些,今天我們要教 CI/CD 中的 when,通常在自動化佈署上線流程,並不會一路像前幾次一樣,先佈署到測試機,再佈署 demo 機,最後佈署到正式機,我們在佈署正式機的時候,通常會做一個防呆,比如說做成一個指令集,或者是按鈕等等
    Thumbnail
    前言 上次我們做了一次使用 Docker、Docker Compose 與 Gitlab CI/CD 做一次自動化佈署上線,今天我們要來再來教一個 Gitlab CI/CD 中的 environment 這個 script 怎麼使用 environment 作用 environment 是可以
    Thumbnail
    前言 大家好上次講到在使用 Gitlab CI/CD 自動化佈署前,使用 Docker Compose 撰寫佈署計畫書,今天我們要將目標轉移到 Gitlab 我們要撰寫自動化上線佈署計畫書,我們之後還會講一套更完整的佈署流程,今天只是讓各位體驗,自動化佈署上線的快感 調整 CI/CD 變數 首
    Thumbnail
    本篇使用最簡單的GitLab-ci.yml內容,進而實現了CI的功能,操作方式文章所示。
    Thumbnail
    GitLab 是一個強大的程式碼託管和協作平台,而 GitLab Runner 是一個用於執行自動化測試和部署的工具。透過 Docker,您可以輕鬆新增 GitLab Runner 到您的環境中,提供更快速、可擴展的開發流程。以下就示範利用Docker新增GitLab Runner
    Thumbnail
    在 Docker 上自建 GitLab Server 是一種方便且有效的方式來託管和管理您的程式碼。使用 Docker,您可以快速建立一個 GitLab 伺服器並且輕鬆進行配置和擴展。
    Thumbnail
    GitLab不僅是一個源代碼管理工具,它還提供了一個統一的平台,將開發、運營和安全等流程整合在一起。通過GitLab,可以在單一的應用程序中進行專案計劃、源代碼管理、分支控制、CI/CD等操作。不論角色為何,GitLab提供了一個統一的資訊來源,讓你輕鬆地管理和追蹤整個開發流程。它消除了工具鏈的複雜