當前位置:
首頁 > 知識 > Jenkins:執行 PowerShell 命令

Jenkins:執行 PowerShell 命令

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


安裝 PowerShell 插件

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

Jenkins:執行 PowerShell 命令

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

Jenkins:執行 PowerShell 命令


在 build step 中執行 PowerShell 命令

我們通過 PowerShell 來執行一個簡單的任務:檢查 agent 的操作系統版本和 PowerShell 版本。先創建一個 Freestyle 類型的 job,然後添加一個 "Windows PowerShell" 類型的 build step,並添加下面的 PowerShell 命令:

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

看起來像這個樣子:

Jenkins:執行 PowerShell 命令

保存 job,然後運行它。執行成功後查看運行日誌:

Jenkins:執行 PowerShell 命令

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


讓 build step 失敗

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

Jenkins:執行 PowerShell 命令

這是不科學的,因為當命令執行失敗或是滿足一些條件時,我們希望 build step 的結束狀態是 "失敗"。後續的 build step 根據前面 step 的結束狀態決定是否執行。

默認情況下之所以 build step 不會失敗,是因為 PowerShell 執行的過程中沒有執行 exit 調用!這就導致 Jenkins 無法判斷執行的命令是否成功退出,默認就認為都是成功的啦。所以要完善這裡的邏輯就要求我們一定要在腳本中實現自己的 exit 邏輯:判斷腳本執行成功時調用 exit 0;判斷腳本執行失敗時調用 exit 1(當然你可以根據自己的需要返回其他整數)。

作為 demo,我們編輯上面的 job 並在最後一行添加 exit 1,保存後執行:

Jenkins:執行 PowerShell 命令

終於可以讓 build step 失敗了!


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!";"
}

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

Jenkins:執行 PowerShell 命令

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


總結

到目前為止,Jenkins 已經實現了對 PowerShell 的主流支持。期待 Jenkins 逐步的完善還存在的一些小問題,畢竟 MS 已經開始用 PowerShell 取代 bat 了。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 科技優家 的精彩文章:

Dubbo源代碼分析七:使用executes屬性的一個問題
C 構造和析構

TAG:科技優家 |

您可能感興趣

Brookstone Partners宣布免去Omar Belmamoun先生的Brookstone Partners Morocco董事長兼首席執行官職務
BackOffice Associates晉陞Kevin Campbell為首席執行官
Solera Holdings宣布Jeffrey R.Tarr為新任首席執行官
Imagination任命Nigel Leeder為執行副總裁,負責PowerVR業務部門
HIFI專訪:Playback Designs創辦人兼執行長Kndreas Koch
ManageEngine Applications Manager 遠程代碼執行漏洞
「矽谷教父」John L.Hennessy出任 Alphabet 首席執行官
Pinterest聘請前Google執行長Francoise Brougher 擔任其首任首席運營官
看我如何通過Tor Onion在Windows中執行遠程Shell
Google Fuchsia操作系統可執行Android程序
如何利用PowerShell診斷腳本執行命令並繞過AppLocker
js中setTimeOut()和setInterval()的使用——程序執行時間控制
Immersion與TDK Electronics達成為PowerHap壓電式執行器提供觸覺設計和營銷服務的協議
Coinbase僱傭前Fannie Mae執行副總裁Brian Brooks擔任首席法律官
Microsoft Exchange Server遠程代碼執行漏洞-高危
TensorFlow 2.0將把Eager Execution變為默認執行模式
EntityFramework Core 2.0執行原始查詢如何防止SQL注入?
Open Garden首席執行官Paul Hainsworth:讓普通消費者從移動網路傳輸中受益
Adrian小哥教程:如何使用Tesseract和OpenCV執行OCR和文本識別
Oracle Database 12c In-Memory特性之執行計劃對比