一,引言
結合前幾篇文章,我們瞭解到 Azure Pipeline 完美的解決了持續整合,自動編譯。同時也兼顧了 Sonarqube 作為程式碼掃描工具。接下來另外一個問題出現了,Azure DevOps 由於有人員限制,專案上不能給非開發人員或者外包成員開許可權,這個時候就需要將編譯好的程式包上傳到公共網盤或者私有的遠端儲存賬戶,方便下載。那麼我們今天就結合 Azure storage account 來實踐一次利用 Azure Release Pipeline 自動將編譯好的程式包釋出到 Blob Storage 中。接下來就開始了今天的實踐內容。
--------------------Azure DevOps 系列--------------------
1,Azure DevOps(一)基於 Net6.0 的 WPF 程式如何進行持續整合、持續編譯
2,Azure DevOps(二)Azure Pipeline 整合 SonarQube 維護程式碼質量和安全性
3,Azure DevOps(三)Azure Pipeline 自動化將程式包上傳到 Azure Bolb Storage
二,正文
1,建立儲存賬戶
我們登入 Azure Portal,點選 “create a resource” 建立新的資源
輸入 “storage account” 檢視資源,並進行建立
輸入以下引數:
Resource group:“Web_Test_SA_RG”(已有的資源組,也可以選擇建立新的)
Storage account name:“cloudplatform”
Performance 選擇:“Standard”
Redundancy 選擇:“Locally-redundant storage(LRS)”
點選 “Review” 進行建立前的預校驗
預校驗完成後,點選 “Create” 進行建立
等待建立完成後,跳轉到該資源進行檢視
2,為 service principal 授權
建立 sp 的過程大家可以參考:Azure AD(四)知識補充-服務主體
接下來就是為 Azure DevOps 的 Service connection (也就是服務主體設定許可權)
選擇 “cloudplatform =》Access Control”,點選 “+ Add”,新增角色分配
選擇 “Storage Blob Data Contributor” 點選 “Next”
點選 “+ Select members”,選擇好 service principal,點選 “select” 進行選擇確定
點選 ”Review + assign“ 進行確定預覽指派許可權控制
稍後,我們就可以看到當前 sp 的許可權資訊,Scope 為 ”This resource“
3,建立 Release Pipeline
登入 azure devops 找到上一篇課程中建立的專案 “NetCore_WPF_Sample” 專案
選擇 “Pilelines =》Releases”,點選 “New pipeline” 建立新的管道作業
點選 ”Artifacts + Add“ 新增發布源
Source type 選擇:”Build“
Project:”NetCore_WPF_Sample“
Source(build pipeline)選擇 :”yunqian44.Standard.Tool.Platform“(build Pipeline)
Dafault version:”Latest“
Source alias 選擇預設
點選 ”Add“ 進行新增操作
接下來點選箭頭所指的位置,新增任務項。
1)新增新的 ”Task“,輸入 ”Azure CLI“ 進行查詢,並新增
輸入以下引數
Manage 選擇:”vs“(自己專案所用的 serviceconnection)
Script Type:”Shell“
Script Location:”Inline script“
Inline Script:
# create azure resource group az group create --location eastasia --name $(terraform_rg) # create azure storage account az storage account create --name $(storage_account) --resource-group $(terraform_rg) --location eastasia --sku Standard_LRS # create storage account container for package blob az storage container create --name $(storage_account_container) --account-name $(storage_account)
2)搜尋 ”Archive files“,新增壓縮任務
修改 需要壓縮的檔案或者資料夾的根目錄
如下圖所示:
源:改為 Build Pipeline 輸入目錄下的 drop 檔案
目標:改為Build Pipeline 輸入目錄下已 BuildId 命名的壓縮檔案
接下來,我們新增 ”Azure file copy“,新增檔案複製任務
輸入一下引數,需要注意 儲存賬戶,容器名稱 Blob 字首都已變數的形式體現
Source 選擇 ”Archive“ 任務輸出的壓縮檔案的目錄
Azure Subscription 選擇實際專案
Destination Type 選擇:”Azure Blob“
RM Storage Account:$(storage_account)
Container Name:$(storage_account_container)
Blob prefix:$(Build.BuildId).zip
最後,我們需要新增變數,選擇 “Variable”,點選 “+” 進行操作,輸入以下引數,並儲存
Name | Value |
storage_account | cloudplatform |
storage_account_container | wpf-client |
terraform_rg | Web_Test_SA_RG |
點選 “Create release” 嘗試執行 release pipeline
點選 “OK” 確認此操作
Release Pipeline 執行成功
儲存賬戶的容器 “” 也被建立好了
編譯好的程式包已被上傳到 Storage Account 的 Container 中了
Bingo!!!!!????
三,結尾
結合前兩篇內容講解的 Azure DevOps 系列,基本上從專案前期的持續整合,持續編譯,到中期的程式碼靜態掃描,再到後期的實現專案編譯好的程式包自動釋出到儲存賬號中,基本已經滿足專案需求。DevOps 已從完美的升級為 DevSecOps 了。下一篇,對我我們目前的專案,我是如何實施DevOps的!!!盡請期待。
Azure Blob 儲存文件 ----- 訪問控制:https://learn.microsoft.com/zh-cn/azure/storage/blobs/data-lake-storage-acl-cli
作者:Allen
版權:轉載請在文章明顯位置註明作者及出處。如發現錯誤,歡迎批評指正。