当前位置: 首页 > 知识库问答 >
问题:

如何使用其他用户凭据执行Jenkins作业

夏理
2023-03-14

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

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

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

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

任何帮助都将不胜感激。

共有3个答案

齐阎宝
2023-03-14

您可以使用内置的windows runas或Powershell InvokeCommand cmdlet和-Credential来运行-这两个命令都将以纯文本形式存储用户名/密码-因此请务必考虑风险,但这为您提供了灵活性。

我很惊讶这没有更好的答案,在另一台机器上设置一个代理作为另一个服务运行,并将代理定义为一种特殊的“类型”来接取作业——这是我所期望的,但我还没有看到这样的实现Jenkins(我是新来的Jenkins所以正在寻找答案并找到了这个线程)。

对于更熟悉Jenkins的人来说,可以考虑的另一个问题是,当您将自定义路径设置为MSBuild时,是否可以将其设置为runas/user:。。。msbuild。也许是exe?我目前没有一个额外的Jenkins服务器可以尝试。

聂翼
2023-03-14

嗨,我知道我在这篇帖子上迟到了,但我刚刚意识到这个问题,很难解决它,所以我想我可以分享一下我的设置。

第一件事:如果您想“作为特定用户”(具备所有正确的能力)运行Jenkins作业,最简单的方法是作为该用户运行Jenkins SLAVE。

然后您很可能会遇到以下情况:您可能希望在与Windows服务相同的Windows机器上运行多个从站。这很好,只要每个从站都有自己的Remote根目录并且可能也有一个特定的“标签”。

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

干杯:)

邰勇军
2023-03-14

为了防止出现任何混淆,Jenkins作业将始终作为同一操作系统用户运行。基于矩阵的安全性适用于登录Jenkins服务器并控制创建或启动作业等功能的用户。

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

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

最后,我强烈建议阅读以下链接:

  • 使用Rundeck和Chef构建devops工具链
 类似资料:
  • 问题内容: 但是我仍然不能以计算神的热爱,以不同的用户身份运行。这是我所做的步骤: 下载适用于jenkins的macosx pkg(LTS) 安装插件等和git 尝试建立它 我不断收到无法克隆的错误,因为詹金斯一直以匿名身份开始: 如何设置它,让詹金斯像我一样运行?我正在使用jenkins Web UI,因此它位于localhost:8080 我也尝试使用/ login登录,但是我什至无法使用我的

  • 问题内容: 我刚刚开始使用Jenkins CI,遇到了一个问题,我很想在文档或在线中找到答案。想知道是否有人可以提供一些建议? 我正在尝试使用它来自动部署托管在Github组织存储库(即私有)上的Django项目的dev和stage分支。目前,我有一个用户“ django”,可以通过Github部署密钥访问Github存储库。我的Jenkins用户无法访问该存储库。解决此问题的最佳实践是什么-我应

  • 问题内容: 我正在使用三角帆Gradle插件创建docker映像并将其推送到Azure容器注册表。到目前为止,我已经向Jenkins添加了用户名/密码凭据,并且需要将它们传递给Gradle。访问或将凭据传递给Gradle,它们会被屏蔽。希望您能够帮助我。以下是代码片段: build.gradle(臂架配置): Jenkinsfile: 编辑:我的用户名中有错字 问题答案: 用户名中有错字。将Jen

  • 我想注册一个应用程序在Azure有能力访问其他Azure用户的监控数据。 我知道你可以注册一个新的应用程序...https://docs.microsoft.com/en-us/Azure/active-directory/develope/quickstart-register-app

  • 我的Jenkins box需要通过REST API访问Stash和Jira。为此,我需要存储他们的凭据。 我的做法是通过Credentials参数,该参数要求我输入名称、凭据类型、必需、默认值和描述。 我将名称定义为CREDENTIAL_PARAMETER,在类型中我将其设置为“带有密码的用户名”,然后我从默认值中的列表中选择一个凭据。 接下来在构建部分中,我定义应该执行一个shell,这类似于

  • 问题内容: 我在声明性jenkins管道中执行以下步骤:我使用libraryResource 创建来自文件夹的脚本。该脚本包含我的用户和某些用户的凭据。 这很好。我可以使用我的用户。现在,我正在寻找最好的方式来包括用户的凭据。我是否需要“嵌套”第二部分,还是可以再次添加“数组”? 问题答案: 当然,您可以使用一个块将多个凭证分配给不同的变量。