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 插件的支持还有小问题。

相关文章
相关标签/搜索