Jenkins: 執行 PowerShell 命令

Jenkins 默認是不支持執行 PowerShell 命令的,須要安裝插件才能完成這樣的任務。本文將介紹 Jenkins PoserShell 插件的基本用法和常見問題。node

安裝 PowerShell 插件

在 Jenkins->Plugin Manager 界面中選擇 "Available" 標籤頁,輸入 "powershell" 進行過濾:shell

選則 "PowerShell plugin",而後點擊 "Install without restart" 按鈕。安裝完成後就可添加 PowerShell 類型的 build step 了:ide

在 build step 中執行 PowerShell 命令

咱們經過 PowerShell 來執行一個簡單的任務:檢查 agent 的操做系統版本和 PowerShell 版本。
先建立一個 Freestyle 類型的 job,而後添加一個 "Windows PowerShell" 類型的 build step,並添加下面的 PowerShell 命令:ui

Write-Host
Write-Host "Windows version info:"[System.Environment]::OSVersion.Version
Write-Host
Write-Host "PowerShell version info:"$host

看起來像這個樣子:spa

保存 job,而後運行它。執行成功後查看運行日誌:操作系統

上圖中的第一行說明了 Jenkins 是如何執行 PowerShell 命令的,其實就是把咱們寫的命令打包到一個 PowerShell 腳本文件中,而後在 agent 上調用 powershell.exe 執行這個腳本。第二個和第三個紅框中則是輸出的系統版本和 PowerShell 版本信息。插件

讓 build step 失敗

接下來咱們發現,不管怎麼執行 PowerShell 命令,build step 的結束狀態都是 "成功"(包括一些命令執行失敗的狀況)!rest

這是不科學的,由於當命令執行失敗或是知足一些條件時,咱們但願 build step 的結束狀態是 "失敗"。後續的 build step 根據前面 step 的結束狀態決定是否執行。
默認狀況下之因此 build step 不會失敗,是由於 PowerShell 執行的過程當中沒有執行 exit 調用!這就致使 Jenkins 沒法判斷執行的命令是否成功退出,默認就認爲都是成功的啦。因此要完善這裏的邏輯就要求咱們必定要在腳本中實現本身的 exit 邏輯:判斷腳本執行成功時調用 exit 0;判斷腳本執行失敗時調用 exit 1(固然你能夠根據本身的須要返回其餘整數)。
做爲 demo,咱們編輯上面的 job 並在最後一行添加 exit 1,保存後執行:日誌

終於可讓 build step 失敗了!orm

Run task as admin

在 Windows 類型的 agent 上執行的任務,有些須要 admin 權限。那麼如何以 admin 權限執行 PowerShell 的命令呢?其實這是由 Jenkins agent 程序運行的權限決定的。
咱們在 agent 上啓動 Jenkins 程序的時候有大概三種選擇,直接運行或者以 run as admin 的方式運行再或者以 Windows Service 方式運行的。若是之後兩種方式運行 Jenkins agent 程序,那麼全部的 task 也會以 admin 的權限運行。

在 pipeline 中執行 PowerShell 命令

毫無疑問,pipeline 將會被愈來愈多的使用。咱們固然應當具有在 pipeline 中執行 PowerShell 命令的能力。還好,Jenkins 剛剛支持了這個功能。建立一個 pipeline 類型的 job,輸入下面的代碼:

node {
     powershell 'Write-Output "Hello, world!";'
 }

而後保存並運行。遺憾的是,這個功能還不完美:

在筆者的環境中,輸出的日誌總帶有一點亂碼,具體緣由不明。猜想是 pipeline 功能對 PowerShell 插件的支持還有小問題。

相關文章
相關標籤/搜索