【问题标题】:Jenkins - Upstream project dependency issueJenkins - 上游项目依赖问题
【发布时间】:2015-09-30 16:05:25
【问题描述】:

这是我想要实现的目标:

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

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

场景:

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

【问题讨论】:

    标签: jenkins jenkins-cli


    【解决方案1】:

    如果您想远程控制构建,请使用 Jerkins cli - 我发现它非常有用 http://jenkinshost:8080/cli

    您需要正确配置 ssh 密钥,将运行 cli 的用户的公钥添加到要使用 Jenkins 用户配置在 Jenkins 中运行作业的用户(不在命令行上

    测试密钥设置

    java -jar jenkins=cli.jar -s http://jenkinshost:8080 who-am-i
    

    这应该会报告哪个用户将用于在 Jenkins 中运行构建


    但我认为您可以使用 Conditional Build Step 插件解决您的问题

    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,你可以像这样添加一个 post build 步骤

    if (manager.logContains(".*EXIT_GREEN.*")) {
        manager.addBadge("info.gif","This job had nothing to do")
        manager.build.@result = hudson.model.Result.SUCCESS
    }
    

    子作业已绿色运行(带有针对构建的信息图标),但实际上没有做任何事情。显然,如果分支是您要部署的分支,那么第一个脚本步骤不会运行 exit 1 并且作业会照常继续

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-11
      • 1970-01-01
      • 2012-03-18
      • 1970-01-01
      • 1970-01-01
      • 2014-09-14
      • 2015-08-06
      • 1970-01-01
      相关资源
      最近更新 更多