【问题标题】:How to include domain user in Jenkins Job execution如何在 Jenkins 作业执行中包含域用户
【发布时间】:2018-02-26 12:59:12
【问题描述】:

我正在自动化构建过程。该过程需要将应用程序部署到服务器上,部署后必须执行一些脚本来共享和提供服务器上的权限。当我通过 powershell 通过域用户登录时脚本运行。我使用 Jenkins 进行 CI/CD 过程。我想包含我的域凭据以在服务器上运行脚本。我也使用了活动目录插件,并且可以使用我的域凭据登录,但我仍然无法与服务器建立远程连接。

我的脚本是

Enter-PSSession -ComputerName ATKT-WS-20
Invoke-Expression -Command .\FolderSharingScript.ps1 

Enter-PSSession:连接到远程服务器 ATKT-WS-20 失败并显示以下错误消息:WinRM 无法 处理请求。使用 Kerberos 身份验证时出现以下错误,错误代码为 0x8009030e:A 指定的登录会话不存在。它可能已被终止。
可能的原因有: - 指定的用户名或密码无效。 -Kerberos 在没有指定身份验证方法和用户名时使用。 -Kerberos 接受域用户名,但不接受本地用户名。 - 远程计算机名称和端口的服务主体名称 (SPN) 不存在。 -客户端和远程计算机在不同的域中,两个域之间没有信任。 检查上述问题后,请尝试以下操作: - 检查事件查看器以获取与身份验证相关的事件。 -改变认证方式;将目标计算机添加到 WinRM TrustedHosts 配置设置或 使用 HTTPS 传输。 请注意,TrustedHosts 列表中的计算机可能未经过身份验证。

我还在trustedhosts 中添加了机器名称。如何在 Jenkins 作业中包含域凭据?

【问题讨论】:

  • 顺便说一句,无论凭据问题如何:Enter-PSSession 用于交互式使用。相反,要么将Invoke-Command -ComputerName 用于一次性命令,要么使用New-PSSession 创建会话对象以用于多个Invoke-Command -Session 调用。
  • 不,不起作用
  • 我知道:这就是为什么我将我的评论归类为 aside 并说“无论凭据问题如何”:这是您需要做出的调整,但它本身就是不足以解决您的问题;您仍然需要解决凭据问题 - 请参阅下一条评论。
  • 一些高级指针:(a) 以域用户身份运行 Jenkins 服务(可能不是一个好主意),(b) 在目标机器上安装 Jenkins 代理并在上下文中运行它域用户,然后使用 Jenkins PowerShell 插件直接运行感兴趣的代码,(c) 使用 DPAPI 在运行 Jenkins 服务的用户的上下文中将凭据保存到文件中(这可能是一个挑战默认NT AUTHORITY\SYSTEM(LocalSystem)帐户),然后构造一个[pscredential]实例传递给-Credential; (d) 考虑使用带有私钥文件的 SSH。
  • 啊,是的。它现在工作。非常感谢~

标签: windows powershell jenkins dns continuous-deployment


【解决方案1】:

结果证明根本不使用 PowerShell 的远程处理,而是依赖 Jenkins 中内置的远程处理:

  • 将远程计算机作为 Jenkins 代理连接到 Jenkins 服务器,以所需域用户的身份运行代理可执行文件。

  • 在 Jenkins 服务器上,确保您的作业配置为使用标签表达式在远程计算机上运行。

  • 假设已安装 PowerShell 插件,您可以将 PowerShell 代码按原样发送到远程计算机 - 无需 PowerShell 会话、凭据等...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-22
    • 1970-01-01
    • 1970-01-01
    • 2017-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多