
1. 什么是 Azure Pipelines
Azure Pipelines 會自動構建和測驗代碼專案,以將其提供給其他人,它適用于任何語言或專案型別,Azure Pipelines 結合了持續集成 (CI) 和持續交付 (CD),以持續不斷地測驗和構建您的代碼,并將代碼運送到任何目標,
在網上關于 Azure Pipelines 的教程很多,通常都是從 CI 到 CD 一條龍,但對于 WPF 來說也 CD 部分就有些尷尬,畢竟桌面應用通常不需要“部署”,所以這篇文章將只簡單介紹如何創建編譯 WPF 代碼的 Pipeline,
2. 創建 Pipeline
在 Azure Devops 左邊選單中選中 Pipelines,進入 Pipelines 頁面,點擊 Create Pipeline 按鈕進入下圖中的創建 Pipeline 頁面,然后按以下步驟操作:

-
Where is your code?:選擇代碼所在的位置,選擇 Azure Repos Git,
-
Select a repository:選中代碼的存盤庫,這里我選擇了之前創建的 wpf 存盤庫,
-
Configure your pipeline:選擇 Pipeline 的配置方式,因為是 WPF 專案,所以選擇 .NET Desktop,
-
Review:檢查生成的 YAML,可以重命名 YAML 檔案,也可以點擊右邊的 Show assistant 打開 Tasks 串列查找并添加其它任務到 YAML 中,然后點擊右上角的 Save and run 按鈕,

- 在彈出的面板中,選擇 Create a new branch for this commit 及 Start a pull request,然后點擊 Save and run 按鈕,

現在創建了一個 Pull request,并且將剛剛創建的 Pipeline 的 YAML 加入到檔案里了,這個 Pull Request 和 YAML 的內容如下:

trigger:
- master
pool:
vmImage: 'windows-latest'
variables:
solution: '**/*.sln'
buildPlatform: 'Any CPU'
buildConfiguration: 'Release'
steps:
- task: NuGetToolInstaller@1
- task: NuGetCommand@2
inputs:
restoreSolution: '$(solution)'
- task: VSBuild@1
inputs:
solution: '$(solution)'
platform: '$(buildPlatform)'
configuration: '$(buildConfiguration)'
- task: VSTest@2
inputs:
platform: '$(buildPlatform)'
configuration: '$(buildConfiguration)'
- trigger:觸發器,當 master 更改時執行這個 Pipeline,
- pool:要使用 Azure Pipelines 構建代碼,至少需要一個代理,默認使用 Microsoft 托管的代理,
- varibles:各種引數,
- steps:步驟,可以看到這個 Pipeline 有四個Task:安裝 Nuget,還原 Nuget,編譯,測驗,
VSBuild@1、VSTest@2 等名稱后面帶 @ 和數字的,代表這個任務的第幾版,例如 VSBuild@1 代表 VSBuild 的第一版,
回到 Pipelines 頁面,找到新創建的 Pipeline(名稱為 wpf),點擊進入詳細,可以看到 Runs、Branches、Analytics 三個頁面,點擊 Runs 串列中最上面一條,進入最近一個運行的詳細結果,

點擊 Job 進入運行的詳細結果,可以看到每一個 task 的運行狀況、持續時間,點擊 task 還可以看到具體日志,

3. 下載軟體
剛剛那個 Pipeline 還只是第一步,因為 Build 完就完事了,軟體編譯到哪里了?我怎么下載?接下來就要編輯 這個 Pipeline,加入 PublishBuildArtifacts 任務,
回到 Pipeline 的詳細頁面,點擊右上角的 Edit 按鈕,進入編輯頁面,
編輯頁面左邊是 YAML 編輯器,右邊是可用的 Task 串列,

在右上角的搜索框里輸入 copy 找到 Copy files 這個 Task,點擊進入配置頁面,在 Source Folder 輸入 WPF 專案的 Release 位置,Target Folder 輸入 $(build.artifactstagingdirectory),Build.ArtifactStagingDirectory 是個預定義變數,代表代理服務器上一個路徑,artifact 發布前通常把要發布的內容復制到這個目錄,

點擊 Add 按鈕把這個任務添加到 YAML,
接著搜索 publish 找到 Publish build artifacts 任務,可以直接保留默認值,也可以在 publish location 選項中選擇 A file share,直接復制到指定位置點擊,這里不作修改,Add 添加任務,

完成后可以看到下面這段內容被添加到 YAML 中,最后點擊右上角的 Save,這個 YAML 將保存到 master 的檔案中,由于要修改 master 分支,所以會自動創建一個 Pull request 并運行這個 Pipeline,
- task: CopyFiles@2
inputs:
SourceFolder: 'wpf/bin/release'
Contents: '**'
TargetFolder: '$(build.artifactstagingdirectory)'
- task: PublishBuildArtifacts@1
inputs:
PathtoPublish: '$(Build.ArtifactStagingDirectory)'
ArtifactName: 'drop'
publishLocation: 'Container'
上面是一般做法,也可以在新建 Pipeline 選擇 Use the classic editor to create a pipeline without YAML,之后選擇:
- Select a source:Azure Repos Git
- Team project:wpf
- Repository:wpf
- Default branch…:master
- Featured:.NET Desktop
然后就一切都安排得妥妥當當,再在 Triggers 頁面選中 Enable continuous integration,然后直接點擊 Save & queue 完成創建,

最后,Pipeline 運行完成后,在 Run 的詳細頁面點擊這個按鈕(因為只創建了一個 Publish build artifacts 的 Task,所以結果是 1 published),進入 Artifacts 頁面,即可將發布的內容以 Zip 的形式下載,


4.創建用于驗證提交的 Pipeline
測驗是持續集成的一個重要組成部分,我們可以通過配置分支策略,讓每次代碼合并到 master 分支之前都先通過測驗,那么整個代碼修改的流程就變成這樣:
- 提交 Pull request
- 觸發驗證的 Pipeline
- 驗證通過后代碼合并到 master 分支
- 觸發構建 artifact 的 Pipeline,
現在我們已經有一個 Pipeline了,完全可以用這個 Pipeline 滿足上面的要求,但如果專案很大,編譯測驗耗時很長,最好還是將它拆分成兩個分別用來完成第 2 步和第 4 步的 Pipeline,
具體來說,就是從已經創建的 Pipeline 中洗掉 VSTest 這個 Task,再重新建一個 Pipeline(只包含 NuGetToolInstaller、NuGetCommand、VSBuild、VSTest 等 4 個 Task,并且洗掉 trigger,即不再從 master 分支觸發),將它 Rename 為 wpf-verify,
打開 master 的 Branch Policies 頁面,在 Build Validation 中添加一個編譯策略,Build pipeline 選擇 wpf-verify,點擊保存,

現在,當代碼編譯不通過,或者單元測驗有不通過的測驗,Pull request 檢查不通過,不能合并,

點擊錯誤資訊,可以看到具體出錯的單元測驗,

修改代碼后再提交,所有驗證通過的結果如下:

之后代碼合并到 master 分支并觸發自動構建,整個流程就基本完成了,
5. 最后
對于 wpf 應用來說,Azure Pipelines 的使用還有其它一些問題,將在之后的文章里介紹,
更多的內容可以參考官方檔案:
Azure Pipelines 檔案
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/273487.html
標籤:WPF
