DevOps部署自動化輕量級架構環境 For ASP.NET (三)操作

DevOps部署自動化輕量級架構環境 For ASP.NET (三)操作

four bots

在核心數位技術的驅策下,數位轉型步伐正加速前進。另外全世界面對「新冠肺炎(COVID-19)」疫情突顯了IT和數位轉型的價值,建議企業組織應該將危機轉化成為加速轉型的機會。
DevOps 開發維運是一項不斷發展的理念與架構,旨在鼓勵更快、更出色的應用程式開發團隊,以及更快地將新版本的軟體應用發佈給客戶端。
DevOps 開發維運的實務做法可促進應用「程式開發團隊(Dev)」與其「IT 維運團隊(Ops)」的合作夥伴之間更順暢、持續的溝通、協同作業、整合、可見度及通透性。
「Dev」與「Ops」之間的這種密切關係貫穿了 DevOps 開發維運生命週期的每個階段;從初始軟體規劃到程式碼、建構、測試和發佈階段,再到部署、作業與持續監控。這種關係推動了進一步改善、開發、測試及部署的持續客戶端回饋循環。這些努力的結果可能是更快速地持續發佈必要的功能變更或新增項目。
DevOps 開發維運是一種組織工作文化與方法,目標是建立獨立的開發與營運能力整合的以市場導向為主的具賦生學習文化的團隊,可以快速且安全地為客戶提供價值。而 DevOps 開發維運工具可以在這些領域提供協助。這些工具可讓開發與營運工作流程更為精簡且更具協同合作性,將先前涉及整合、開發、測試、部署或監控的耗時、手動或靜態工作自動化。

安裝應用程式完成,後續開始進入新增儲存庫、新增作業、程式建置、單元測試和部屬服務,一步一步設定及測試步驟完成部屬自動化的架構。

第一章、Gitea平台新增使用者及儲存庫

1-1.新增使用者

【Step 1】開啟瀏覽器輸入網址:http://192.168.184.128:3000/,顯示管理系統首頁,按右上角的註冊去新增。

Gitea 登入畫面

【Step2】 顯示『註冊』,帳號:mJenkins,電子郵件:帳號@Mail.com,密碼與帳號相同。此帳號與Jenkins管理者帳號相同利於不同平台使用

【Step3】 帳號已成功建立完成畫面。

1-2.新增儲存庫

【Step1】 使用瀏覽器輸入網址:http://192.168.184.128:3000/,顯示管理系統畫面,按右上角的登入系統,輸入mGitea管理者帳號與密碼,按登入進入系統。

【Step2】 在『資訊主頁』,右上角有個『+展開後按新增儲存庫選項。

【Step3】 在『新增儲存庫』,儲存庫名稱:slnWeb,按建立儲存庫按鈕。

【Step4】 建立儲存庫成功,提供『Clone此儲存庫』的網址,按設定登入選項。

【Step5】 登入『設定』,建立協作者:mJenkins,選擇協作者頁籤。

【Step6】 在『協作者』,輸入mJenkins,按增加協作者按鈕。

【Step7】 在『協作者』,成功增加協作者,再『▼』選擇可讀權限利於提供Jenkins平台取得最新版本的儲存庫之檔案。

1-3.TortoiseGit上傳儲存庫

【Step1】 提供範例的壓縮檔,檔案名稱:slnWeb-master.zip

【Step2】 在『D:\MyProject』目錄下,已安裝TortoiseGit,在空白處按右鍵顯示清單選擇Git複製項目。

【Step3】 顯示『Git複製-TortoiseGit』,確認URL再按確定按紐。

【Step4】 顯示『Git命令進度』,最後顯示成功關閉按紐。

【Step5】 在『D:\MyProject』目錄下,有slnWeb文件夾並且是綠色打勾的文件夾圖示顯示。如有Git版本控管的文件夾會顯示這種的圖示

【Step6】 開啟slnWeb-master.zip,進行解壓縮至『D:\MyProject\slnWeb』。

【Step7】 檢視『D:\MyProject\slnWeb』目錄下的原始碼檔案。

【Step8】 在『D:\MyProject\slnWeb』文件夾,按右鍵清單TortoiseGit > 檢查變數項目。

【Step9】 顯示『工作目錄- TortoiseGit』,快捷鍵:Ctrl + A全選。

【Step10】 在『工作目錄- TortoiseGit』,在檔案中按右鍵清單中加入項目。

【Step11】 顯示『加入完成』,顯示完成成功,再按確定按鈕繼續。

【Step12】 在『工作目錄- TortoiseGit』,按提交按鈕繼續。

Step13】 顯示『提交- TortoiseGit』,輸入訊息(M):異動原因。可顯示日誌利追朔原始碼的異動原因

【Step14】 在『提交- TortoiseGit』,介面底下按鈕中提交▼選擇提交&推送至現行遠端存放庫。

【Step15】 顯示『Git命令進度- TortoiseGit』,輸入Username,按OK按鈕繼續。

【Step16】 在『Git命令進度- TortoiseGit』,輸入Password,按OK按鈕繼續。

【Step17】 在『Git命令進度- TortoiseGit』成功,按關閉按鈕完成。

【Step18】 上傳成功,確認Gitea平台查詢儲存庫的原始碼。

【Step19】 Gitea平台查詢儲存庫的原始碼,可檢視檔案內容。

第二章、Jenkins平台新增外掛程式

2-1.新增Gitea外掛程式

【Step1】 使用瀏覽器輸入網址:http://192.168.184.128:8080/,顯示管理系統登入畫面,輸入帳號密碼按Sign in進入。

【Step2】 顯示『資訊主頁』,左選單項目選擇管理Jenkins登入管理選項。

【Step3】 在『管理Jenkins』,選擇管理外掛程式登入管理外掛選項。

【Step4】 在『管理外掛程式』,選擇可用的頁籤。

【Step5】 在『管理外掛程式』,在filter欄位輸入gitea後,勾選後再按Install without restart按鈕。

【Step6】 在『正在安裝/升級Plugins』,進行下載安裝外掛程式,完成後再重啟Jenkins平台。

【Step7】 在『管理Jenkins』,選擇設定系統登入設定選項。

【Step8】 在『設定系統』,快捷鍵:Ctrl + F,輸入關鍵詞:gitea搜尋。

【Step9】 在『設定系統』的Gitea Servers,選擇新增▲Gitea Server顯示設定。

【Step10】 在『設定系統』的Gitea Servers,輸入Server URL:http://192.168.184.128:3000/。

【Step11】 在『設定系統』的Gitea Servers,☑Manage hooks,選擇Add選項。

【Step12】 在『設定系統』的Gitea Servers,Add Jenkins選項。

【Step13】 顯示『Add Credentials』,輸入Username:mJenkins,Password與Username相同,按Add新增證書。

【Step14】 回到『設定系統』的Gitea Servers,按進階…顯示設定項目。

【Step15】 在『設定系統』的Gitea Servers,輸入Alias URL:http://192.168.184.128:3000/gitea-webhook,按儲存按鈕完成設定。

2-2.新增NuGet & MSBuild外掛程式

【Step1】 在『管理外掛程式』,在filter欄位輸入nuget後,勾選後再輸入msbuild關鍵詞。

【Step2】 在『管理外掛程式』,在filter欄位輸入msbuild後勾選後再按Install without restart按鈕。

【Step3】 在『正在安裝/升級Plugins』,進行下載安裝外掛程式,完成後再重啟Jenkins平台。

【Step4】 在『管理Jenkins』,選擇設定系統登入設定選項。

【Step5】 在『設定系統』,快捷鍵:Ctrl + F,輸入關鍵詞:nuget搜尋。

【Step6】 在『設定系統』的Nuget,輸入Server URL:D:\NuGetPackage\nuget.exe,按儲存按鈕完成設定。

【Step7】 在『管理Jenkins』,選擇Global Tool Configuration登入設定選項。

【Step8】 在『Global Tool Configuration』,快捷鍵:Ctrl + F,輸入關鍵詞:msbuild搜尋,再按新增MSBuild顯示設定項目。

【Step9】 在『Global Tool Configuration』的MSBuild,

輸入Name:MSBuild2019,

輸入Path to MSBuild:C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\MSBuild\Current\Bin\MSBuild.exe,

儲存按鈕完成設定。

2-3.新增MSTest外掛程式

【Step1】 在『管理外掛程式』,在filter欄位輸入mstest後,勾選後再按Install without restart按鈕。

【Step2】 在『正在安裝/升級Plugins』,進行下載安裝外掛程式,完成後再重啟Jenkins平台。

【Step3】 在『管理Jenkins』,選擇Global Tool Configuration登入設定選項。

【Step4】 在『Global Tool Configuration』,快捷鍵:Ctrl + F,輸入關鍵詞:mstest搜尋,再按新增MSTest顯示設定項目。

【Step5】 在『Global Tool Configuration』的MSTest,

輸入Name:MSTest2019,

輸入Path to MSBuild:C:\Program Files (x86)\Microsoft Visual Studio\2019\TestAgent\Common7\IDE\MSTest.exe,

按儲存按鈕完成設定。

2-4.新增PowerShell外掛程式

【Step1】 在『管理外掛程式』,在filter欄位輸入powershell後,勾選後再按Install without restart按鈕。

【Step2】 在『正在安裝/升級Plugins』,進行下載安裝外掛程式,完成後再重啟Jenkins平台。

第三章、Gitea and Jenkins Webhook通知

Webhook 是一個API 概念,並且在人工智慧時代變得越來越流行。我們能用事件描述的事物越多,Webhook 的作用範圍也就越大。Webhook 作為一個輕量的事件處理應用,使得變得越來越實用。
準確的說Webhook 是一種Web 回調或者http 的Push API,是向APP 或者其他應用提供實時資訊的一種方式。Webhook 在資料產生時立即傳送資料,也就是你能實時收到資料。這一種不同於典型的API,需要用了實時性需要足夠快的輪詢。這無論是對生產還是對消費者都是高效的,唯一的缺點是初始建立困難。
Webhook 有時也被稱為反向API,因為他提供了API 規則,你需要設計要使用的API。Webhook將向你的應用發起http請求,典型的是Post請求,應用程式由請求驅動。

3-1.Jenkins新增作業及Poll SCM

【Step1】 使用瀏覽器輸入網址:http://192.168.184.128:8080/,登入『資訊主頁』畫面。

【Step2】 在『新增作業』,輸入name:slnWeb,選擇建立Free-Style軟體專案,按OK按鈕。建議Gitea and Jenkins平台建立相同名稱利於追蹤

【Step3】 新增作業成功,以『slnWeb』作業開始建置單元測試佈署設定

【Step4】 在『slnWeb作業』的原始碼管理,選擇Git,輸入Repository URL:http://192.168.184.128:3000/mGitea/slnWeb.git,選擇Credentials:mJenkins。

【Step5】 在『slnWeb作業』的建置觸發程序,☑輪詢SCM,按儲存按鈕完成。

3-2.設定Gitea的儲存庫之Webhook

【Step1】 使用瀏覽器輸入網址:http://192.168.184.128:3000/,登入系統選擇『slnWeb』儲存庫,再選擇設定進入歸屬此儲存庫的參數設定。

【Step2】 在『設定』,選擇Webhook頁籤。

【Step3】 在『設定』的Webhook,按建立Webhook選項新增『Gitea』。

【Step4】 在『設定』的建立Webhook,

輸入目標URL:http://192.168.184.128:8080/gitea-webhook/post?job=slnWeb,

觸發條件:推送事件,按建立Webhook按鈕新增。

【Step5】 在『設定』的Webhook,顯示Webhook新增成功

3-3.Gitea and Jenkins Webhook傳送測試資料

【Step1】 在『設定』的Webhook,按🖋連結登入。

【Step2】 在『設定』的更新Webhook,按傳送測試資料按鈕。

【Step3】 在『設定』的更新Webhook,顯示傳送佇列訊息最近傳送紀錄

【Step4】 在『設定』的更新Webhook,最近傳送紀錄的UUID點開查閱紀錄。

【Step5】 在『Jenkins』平台的專案slnWeb,建置歷程選擇#3登入建置歷程。備註:顯示為建置成功,顯示為建置失敗。

【Step6】 在『Jenkins』平台的專案slnWeb,選擇選單中Console Output登入。

【Step7】 在『Jenkins』平台的專案slnWeb,顯示終端機輸出歷程。

【Step8】 在『D:\Jenkins.jenkins\workspace\』目錄,建置成功確認工作區是否有原始碼,利於設定方案建置、單元測試及專案佈署

第四章、Jenkins CI 建置方案

4-1.設定建置環境

【Step1】 使用瀏覽器輸入網址:http://192.168.184.128:8080/,登入『資訊主頁』畫面,按slnWeb登入作業。

【Step2】 在『專案slnWeb』,按組態條件設定。

【Step3】 在『專案slnWeb』的組態,在建置環境頁籤☑Delete workspace before build starts。

【Step4】 在『專案slnWeb』的組態,在『建置』頁籤的新增建置步驟▲選擇執行Windows 批次指令設定。

【Step5】 在『專案slnWeb』的組態,在執行Windows 批次指令視窗輸入:nuget.exe restore “%WORKSPACE%\slnWeb.sln”。

備註:此WORKSPACE變數值:D:\Jenkins.jenkins\workspace\slnWeb。

nuget.exe restore "%WORKSPACE%\slnWeb.sln"

【Step6】 在『專案slnWeb』的組態,在建置頁籤的新增建置步驟選擇『Build a Visual Studio project or solution using MSBuild』設定。

【Step7】 在『專案slnWeb』的組態,在Build a Visual Studio project or solution using MSBuild

選擇MSBuild Version:MSBuild2019,

輸入MSBuild Build File:slnWeb.sln,

輸入Command Line Arguments:/p:Configuration=Release /p:Platform=”Any CPU”,

儲存按鈕。

4-2.建置環境測試

【Step1】 在『專案slnWeb』,按馬上建置執行。

【Step2】 在『專案slnWeb』,建置歷程新增#6點選登入。

【Step3】 在『專案slnWeb』,在#6選擇Console Output項目。

【Step4】 在『專案slnWeb』,在終端機輸出檢視歷程。

第五章、Jenkins CI 單元測試

5-1.設定單元測試

【Step1】 使用瀏覽器輸入網址:http://192.168.184.128:8080/,登入『資訊主頁』畫面,按slnWeb登入作業。

【Step2】 在『專案slnWeb』,按組態條件設定。

【Step3】 在『專案slnWeb』的組態,在『建置』頁籤的新增建置步驟選擇執行Windows 批次指令設定。

【Step4】 在『專案slnWeb』的組態,在執行Windows 批次指令視窗輸入:

del TestResults.trx
MSTest.exe /testcontainer:"%WORKSPACE%\prjWeb.Tests\bin\Release\prjWeb.Tests.dll" /resultsfile:TestResults.trx

【Step5】 在『專案slnWeb』的組態,在『建置後動作』頁籤的新增建置後動作選擇Publish MSTest test result report設定。

【Step6】 在『專案slnWeb』的組態,在Publish MSTest test result report使用預設值,按儲存按鈕。

5-2.進行單元測試

【Step1】 在『專案slnWeb』,按馬上建置執行。

【Step2】 在『專案slnWeb』,建置歷程新增#7點選登入。

【Step3】 在『專案slnWeb』,在#7選擇Console Output項目。

【Step4】 在『專案slnWeb』,在終端機輸出檢視歷程。

第六章、Jenkins CD部屬自動化

6-1.設定部屬自動化

【Step1】 使用瀏覽器輸入網址:http://192.168.184.128:8080/,登入『資訊主頁』畫面,按slnWeb登入作業。

【Step2】 在『專案slnWeb』,按組態條件設定。

【Step3】 在『專案slnWeb』的組態,在建置頁籤的新增建置步驟選擇PowerShell設定。

【Step4】 在『專案slnWeb』的組態,在PowerShell視窗輸入:

# 檢查目錄是否存在
$ProjectFolder = "D:\inetpub\prjWeb"
if (Test-Path -Path $ProjectFolder) {
  #移除目錄(不詢問、直接移除)
  Remove-Item $ProjectFolder -Recurse -Force
}

#Step1: 設定來源目錄
$SourceFolder = "prjWeb\"

#Step2: 設定覆蓋到IIS WebSite的目錄上
$DestinationFolder = "D:\inetpub\"

#Step3: 執行資料夾覆蓋 【-Recurse】包含子資料夾底下的內容 【-force】強制覆蓋
Copy-Item -Path $SourceFolder -Recurse -Destination $DestinationFolder -force

6-2.部屬自動化測試

【Step1】 在『專案slnWeb』,按馬上建置執行。

【Step2】 在『專案slnWeb』,建置歷程新增#10點選登入。

【Step3】 在『專案slnWeb』,在#10選擇Console Output項目。

【Step4】 在『專案slnWeb』,在終端機輸出檢視歷程。

【Step5】 在『IIS Express』在應用程式中prjWeb目錄,

瀏覽器輸入網址:http://192.168.184.128/prjWeb,

檢視slnWeb的prjWeb專案。