【问题标题】:Run batch scripts on a remote server (windows) from jenkins从 jenkins 在远程服务器(Windows)上运行批处理脚本
【发布时间】:2014-04-28 12:21:47
【问题描述】:

我有一个持续集成服务器 (Jenkins),它构建我的代码(检查编译错误)并运行测试,然后将文件部署到远程服务器(不是 war 文件,而是实际的文件结构)我做这有一个 Jenkins 插件,它允许我通过 samba 传输文件,它每晚都会这样做。

现在,我需要在远程服务器上运行一个 ant 命令。之后我需要在远程服务器上启动应用程序服务器,应用程序服务器是通过从命令行运行一个 .bat 文件来启动的。

我很不知道如何做到这一点,我知道 Jenkins 能够运行批处理命令,但是如何让它们在服务器上下文而不是构建服务器上下文中运行?

【问题讨论】:

  • 我的方法是使用 ssh 任务(<sshexec> 等)远程运行命令。将其包装在构建机器上构建文件中的 Ant 任务中,以通过 sshexec 运行服务器启动脚本。
  • 这取决于远程服务器 Jenkins 运行在什么操作系统上。

标签: windows batch-file deployment ant jenkins


【解决方案1】:

如果 Jenkins 在 Windows 上,在 *nix 上远程,使用plink.exe(本质上是命令行PuTTy

如果 Jenkins 在 Windows 上,远程在 Window 上,使用psexec.exe

如果 Jenkins 在 *nix 上,远程在 *nix 上,使用ssh

如果 Jenkins 在 *nix 上,远程在 Windows,(2015-01 更新)Ansible http://docs.ansible.com/intro_windows.html 支持从 unix/linux 机器调用 Windows 命令,例如 powershell,https://github.com/ansible/ansible-examples/blob/master/windows/run-powershell.yml

告诉我所涉及的操作系统(Jenkins 和远程),我会进一步介绍。

编辑:
psexec.exe 的下载页面列出了所有命令行选项。你会想要一些类似的东西:

psexec \\remotecomputername -u remoteusername -p remotepassword cmd /c <your commands here>
<your commands here> 替换为实际命令,就像从命令提示符执行它们一样。

请注意,psexec 首先需要安装服务,并且需要提升的命令提示符/管理员远程凭据才能执行此操作。
此外,您需要运行一次psexec -accepteula 以接受 EULA 提示。

【讨论】:

  • 两台机器都是windows机器,我会考虑使用psexec.exe。
  • psexec的更多信息编辑了答案
  • 好吧,我找到了winexe,但这只是某人自己的程序。对于更正式的事情,除了在 Windows 上设置 cygwin 并从 Linux sshing 到 cygwin 并执行命令(无论如何可能是 psexec)之外,我想不出任何其他方法
  • @Slav : 如果 Jenkins 在 *nix 上,在 Windows 上远程....... 任何更简单的方法来处理这个用例?
  • @RannLifshitz 抱歉,我没有意识到这一点,但我已经有一段时间没有接触过了
【解决方案2】:

在试用 psexec.exe 一段时间后,我最终采用了不同的方法。

Psexec.exe 和通过网络复制文件有点慢且不稳定,特别是因为我工作的域有一个每月更改密码的策略(这破坏了构建)。

最后我选择了主/从方式,更快更稳定。因为我不必使用 psexec.exe,也不必通过网络复制文件。

【讨论】:

  • 您能否详细说明在这种情况下主/从方法是什么?
  • 您究竟是如何设法执行批处理文件的?我也遇到了 Psexec 的问题...
  • 主从配置可以看这里Master Agent Config
  • 从 Jenkins 开始有一个运行主服务器和所有构建的单一服务器是很常见的,但是 Jenkins 架构基本上是“主+代理”。 Master 设计用于协调并提供 GUI 和 API 端点,Agent 设计用于执行工作。:wiki.jenkins.io/display/jenkins/distributed+builds
【解决方案3】:

按照上面 Slav 的回答,这里是 Jenkins (*nix) 到远程 (windows) 的更简单的解决方案:

  1. 在远程窗口上安装 SSH 服务器(MobaSSH home edition 对我来说效果很好)
  2. 确保您的 Jenkins 用户在您的 Jenkins 计算机上具有打开与远程的 SSH 连接所需的认证(您只需打开一个终端并 ssh 到您的远程一次,然后接受认证。确保它已保存对于 Jenkins 用户)。
  3. 您现在可以在 Jenkins 作业中添加执行 shell 构建阶段,该阶段可以通过 SSH 连接到远程 Windows 计算机。

注意事项:

  1. 已建立的连接可能需要一些额外的工作 - 您可能必须设置 Windows 环境变量或映射网络驱动程序,以便您执行的命令或批处理文件在您的 Windows 计算机上正常工作。
  2. 如果您希望运行与 GUI 相关的操作,此解决方案可能不相关(在我运行需要 GUI 操作的自动化测试的工作之后)。
  3. 使用 Jenkins SSH 插件是一个问题,如 here 所示。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多