【问题标题】:Force Jenkins to Pull from GIT on master强制詹金斯从 GIT 中拉出 master
【发布时间】:2015-04-28 22:37:31
【问题描述】:

我有一个 Jenkins 服务器在 Windows 上作为域用户帐户下的服务运行。

当在主服务器上运行时,我可以让 Jenkins 将我的 Git Repo(本地托管的 Stash 服务器)拉到工作空间。

我想在 Windows 从属服务器上执行该作业。我的问题是,当我启动项目时,主服务器首先将任务发送给从服务器,从服务器尝试进行 GIT 拉取,但从服务器没有安装 GIT 或 SSH。

我想避免在我的从服务器上安装 SSH 和 GIT,我希望主服务器先进行拉取,然后将工作空间推送到从服务器,然后让从服务器启动它的任务。

这可能吗?是否有插件可以启用此功能?

【问题讨论】:

  • 我不久前遇到了同样的问题并得出了同样的结论。
  • 为什么不干脆把工作粘在master上,然后归档工作区(或者只是把它作为一个工件),然后把它发送给一个slave?
  • @Stanjer 如果我理解正确,您是在建议两份工作吗?一个对主设备进行拉动,然后另一个对从设备进行拉动,从第一个获取工作空间?
  • 是的,当然。我无法想象这里有其他方式。事实上,当你有一个工作正在创建你的工作空间,然后将它发送到不同的从节点进行构建、测试等时,这是一种常见的做法
  • @Stanjer 从服务作为本地机器运行,所以我猜第一个工作必须是复制到从服务器上某个已知位置的工作。因此,作业 1 的最后构建步骤是将其工作空间复制到 \\slave\jenkins\job2\workspace。我猜那么 job2 的配置只会引用 $workspace。我只希望在 VCS 设置中有一个复选框,上面写着“将任务限制为 Master”或其他内容。这感觉很繁琐,但我可以看到它是如何工作的。

标签: git ssh jenkins


【解决方案1】:

因此,我想建议您为此准备 2 份工作。第一项工作是绑定到主从,它唯一做的就是从存储库中提取源代码。第二项工作是从第一项工作中获取代码并执行您的工作流程所需的任何操作(编译、运行一些预处理器、运行测试等)。

这里的问题是如何在 2 个作业之间传递代码。我想让你告诉2个解决方案。显式复制到另一个工作区是一种非常糟糕的做法(不干净的工作区,更改节点会失败,更改名称会失败等)。

  1. 此解决方案是最简单的,但比其他解决方案需要更多时间。这里的主要优点是在从属步骤中保留 ENV 变量,因此您无需再次定义它们。 它基于 https://wiki.jenkins-ci.org/display/JENKINS/Clone+Workspace+SCM+Plugin 。 在您的第一份工作中,添加一个构建后步骤: 然后,在您的从属工作中选择“源代码管理”: 你就完成了。

  2. 在我的大多数情况下,我需要速度来让一切变得更快,(1) 方法并不总是适合我。这就是我使用 https://wiki.jenkins-ci.org/display/JENKINS/Copy+Artifact+Plugin 的原因。 作为我执行的最后一个构建步骤的主工作(假设我使用的是 linux 或者我为 Windows 安装了 bash 工具,如果没有,那么在 Win 上你应该使用 zip)一些 bash 命令: tar -hzcf dist/sourceCode.tar.gz ./* --exclude=dist --exclude=".git" 然后在构建后操作Archive the artifacts,定义我要归档dist/sourceCode.tar.gz 在从属作业中,作为构建步骤,我将工件复制到工作区: 并解压: tar zhxf ./dist/sourceCode.tar.gz -C ./

好处是巨大的——我们没有绑定到项目的名称,我们不需要考虑构建在哪里运行等 从我多年来与 Jenkins 合作的经验来看,(2) 方法是最快的,也是“最干净”的。

【讨论】:

  • 这行得通。我有一个 GIT web hook 可以启动第一个工作,第二个的触发器将是第一个的完成。这样,我可以有任意数量的工作,由工作 1 的完成触发,工作 1 不必知道。谢谢。
【解决方案2】:

我也遇到了同样的问题,我解决它的方法是创建两个节点和两个作业

Job1 -> Master
Job2 -> Slave

Job1,我从GIT 中提取数据并创建一个war 文件,然后使用Copy To Slave 插件将数据从master 的{Jenkins_Home}/userContent 复制到slave 工作区。

我还使用Post Build Task 插件来执行shell 脚本,该脚本将部署脚本与战争一起复制到{Jenkins_Home}/userContent

主作业


从属作业

【讨论】:

    猜你喜欢
    • 2015-05-11
    • 1970-01-01
    • 1970-01-01
    • 2017-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-22
    • 1970-01-01
    相关资源
    最近更新 更多