如何在Jenkins声明式管道中循环参数化并行阶段?(或脚本管道,如果声明式不能)
这是我简单的伪示例。如何循环(“部署serverN”)阶段?
数组可能具有1..n变量。
我不想重复代码。詹金斯管道中一定有办法吗?还是我应该使用矩阵。我已经尝试了一些,但是没有成功。
@Library('adm-jenkins-lib@trunk')
def SERVERS = ['server1.com','server2.com',...]
deployPipeline([servers: SERVERS, manage_tasks: TASKS])
...
def call(Map params) {
pipeline {
agent any
environment {
}
stages {
stage ('common task') {
}
stage ('Deploying..') {
parallel {
stage ('deploy server1') {
stages {
stage ('deploy tasks #1') {
steps { ... }
}
stage ('deploy tasks #2') {
steps { ... }
}
}
stage ('deploy server2') {
stages {
stage ('deploy tasks #1') {
steps { ... }
}
stage ('deploy tasks #2') {
steps { ... }
}
}
}
}
}
}
}
}
我也尝试过这种方法,但是由于前一阶段不依赖于下一阶段,因此它并不是完美的。
stage ('deploy serverX') {
when { expression { params.manage_tasks =~ /task01/ } }
steps {
script {
servers = params.servers
servers.each { server ->
deploys[server] = {
sh "run task#1 stuff.."
}
}
parallel deploys
}
}
}
在Blue Ocean中应该看起来像这样(但是动态创建的): 在Blue
Ocean中看起来应该像这样
我有解决方案:
至少将Blue Ocean更新到版本1.22,才能正确查看管道。
按照@ zett42的建议安装库https://github.com/comquent/imperative-
when
。
此示例是脚本管道。(我没有找到声明性管道的解决方案)
@Library('adm-jenkins-lib@trunk') _
properties([
parameters([
string(name: 'countTotal', defaultValue: '4'),
choice(name: 'servers', choices: ['all', '1', '2','3','4'], description: 'Run on specific platform'),
choice(name: 'manage_steps', choices: ['all_tasks','common_task','deploy_task','test_task'], description: 'Choose task')
])
])
node{
stage('common task'){
when(params.manage_steps ==~ /common_task|all_tasks/) {
sh "echo common task"
}
}
def stages = [failFast: true]
for (int i = 1; i < params.countTotal.toInteger()+1; i++) {
if (params.servers == 'all' || params.servers == i.toString() )
{
def vmNumber = i //alias the loop variable to refer it in the closure
stages["server${vmNumber}"] = {
stage("deploy ${vmNumber}") {
when(params.manage_steps ==~ /deploy_task|all_tasks/) {
sh "echo deploy; sleep 5"
}
}
stage("test ${vmNumber}") {
when(params.manage_steps ==~ /test_task|all_tasks/) {
sh "echo testing; sleep 5"
}
}
}
}
}
parallel stages
}
BlueOcean管道示例1
BlueOcean管道示例2
问题内容: Jenkins声明性管道中的参数可以动态吗? 我希望选择选项值在运行时由函数填充。以下代码确实生成了选项列表,但它们似乎过时了- 可能是在我第一次运行此代码时生成的。如果AMI列表更改,则选择将保持不变。我希望每次选择都运行此命令。 EDIT 我最终使用,带有扩展选择参数。目前它不支持该参数,因此我对其进行了修改https://review.openstack.org/#q,I0c6a
我的Jenkins流水线并行运行多个任务。似乎如果一个阶段失败,所有后续阶段将运行其<code>failure</code>post块(无论它们是否实际失败)。我不知道这是故意的还是我做错了什么。 注意:这个管道运行在一个Windows节点上,因此< code>bat('exit /b 1') 在上面的管道中,只有“失败阶段”失败,但在输出中我看到了这一点,这表明对这两个步骤都执行了< code>
问题内容: 如何报告声明式管道失败的阶段?在fail块中,我想获取failureStage.name并将其报告(最终报告为松弛)。 问题答案: PipelineVisitor是一种很好的方法。但是,如果您只想查看错误,那么利用可能会更好。 以下内容提供了每个失败步骤的映射列表,并且还遍历了下游作业。我发现它非常有用。 您将要使用共享库来避免安全沙箱警告/批准
在Jenkins脚本管道中,您可以像这样设置PATH env变量: 注意这里解释的路径MAVENhttps://jenkins.io/doc/pipeline/steps/workflow-basic-steps/#code-withenv代码集环境变量: 要设置的环境变量列表,每个变量的形式为VARIABLE=value或VARIABLE=以取消设置其他定义的变量。您还可以使用语法PATH wh
我想在Jenkins声明性管道语法中定义多个阶段,它们可以在任何一个失败后继续。我找不到任何现存的真正重复的问题,因为它们都假定或允许脚本语法。 为了澄清,我不寻求如何在脚本语法中实现这一点。我试图理解这种流控制是否在声明性语法中得到支持和形式化。为此,我将尝试准确定义我要寻找的内容: < li >没有尝试/捕捉。我不想陷入脚本模式,或者将我的声明性管道“包装”在另一个共享库或脚本块中。 < li
问题内容: 我正在尝试将旧样式的基于项目的工作流转换为基于Jenkins的管道。在浏览文档时,我发现有两种不同的语法分别命名为和。例如最近(2016年底)发布的Jenkins网络语法。尽管有一个新的语法版本,Jenkins仍然也支持脚本语法。 现在,我不确定这两种类型的哪种情况最合适。语法将很快被弃用吗?詹金斯管道的未来会是这样吗? 任何可以分享有关这两种语法类型的想法的人。 问题答案: 最初创建