Jenkins:如何使用Jenkins Pipeline多个参数

6

我有一个使用ansible-playbook部署web机器的Jenkinsfile实例。

我需要一次指定多个ansible-playbook参数。

我得到了如下错误:

WorkflowScript: 25: 参数部分出现多个实例

我的Jenkinsfile如下:

pipeline {
agent none
stages {
    stage('docker-compose up') {
        input {
            message "Should we continue?"
            ok "Yes, do it!"
            parameters {
                string(name: 'KIBANA_TAG', defaultValue: '', description: 'input tag for ansible command.')
            }
            parameters {
                string(name: 'FLUENT_TAG', defaultValue: '', description: 'input tag for ansible command.')
            }
            parameters {
                string(name: 'ES_TAG', defaultValue: '', description: 'input tag for ansible command.')
            }
            parameters {
                string(name: 'HOST', defaultValue: '', description: 'input tag for ansible command.')
            }
        }
        steps {
            sh "rd6-admin@qa ansible-playbook /tmp/qa/docker-compose-up.yml -e fluent_tag=${params.FLUENT_TAG} -e kibana_tag=${params.KIBANA_TAG} -e es_tag=${params.ES_TAG} -e host=${params.HOST}"
        }
    }
}
}

我需要修复哪一部分?

2个回答

6
parameters {
    string(name: 'KIBANA_TAG', defaultValue: 'default', description: 'input tag for ansible command.')
    string(name: 'FLUENT_TAG', defaultValue: 'default', description: 'input tag for ansible command.')
    string(name: 'ES_TAG', defaultValue: 'default', description: 'input tag for ansible command.')
    string(name: 'HOST', defaultValue: 'default', description: 'input tag for ansible command.')
}

尝试这个。参数部分的多次出现意味着只允许一个parameters{},您需要将参数放在其中。

1
我按照你的建议尝试使用一个参数{},然后Jenkins输出了以下内容:+ rd6-admin@qa ansible-playbook /tmp/qa/docker-compose-up.yml -e fluent_tag=null -e kibana_tag=null -e es_tag=null -e host=web,它没有获得多个参数。@ErikWe - hanase
好的,你可以尝试在参数中输入默认值吗?这样应该可以解决sh调用中的“null”值问题。 - ErikWe
谢谢,我尝试了一个简单的Jenkinsfile string(name: 'aaa', defaultValue: '', description: '我应该向谁说你好?') string(name: 'bbb', defaultValue: '', description: '我应该向谁说你好?') string(name: 'ccc', defaultValue: '', description: '我应该向谁说你好?') } } steps { echo "你好,${aaa}。你好,${bbb}。你好,${ccc}。" }``` 并且可以获取所有参数。 - hanase
这个已经不起作用了,请考虑调整你的答案。逗号分隔列表已经变成了一个列表,所以在参数列表中使用逗号来分隔单个参数(在Jenkins 2.22之后)已经不再起作用了,请查看Rajasekaran的答案。 - Erdinc Ay

6

逗号分隔符在2.222.1版本中不起作用。我去掉了逗号,现在它可以正常工作。

parameters {
    string(name: 'KIBANA_TAG', defaultValue: 'default', description: 'input tag for ansible command.')
    string(name: 'FLUENT_TAG', defaultValue: 'default', description: 'input tag for ansible command.')
    string(name: 'ES_TAG', defaultValue: 'default', description: 'input tag for ansible command.')
    string(name: 'HOST', defaultValue: 'default', description: 'input tag for ansible command.')
}

谢谢@Jeremy,我花了半天时间进行故障排除,是的,不知何故它不喜欢逗号,删除逗号对我有用。 - Krishna

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接