我在Windows上作为域用户帐户下的服务运行Jenkins服务器。
我可以让Jenkins在主服务器上运行时将我的Git Repo(本地托管的Stash服务器)拉到工作区。
我想在Windows从属服务器上执行该作业。我的问题是,当我启动项目时,主服务器首先将任务发送给从站,并且从站尝试执行GIT拉取,但从站没有安装GIT或SSH。
我想避免在我的奴隶上安装SSH和GIT,我希望主人先做拉,然后将工作空间推送到奴隶,然后让奴隶启动它的任务。
这可能吗?是否有插件可以启用此功能?
答案 0 :(得分:2)
我也面临同样的问题,我解决它的方法是创建两个节点和两个作业
Job1 -> Master
Job2 -> Slave
在Job1
中,我从GIT中提取数据并创建war文件,然后使用Copy To Slave
插件将主数据库{Jenkins_Home}/userContent
中的数据复制到从属工作区。
我还使用Post Build Task
插件执行shell脚本,将部署脚本和war一起复制到{Jenkins_Home}/userContent
答案 1 :(得分:2)
所以,我想建议你为此目的找2份工作。第一个工作是绑定到主从,它唯一做的就是从存储库中提取源代码。第二项工作是从第一份工作中获取代码,并为您的工作流程执行任何操作(编译,运行一些预处理器,运行测试等)。
这里的问题是如何在2个作业之间传递代码。我想告诉你2个解决方案。显式复制到另一个工作区是一种非常糟糕的做法(不是干净的工作空间,更改节点会使其失败,更改名称会使其失败等)。
此解决方案最简单,但需要更多时间。这里的主要优点是在从属步骤中保留ENV变量,因此您不需要再次定义它们。 它基于https://wiki.jenkins-ci.org/display/JENKINS/Clone+Workspace+SCM+Plugin。 在第一份工作中,添加一个构建后的步骤: 然后,在您的奴隶工作中选择“源代码管理”: 你已经完成了。
在我的大多数情况下,我需要速度让一切更快,(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
在slave作业中,作为构建步骤,我将工件复制到工作区:
解压缩它:
tar zhxf ./dist/sourceCode.tar.gz -C ./
好处很棒 - 我们不会绑定项目的名称,我们不需要考虑构建运行的位置等 从我与詹金斯(2)一起工作多年来,方法是最快的,也是“最干净的”。