VSTS 雲到地的 CI CD (10) - 撰寫 PowerShell in Build & Release 的小技巧

你可以指定做些 powershell script 在 Build 或 Release 階段

這是一個非常彈性且強大的作法

今天要介紹的是 powershell script 如何搭配一些特殊的 command

來讓 VSTS 的 Log 上的呈現應用更加直覺

Write-Warning

寫入警告資料流

以黑色文字且前綴 WARNGING: 呈現

顯示警告後再繼續執行命令並不影響之後的 Process

Write-Host + task.logissue type=warning

自訂輸出寫入主控程式 + task.logissue type=warning

以黃色文字且前綴 ##[warning] 呈現

Build Summary Issues 會顯示訊息

是個寫警告訊息的一個好方式 

Write-Error

寫入錯誤資料流

以紅色文字且前綴 [##error] path 呈現

Build Summary Issues 會顯示額外訊息

中斷之後的 Process

Write-Host + task.logissue type=error

以紅色文字且前綴 ##[error] 呈現

Build Summary Issues 會顯示訊息

不會中斷之後的 Process

Process 中斷的關鍵原因

注意到同樣都是拋出 Error 訊息, 只有 Write-Error 會中斷後續的 Process

task.logissue type=error 而是會繼續執行剩下的 subsequent

如果修改範例把 powershell script 改成如下

代碼中第一行 Write-Error 寫入了錯誤資料流

當下並不會中斷整個 Process, 會繼續把剩下的指令做完

該 Process 完成時才會去檢查錯誤資料流

但若你想要直接有錯誤不跑接下來的邏輯

那就必須使用這個指令 exit 1

可以觀察出剩下的代碼與後面的 Process 都被中斷

Write-Errorexit 1 的使用取捨在於該 script 要做的邏輯前後是否有依賴關係

設置環境變量

可以使用 $env:DynamicVariable = "xxx"

這方式可在 Current Task 使用

欲想要在之後的 Process 都讀取到新設定的環境變量的話

則必須借助特殊的 Command: Write-Host "##vso[task.setvariable variable=DynamicVariable]Persistent Value Set In Script"

進度呈現

Write-Host "##vso[task.setprogress value=$i;]Sample Progress Indicator"

使用這個 Command 可以在當前 Process Name 旁顯示數值

相關連結

Tips for Writing PowerShell Scripts to Use in Build and Release Tasks

PowerShell 基本語法及常用命令

Windows PowerShell 說明

Microsoft / vsts-tasks/commands.md