Jenkins: 执行 PowerShell 命令
Jenkins 默認是不支持執(zhí)行 PowerShell 命令的,需要安裝插件才能完成這樣的任務(wù)。本文將介紹 Jenkins PoserShell 插件的基本用法和常見問題。
安裝 PowerShell 插件
在 Jenkins->Plugin Manager 界面中選擇 "Available" 標簽頁,輸入 "powershell" 進行過濾:
選則 "PowerShell plugin",然后點擊 "Install without restart" 按鈕。安裝完成后就可添加 PowerShell 類型的 build step 了:
在 build step 中執(zhí)行 PowerShell 命令
我們通過 PowerShell 來執(zhí)行一個簡單的任務(wù):檢查 agent 的操作系統(tǒng)版本和 PowerShell 版本。
先創(chuàng)建一個 Freestyle 類型的 job,然后添加一個 "Windows PowerShell" 類型的 build step,并添加下面的 PowerShell 命令:
看起來像這個樣子:
保存 job,然后運行它。執(zhí)行成功后查看運行日志:
上圖中的第一行說明了 Jenkins 是如何執(zhí)行 PowerShell 命令的,其實就是把我們寫的命令打包到一個 PowerShell 腳本文件中,然后在 agent 上調(diào)用 powershell.exe 執(zhí)行這個腳本。第二個和第三個紅框中則是輸出的系統(tǒng)版本和 PowerShell 版本信息。
讓 build step 失敗
接下來我們發(fā)現(xiàn),無論怎么執(zhí)行 PowerShell 命令,build step 的結(jié)束狀態(tài)都是 "成功"(包括一些命令執(zhí)行失敗的情況)!
這是不科學(xué)的,因為當命令執(zhí)行失敗或是滿足一些條件時,我們希望 build step 的結(jié)束狀態(tài)是 "失敗"。后續(xù)的 build step 根據(jù)前面 step 的結(jié)束狀態(tài)決定是否執(zhí)行。
默認情況下之所以 build step 不會失敗,是因為 PowerShell 執(zhí)行的過程中沒有執(zhí)行 exit 調(diào)用!這就導(dǎo)致 Jenkins 無法判斷執(zhí)行的命令是否成功退出,默認就認為都是成功的啦。所以要完善這里的邏輯就要求我們一定要在腳本中實現(xiàn)自己的 exit 邏輯:判斷腳本執(zhí)行成功時調(diào)用 exit 0;判斷腳本執(zhí)行失敗時調(diào)用 exit 1(當然你可以根據(jù)自己的需要返回其他整數(shù))。
作為 demo,我們編輯上面的 job 并在最后一行添加 exit 1,保存后執(zhí)行:
終于可以讓 build step 失敗了!
Run task as admin
在 Windows 類型的 agent 上執(zhí)行的任務(wù),有些需要 admin 權(quán)限。那么如何以 admin 權(quán)限執(zhí)行 PowerShell 的命令呢?其實這是由 Jenkins agent 程序運行的權(quán)限決定的。
我們在 agent 上啟動 Jenkins 程序的時候有大概三種選擇,直接運行或者以 run as admin 的方式運行再或者以 Windows Service 方式運行的。如果以后兩種方式運行 Jenkins agent 程序,那么所有的 task 也會以 admin 的權(quán)限運行。
在 pipeline 中執(zhí)行 PowerShell 命令
毫無疑問,pipeline 將會被越來越多的使用。我們當然應(yīng)當具備在 pipeline 中執(zhí)行 PowerShell 命令的能力。還好,Jenkins 剛剛支持了這個功能。創(chuàng)建一個 pipeline 類型的 job,輸入下面的代碼:
node {powershell 'Write-Output "Hello, world!";'}然后保存并運行。遺憾的是,這個功能還不完美:
在筆者的環(huán)境中,輸出的日志總帶有一點亂碼,具體原因不明。猜測是 pipeline 功能對 PowerShell 插件的支持還有小問題。
總結(jié)
到目前為止,Jenkins 已經(jīng)實現(xiàn)了對 PowerShell 的主流支持。期待 Jenkins 逐步的完善還存在的一些小問題,畢竟 MS 已經(jīng)開始用 PowerShell 取代 bat 了。
本文轉(zhuǎn)自sparkdev博客園博客,原文鏈接:http://www.cnblogs.com/sparkdev/p/7224171.html,如需轉(zhuǎn)載請自行聯(lián)系原作者
總結(jié)
以上是生活随笔為你收集整理的Jenkins: 执行 PowerShell 命令的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Centos 安装 NodeJS
- 下一篇: excel随机数的获取