在Jenkins上以管理员身份运行批处理文件?

16

我们正在使用运行在Win8 x64上的Jenkins来构建(使用msbuild),打包(使用cspack),运行(使用csrun)和测试(使用nunit)一个Azure云服务项目。Azure云服务仿真器需要以管理员身份运行,我们还需要绑定到端口80/443(因此无法使用“lite”仿真器)。

我们通过一个简单的 .bat 文件来执行以上操作,Jenkins运行该文件。通常情况下,没有用户登录到机器上,它启动并作为一个服务运行,不断监视我们的GIT repo,并在失败时发送电子邮件。只有管理员会手动登录机器来进行维护(例如应用程序补丁或重新启动机器等)。

我们如何配置Jenkins以无需人工干预地以管理员身份运行 .bat?

通过桌面UI,我们可以右键单击命令提示符,以管理员身份运行,确认UAC提示,获得提升权限提示并运行.bat文件。

4个回答

24
我们的解决方案是以单独的本地管理员用户身份运行 Jenkins 服务。安装 Jenkins 后,开始=> '服务' => 滚动到 Jenkins 服务 => 右键单击 => 属性 => “登录” => “此帐户” => 指定本地管理员帐户。 希望在较新的 Jenkins 构建中,它可以作为标准 NETWORK SERVICE 工作,但出于某种原因,它在我们的系统上无法正常工作。

无法找到该选项,在Windows 10中是这样吗? - c4sh
它运行得非常好。我在我的Jenkins实例执行批处理命令时遇到了同样的问题,非常感谢你啊伙计。 - Gustavo Tufiño Fernández

5

解决方案之一:

  1. 在从节点上创建bat文件。
  2. 创建该文件的快捷方式,右键单击该快捷方式,选择属性 -> 高级 -> 勾选以管理员身份运行。
  3. 控制面板 -> 系统和安全 -> 操作中心 -> 更改用户帐户控制设置,并将级别设置为“从不通知”。
  4. 在Jenkins上运行该文件。

某种情况下,该文件将在从节点上执行,但在Jenkins上返回失败。


如果你的文件名是update.bat,那么它的快捷方式就是update.bat.lnk,然后你可以在Jenkins中引用它。 - Peter PitLock
Jenkins无法将.lnk识别为.bat文件...如何解决? - c4sh
1
一些方式可以在从服务器上执行文件,但在 Jenkins 上返回失败。你们找到了一种方法来知道文件是否成功执行了吗? - c4sh

2
这是我的情况:
我需要使用管理员特权控制台来运行编写在Python中的pywinauto脚本,以自动化一些需要管理员特权的应用程序。
我尝试过以下方法:
1. 在我的经验中,将Windows Jenkins从服务安装为服务会带来更多需要处理的问题,因此我不会选择这条路。
2. 创建一个新进程,它将打开一个新的管理员特权shell并在其中运行命令。但是,通过这种方式,Jenkins将无法显示其输出,例如在Blue Ocean中。
对我有用的方法是:
3. 手动打开一个管理员特权控制台,启动your_window_node.jnlp文件,然后这个Jenkins从属节点将具有管理员特权。

0

如果您以管理员身份登录到Windows机器,并从该用户运行从属代理,那么所有内容都将在管理员用户下运行。


我们如何运行从代理?虽然我是新手,但我们已将其安装为服务,并且每当构建服务器机器上线时,该服务就会启动。谢谢! - DeepSpace101
我认为登录到Windows机器的用户并不重要。如果您以管理员用户身份登录,那么就没问题了。 - kazerm
通常情况下,没有用户登录到机器上,它启动并作为服务运行Jenkins,持续监控我们的GIT仓库,并在失败时发送电子邮件。管理员只需登录到机器上进行维护(例如应用补丁或重新启动机器等)。 - DeepSpace101
试试这个:https://dev59.com/C37aa4cB1Zd3GeqPp2ti - kazerm

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接