使用Jenkins管道进行矩阵配置

gio*_*oni 26 jenkins jenkins-pipeline jenkins-blueocean

Jenkins Pipeline插件(也称为Workflow)可以使用其他Multibranch插件进行扩展,以自动构建分支和拉取请求.

运行多个配置的首选方法是什么?例如,使用Java 7和Java 8构建.这通常称为矩阵配置(由于语言版本,框架版本等多种组合)或构建变体.

我试过了:

  • 作为单独的stage步骤串行执行它们.很好,但需要的时间比必要的多.
  • parallel步骤内执行它们,node在其中分配或不分配s.但是我无法使用stage并行内部的步骤来了解它如何可视化的已知限制.

有推荐的方法吗?

Ste*_*ain 15

TLDR:Jenkins.io希望您为每个构建使用节点.

Jenkins.io:在管道编码上下文中,"节点"是执行两件事的步骤,通常是通过从代理上的可用执行程序获取帮助:

  1. 通过将它们添加到Jenkins构建队列来安排其中包含的步骤(这样,只要执行器槽在节点上空闲,就会运行相应的步骤)

  2. 最佳做法是在节点内执行所有重要工作,例如构建或运行shell脚本,因为阶段中的节点块告诉Jenkins其中的步骤资源密集程度足以进行调度,请求代理池中的帮助,只要他们需要就锁定工作区.

Vanilla Jenkins阶段中的节点块看起来像:

stage 'build' {
    node('java7-build'){ ... }
    node('java8-build'){ ... }
}
Run Code Online (Sandbox Code Playgroud)

进一步扩展了这一概念,Cloudbees 用Jenkins撰写关于并行性和分布式构建的文章.您的Cloudbees工作流程可能如下所示:

stage 'build' {
    parallel 'java7-build':{
      node('mvn-java7'){ ... }
    }, 'java8-build':{
      node('mvn-java8'){ ... }
    }
}
Run Code Online (Sandbox Code Playgroud)

您可以通过任一工作流程满足您对可视化管道中不同构建的要求,但我相信Jenkins文档可以获得最佳实践.


编辑

为了解决可视化问题@Stephen希望看到,他是对的 - 它不起作用!Jenkins已经提出了这个问题并在此处记录,涉及使用'标记块'的解决方案仍在进行中 :-(

问:是否有文档允许管道用户不要在并行步骤中放置阶段?

答:不,如果这样做,这被认为是不正确的用法; 阶段仅作为管道中的顶级构造有效,这就是为什么标记块作为单独构造的概念已经出现......而且,我的意思是从管道中的并行步骤中删除阶段.

如果您尝试在并行作业中使用舞台,那么您将度过一段美好时光.

ERROR: The ‘stage’ step must not be used inside a ‘parallel’ block.
Run Code Online (Sandbox Code Playgroud)


Vik*_* Be 5

我建议将声明性矩阵作为在 Jenkins 中运行多个配置的首选方式。它允许您执行每个配置的定义阶段,而无需重复代码。

例子:

pipeline {
    agent none
    stages {
        stage('Test') {
            matrix {
                agent {
                    label "${NODENAME}"
                }
                axes {
                    axis {
                        name 'NODENAME'
                        values 'java7node', 'java8node'
                    }
                }
                stages {
                    stage('Test') {
                        steps {
                            echo "Do Test for ${NODENAME}"
                        }
                    }
                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

请注意,声明式矩阵是本机声明式管道功能,因此不需要安装额外的插件。

Jenkins关于矩阵指令的博客文章。


Ste*_*ing 1

看起来至少BlueOcean UI可以让我们松一口气。这是我得到的(tk-*节点是并行步骤):

在此输入图像描述

  • 这并没有真正回答OP提出的问题。 (5认同)