这是我想要实现的目标:
我有一个jenkins项目,有4个上游项目。但是我不希望在上游作业构建完成时触发这个项目,但是我希望通过远程API触发项目,然后等待上游项目,直到它们完成构建,如果这些项目正在构建。
假设所有4个上游项目都可以从通过API传递的任何分支构建源代码,但我希望下游项目仅在特定分支传递给这些上游项目时启动。
情景:
假设我有两个集群A和B,为了这个问题,我想将我的代码部署到集群A,即前端和后端代码。现在我有一个构建前端的项目和一个构建后端的项目(这两个项目可以根据传递的分支为集群A和B构建代码)。现在,我有两个用于集群A的部署项目,它将部署前端和后端。因此,当我通过分支为集群A构建代码时,它将触发构建项目。但是现在我只想在传递这个特定分支时启动这两个部署项目。
答案 0 :(得分:0)
如果你想远程控制构建,那么使用Jerkins cli - 我发现它非常有用http://jenkinshost:8080/cli
您需要正确获取ssh密钥配置,使用Jenkins用户配置(而不是在命令行上)将运行cli的用户的公钥添加到要在Jenkins中运行作业的用户
使用
测试密钥设置java -jar jenkins=cli.jar -s http://jenkinshost:8080 who-am-i
然后应该报告将用于在Jenkins中运行构建的用户
但我认为您可以使用条件构建步骤插件来解决您的问题
https://wiki.jenkins-ci.org/display/JENKINS/Conditional+BuildStep+Plugin
这将允许您在构建步骤周围放置一个条件包装器,即
if branch==branchA then
trigger step - deploy to clusterA
if branch==branchB then
trigger step - deploy to clusterB
就个人而言,我发现这个插件有点笨重,这使得作业配置页面有点混乱
我提出的另一个解决方案是始终调用子工作,然后让它决定它是否运行。
所以我在子作业开始时有一个脚本步骤,看它是否应该运行
if [${branch}="Not the right branch name" ] ; then
echo "EXIT_GREEN"
exit 1
fi
您现在已经失败了这项工作,这会导致父作业变红,但是通过使用Groovy Postbuild插件https://wiki.jenkins-ci.org/display/JENKINS/Groovy+Postbuild+Plugin,您可以添加像这样的帖子构建步骤
if (manager.logContains(".*EXIT_GREEN.*")) {
manager.addBadge("info.gif","This job had nothing to do")
manager.build.@result = hudson.model.Result.SUCCESS
}
子作业已运行为绿色(对构建有一个信息图标)但实际上没有做任何事情。显然,如果分支是您想要部署的分支,那么第一个脚本步骤不会运行exit 1
并且作业将继续正常