我已经创建了几个在Linux shell中完美工作的bash脚本,但是当我尝试将它们合并到Jenkins管道中时,我得到了多个错误,我附上了我的管道的示例,我只想显示我的变量的值,管道工作正常,除了当我在第5行添加环境时,您可以看到Groovy不像Bash那样解释一些特殊字符。
pipeline {
agent {
label params.LABS == "any" ? "" : params.LABS
}
environment{
PORT_INSTANCE="${docker ps --format 'table {{ .Names }} \{{ .Ports }}' --filter expose=7000-8999/tcp | (read -r; printf "%s\n"; sort -k 3) | grep web | tail -1 | sed 's/.*0.0.0.0.0://g'|sed 's/->.*//g'}"
}
stages {
stage('Setup parameters') {
steps {
script {
properties([
parameters([
choice(
choices: ['LAB-2', 'LAB-3'],
name: 'LABS'
),
string(
defaultValue: 'cliente-1',
name: 'INSTANCE_NAME',
trim: true
),
string(
defaultValue: '8888',
name: 'PORT_NUMBER',
trim: true
),
string(
defaultValue: 'lab.domain.com',
name: 'DOMAIN_NAME',
trim: true
)
])
])
}
sh """
echo '${params.INSTANCE_NAME}'
echo '${params.PORT_NUMBER}'
echo '${params.DOMAIN_NAME}'
echo '${PORT_INSTANCE}
"""
}
}
}
}
我已经在sh部分"""命令"""中尝试了同样的操作,他们抛出了同样的错误。
有没有人能帮我知道如何运行在linux shell(bash)中工作的高级命令,也就是说,有没有办法把脚本从bash迁移到Jenkins?
非常感谢你的帮助,)
我希望能够通过Jenkins中的Pipeline中的bash脚本命令创建变量
端口示例="${docker ps--格式'表格{{.名称}} {{.端口}}'--过滤器暴露= 7000 - 8999/tcp|(读取-r;打印" % s\n";排序-k 3)|grep网页|尾部-1|第一个字符是"s/. * 0.0.0.0.0://g"| sed 's/-〉. *//g '}"
1条答案
按热度按时间cyej8jka1#
我相信您不能根据文档在环境步骤中执行bash脚本。
您可以使用sh步骤从bash脚本创建一个变量,并将
returnStdout
设置为true
。声明性管道不允许您将返回值赋给变量,因此您需要在script
中调用sh
,如下所示:我会添加一个这样的阶段,作为我的管道中的第一个阶段。
请注意,在测试时,我没有运行与您相同的shell命令,因此我的命令可能存在诸如未转义引号之类的问题。