一,引言
結合前幾篇文章,我們瞭解到 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 Blob 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
版權:轉載請在文章明顯位置註明作者及出處。如發現錯誤,歡迎批評指正。