7

我需要使用登录的用户凭据通过 Jenkins UI 执行一些 Jenkins 作业,例如“发布到生产”。原因是,我们有单独的支持团队成员,他们可以访问生产盒,而不是开发团队成员。因此,为了将任何代码库部署到生产环境,所有 Windows 部署命令(例如,创建、更新文件、文件夹等)都需要使用有权访问 Production Box 的特定用户凭据运行。因此,即使是无法访问生产框但是 Jenkins 管理员的开发团队成员,执行相同的作业也会因“拒绝访问”而导致失败。仅当支持团队成员使用其凭证运行该作业时,该作业才能成功。

我尝试使用参数化插件,但无法成功将密码传递给包含 MSDeploy 指令的批处理文件。甚至 Jenkins 控制台日志也会显示在其控制台输出中传递的参数,这是一个安全问题。

我检查了基于角色的安全插件,但这对我没有多大帮助。我只需要一个插件,它应该要求用户在开始构建作业之前提供他们的凭据,并且应该使用用户凭据来执行作业,这样我的 MSDeploy 命令将能够在生产盒上部署代码,当支持团队成员使用他们的凭证构建该作业。我希望有人支持模仿。

现在,所有 Jenkins 作业都使用托管 Jenkins 的 Tomcat 服务配置为运行的服务帐户执行。

任何帮助,将不胜感激。

4

3 回答 3

6

以防万一有任何混淆,Jenkins 作业将始终以同一个操作系统用户身份运行。基于 Matrix 的安全性适用于登录 Jenkins 服务器并控制创建或启动作业等功能的用户。

您可以将作业配置为使用一组通用生产凭据,然后阻止您的开发人员调用该作业。

也许更好的方法是将构建代码的过程与部署代码的过程分开。下图(取自xebia-france项目)演示了我最喜欢的一些工具RundeckNexus如何与Jenkins集成。

在此处输入图像描述

最后,我强烈推荐阅读以下链接:

于 2013-06-20T20:14:45.783 回答
5

嗨,我知道我在这个线程上来晚了,但我刚刚陷入这个问题并且很难解决它,所以我想我可以分享我设法设置的内容。

首先要做的事情是:如果您想“作为特定用户”(具有所有正确的能力)运行 Jenkins 作业,最简单的方法是以该用户身份运行 Jenkins SLAVE

然后你很可能会偶然发现以下情况:你可能想在与 windows services相同的 windows 机器上运行多个从属服务器。这很好,只要每个奴隶都有自己的Remote root directory并且可能也有特定的“标签”。

一旦你设法将你的从属服务器作为 Windows 服务运行,启动服务控制台(运行 services.msc)。编辑新创建的服务属性,转到登录选项卡。选择“登录为:此帐户”并输入您的帐户凭据。

干杯:)

于 2017-11-06T15:30:05.727 回答
1

您可以使用内置的 windows runas 或 Powershell InvokeCommand cmdlet 和 -Credential 来运行 - 这两者都会以纯文本形式存储用户名/密码 - 所以请考虑风险,但这会给您带来灵活性。

我很惊讶这没有更好的答案,即在另一台机器上设置代理以作为另一项服务运行,并将代理定义为一种特殊的“类型”,它可以接手工作 - 沿着这些线的东西是我所期望的,但我在 Jenkins 中还没有看到这样的实现(我是 Jenkins 的新手,所以正在寻找答案并找到了这个线程)。

对于更熟悉 Jenkins 的人来说,可以考虑的其他事情是,当您将自定义路径设置为 MSBuild 时,您可以将其设置为 runas /user:... msbuild.exe 吗?我目前没有额外的 Jenkins 服务器来尝试它。

于 2015-12-29T03:53:36.237 回答