有人可以帮助我使用可以执行以下操作的Jenkins脚本吗?
1---2---3-----------9---10
| |
|---4-------|
| |
|---5---6---|
| |
|---7---|
1: Start pipeline
10: End pipeline
5: Build some files
* needed by 6, 7,
* needed as artifacts at the end
2, 3, 4, 6, 7: Have jUnit result files, should be available at end of
test (somewhere), even if one failed
这有可能吗?还是我应该在3、4、5之后加入?像这样:
1---2---3-------6-------9---10
| | | |
|---4---| 7---|
| |
|---5---|
#1 楼
根据对我的问题的评论以及一些基本测试,以下内容似乎可以正常工作:使用嵌套并行语句。 (感谢@lawnmowerlatte)
尽管今天(2017年5月15日),詹金斯·蓝海(Jenkins Blue ocean)并没有正确地将其形象化。此处讨论的可能解决方案
评论
Jenkins管道刚刚告诉我:“矩阵”或“并行”不能嵌套在另一个“矩阵”或“并行”中-因此,我担心此答案并非普遍有效。
–里克·莫里茨(Rick Moritz)
20-05-25在17:34
@RickMoritz从biniosuaf的答案中可以看出:如果您移至脚本化管道,则有可能。看来,如果您希望保留在声明式管道世界中,那么您将陷入困境,而没有任何并行管道。
– Vser
20 Dec 4'在17:44
#2 楼
我有一种类似的情况,我想将其他并行作业线程嵌套在另一个并行作业线程中。该代码为我工作:def performDeploymentStages(String node, String app) {
stage("build") {
echo "Building the app [${app}] on node [${node}]"
}
stage("deploy") {
echo "Deploying the app ${app}] on node [${node}]"
}
stage("test") {
echo "Testing the app [${app}] on node [${node}]"
}
}
pipeline {
agent {
label 'master'
}
parameters {
string(name: 'NODES', defaultValue: '1,2,3', description: 'Nodes to build, deploy and test')
choice(name: 'ENV', choices: 'qa', description: 'Environment')
string(name: 'APPS', defaultValue: 'app01,app02', description: 'App names')
}
stages {
stage('parallel stage') {
steps {
script {
def nodes = [:]
for (node in params.NODES.tokenize(',')) {
def apps = [:]
for (app in params.APPS.tokenize(',')) {
performDeploymentStages(node, app)
}
parallel apps
}
parallel nodes
}
}
}
}
}
要充分利用并行运行,请记住分配足够的执行程序。
评论
无需将值分配给节点和app变量,此代码段是否起作用?
– jellenberger
19年2月8日在5:17
@jellenberger,如果这些变量为空(空/空字符串),它将不起作用。但是传递单个项目(单个应用程序或节点)而不用逗号也可以。
– biniosuaf
19-2-15在12:26
评论
我会投票支持第二种选择,如果需要的话,听起来不太可能破裂,而且更容易扩展。可能很密集,但我还不了解更复杂的版本所添加的内容。您可以记录“ 9”的含义和含义吗?如果您要修改并添加,则没有8。 :)
@BertGoethals您可以使用Pipeline,但仍然有不同的工作。我可能在这里错过了一些东西。
几天前我试图做类似的事情。我可以使它与嵌套的并行命令一起使用,但是在BlueOcean中该流程看起来不正确。
@BertGoethals不能从主管道开始执行5、6和7的另一个管道吗?