【发布时间】:2020-02-19 14:09:11
【问题描述】:
我有一个字符串参数 Name = "HOST" 的 Jenkins 工作。我正在尝试通过连接到主机来远程运行一个脚本。它工作正常。同样,如果我在 HOST 参数中输入多个主机名,则作业必须在这些多台机器上并行运行。如何做到这一点?
如果有人对此有任何代码,请分享。感谢您的帮助!
【问题讨论】:
标签: jenkins jenkins-pipeline jenkins-groovy jenkins-cli
我有一个字符串参数 Name = "HOST" 的 Jenkins 工作。我正在尝试通过连接到主机来远程运行一个脚本。它工作正常。同样,如果我在 HOST 参数中输入多个主机名,则作业必须在这些多台机器上并行运行。如何做到这一点?
如果有人对此有任何代码,请分享。感谢您的帮助!
【问题讨论】:
标签: jenkins jenkins-pipeline jenkins-groovy jenkins-cli
在不同机器上并行运行作业的简单方法是使用declarative Matrix。
管道示例:
pipeline {
agent none
stages {
stage('Matrix stage') {
matrix {
agent {
label "${NODE}"
}
axes {
axis {
name 'NODE'
values 'node1', 'node2', 'node3'
}
}
stages {
stage('Parallel stage') {
steps {
echo "Run on ${NODE}"
}
}
}
}
}
}
}
此管道将在 ['node1', 'node2', 'node3'] 上并行执行定义的阶段。
请注意,声明式矩阵是本机声明式管道功能,因此无需额外安装插件。
【讨论】:
由于无法参数化矩阵轴值,这可能是一种方法(带有脚本块的声明性管道语法):
def deploys = [:]
def servers = ['host1','host2','host3']
pipeline {
agent any
stages {
stage ('Deploying multiple hosts') {
steps {
script {
servers.each { server ->
deploys[server] = {
sh "echo run stuff.."
}
}
parallel deploys
}
}
}
}
}
这样做的缺点是您无法创建具有多个相互依赖的任务的真正管道。我也在寻找这个问题的答案..How to loop parametrized parallel stages in Jenkins declarative pipeline
【讨论】: