强制 Jenkins 从 master 上的 GIT 拉取

Force Jenkins to Pull from GIT on master

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

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

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

我想避免在我的从机上安装 SSH 和 GIT,我希望主机先进行拉取,然后将工作 space 推送到从机,然后让奴隶开始它的任务。

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

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

Job1 -> Master
Job2 -> Slave

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

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

大师级工作


奴隶工作

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

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

  1. 这个解决方案是最简单的,但比另一个需要更多的时间。这里的主要优点是在从属步骤中保留 ENV 变量,因此您不需要再次定义它们。 它基于 https://wiki.jenkins-ci.org/display/JENKINS/Clone+Workspace+SCM+Plugin 。 在您的第一份工作中,添加一个 post-build 步骤: 然后,在你的奴隶工作中选择 "Source code Management": 大功告成。

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

好处是巨大的——我们不受项目名称的约束,我们不需要考虑构建在哪里 运行 等等 从我与 Jenkins (2) 合作的这些年来看,方法是最快的,"cleanest" 也是。