Jenkins迁移至Server2008执行Powershell无响应

版本issue

Windows Server 2K8的powershell版本默认为2.0。因版本过时,在使用过程中存在功能缺失、无法由Jenkins直接调用,cmd调用时exit code不更新%errorlevel%字段等问题,因此简直升级至最新版本根除隐患。

相关链接:

微软官方技术支持1
微软官方技术支持2

简单来说:

  1. SP1-Windows 2008 R2
  2. Microsoft .NET Framework 4.5.1) (Offline Installer)
  3. Windows Management Framework 4.0

安装后重启即可


以下内容因未能从根源解决问题被标注过期供参考

现象

将Jenkins从2k16迁移至2k8的服务器时,发生了jenkins pipeline中powershell脚本无响应的问题。

问题

无法通过下述方式直接执行powershell脚本。

1
2
3
4
powershell
'''
#powershell scripts
'''

由于系统原因,jenkins直接调用powershell,在执行过程中不会正常停止,也不会正常返回错误信息。

  • Execution Policy

虽然在服务器上已经更新了执行策略,但在jenkins调用时仍会提示策略为Restrict。

  • x86 or x64

将使用的第三方包发布至%WINDIR%\System32\WindowsPowerShell\v1.0\Modules,执行Import-Module时找不到相关的包。

解决

  • 将jenkinsfile文件中的powershell脚本迁出至script.ps1,通过bat ‘powershell -f script.ps1’方式间接执行脚本。
  • 在脚本执行前,添加powershell Set-ExecutionPolicy Bypass,提升jenkins调用的powershell环境的执行权限。
  • 将第三方包分别添加至%WINDIR%\System32\WindowsPowerShell\v1.0\Modules%WINDIR%\SysWOW64\WindowsPowerShell\v1.0\Modules中。确保第三方包可以被正常引用。

通过以上调整,问题解决。