【问题标题】:Why can't I get the Jenkins Powershell plugin to work?为什么我不能让 Jenkins Powershell 插件工作?
【发布时间】:2013-08-08 23:58:13
【问题描述】:

为什么我不能让 Jenkins“Powershell 插件”工作?

我可以使用“执行 windows 批处理命令”构建步骤在 Jenkins 上运行 powershell 脚本,并使用以下命令:

powershell -ExecutionPolicy ByPass -File script.ps1

但我无法使用“Windows Powershell”构建步骤和此命令使用 Jenkins“Powershell 插件”运行 powershell 脚本,因为 Windows 执行策略未设置错误,不允许它运行:

script.ps1

有谁知道正确的参数给 Jenkins“Powershell 插件”以使其成功运行脚本?否则,我将只使用批处理脚本解决方法。

【问题讨论】:

    标签: powershell jenkins powershell-2.0 jenkins-plugins


    【解决方案1】:

    正确的做法是在您的机器上设置执行策略(一次性操作),此时您不需要每次都绕过它,Jenkins 插件应该“正常工作”。你不能吗?

    一个合理的起始设置是 RemoteSigned,这将允许您正常执行本地脚本,但仍会禁止从 Internet 下载脚本。

    在提升的 PowerShell 提示符下,您将运行:

    Set-ExecutionPolicy RemoteSigned
    

    另请参阅:http://technet.microsoft.com/library/hh849812.aspx

    更新:关于应用政策及其行为方式的帮助摘录:

    如果为本地计算机设置执行策略(默认) 或当前用户,更改保存在注册表中并保持 在您再次更改之前有效。

    当然,如果您的计算机位于域中,则组策略可以恢复这一点。

    【讨论】:

    • 我试过了,但它似乎没有坚持下去。当你这样做时,它应该是全球性的和永久性的吗?如果是这样,我从来没有注意到。
    • 它是永久性的,但从您发现的情况看来,它默认具有特定于您的用户的范围
    • 你的 Jenkins 盒子在域上吗?它没有坚持的原因可能是组策略正在定义特定的 ExecutionPolicy。
    • 你可能是对的。我有 2 个域,它们位于不同的域中,它们似乎表现出不同的行为。我需要更仔细地检查。感谢您的提醒。我相信你是对的,而且它通常是持久的。
    • 向域管理员请求在组策略中为您的构建机器请求 RemoteSigned ExecutionPolicy 应该是一个非常合理的请求。或者,您可以变得聪明并尝试以某种方式为“SYSTEM”用户的“user”范围设置 executionPolicy...
    【解决方案2】:

    对于防重启解决方案,请输入这一行

    powershell Set-ExecutionPolicy -Scope CurrentUser RemoteSigned -Force

    在所有用户 Startup 文件夹中的批处理文件中,在 Windows 7 上为 C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup

    (或者您可以通过单击开始 -> 所有程序 到达那里,右键单击启动 并单击打开所有用户)

    这就是我让 Jenkins 在受组策略约束的域机器上执行 PS 脚本的方式,而无需涉及系统管理员;-)

    【讨论】:

    • 谢谢,这是个好主意,但我标记为已接受的答案对我来说一直有效,而无需执行启动脚本。
    【解决方案3】:

    经过实验,我意识到由于Jenkins作为系统用户作为服务运行,那么powershell范围与我的终端服务登录会话使用的范围不同。

    此脚本适用于我,并且似乎正确设置了注册表项,以便该设置在重新启动和新登录后保持不变。

    # SetExecutionPolicyToRemoteSigned.ps1
    # Need to run this after every server reboot.
    Write-Output "Setting local Powershell policy to RemoteSigned"
    Write-Output ""
    
    Set-ExecutionPolicy -scope CurrentUser Undefined -Force
    #Set-ExecutionPolicy -scope Process Undefined -Force
    Set-ExecutionPolicy -scope LocalMachine Undefined -Force
    
    Set-ExecutionPolicy -scope CurrentUser RemoteSigned -Force
    #Set-ExecutionPolicy -scope Process RemoteSigned -Force
    Set-ExecutionPolicy -scope LocalMachine RemoteSigned -Force
    
    Write-Output "Finished."
    
    Get-ExecutionPolicy -list
    Start-Sleep -s 10
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-27
      • 1970-01-01
      相关资源
      最近更新 更多