Jenkins - 上游项目依赖问题

时间:2015-09-27 02:13:04

标签: jenkins jenkins-cli

这是我想要实现的目标:

我有一个jenkins项目,有4个上游项目。但是我不希望在上游作业构建完成时触发这个项目,但是我希望通过远程API触发项目,然后等待上游项目,直到它们完成构建,如果这些项目正在构建。

假设所有4个上游项目都可以从通过API传递的任何分支构建源代码,但我希望下游项目仅在特定分支传递给这些上游项目时启动。

情景:

假设我有两个集群A和B,为了这个问题,我想将我的代码部署到集群A,即前端和后端代码。现在我有一个构建前端的项目和一个构建后端的项目(这两个项目可以根据传递的分支为集群A和B构建代码)。现在,我有两个用于集群A的部署项目,它将部署前端和后端。因此,当我通过分支为集群A构建代码时,它将触发构建项目。但是现在我只想在传递这个特定分支时启动这两个部署项目。

1 个答案:

答案 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并且作业将继续正常