提问人:DonnyFlaw 提问时间:11/17/2023 最后编辑:DonnyFlaw 更新时间:11/17/2023 访问量:56
如何在 bash 脚本中验证 Jenkins 管道参数
How to validate Jenkins pipeline parameter inside bash script
问:
在我的 Pipeline Jenkins 作业中,我有一个名为 Choice 的参数:BUILD_TYPE
我想检查用户选择了哪个值:
sh'''#!/bin/bash
if [ "${params.BUILD_TYPE}" = "Debug" ]; then
Debug = true
Release = false
else
Debug = false
Release = true
fi
'''
但得到了
line 2: ${params.BUILD_TYPE}: bad substitution
我也试过了
[[ "${params.BUILD_TYPE}" == "Debug" ]];
结果相同...
此代码可能有什么问题?我应该在 Jenkins 中使用什么语法?
答:
0赞
fakolours
11/17/2023
#1
我主要使用 bat 命令,但据我所知,您不能在 '''(三重简单引号)之间使用。要使用它,您需要使用“”“(三重双引号)。只需更改此设置,您应该能够在 sh 命令中获得 的值。${var}
${params.BUILD_TYPE}
编辑: 整个 sh 脚本应该在 “”“ 中。所以它最终应该是这样的
sh"""#!/bin/bash
if [ "${params.BUILD_TYPE}" = "Debug" ]; then
Debug = true
Release = false
else
Debug = false
Release = true
fi
"""
评论
0赞
DonnyFlaw
11/17/2023
试。也没有用。同样的错误...([ """${params.BUILD_TYPE}""" = "Debug" ]
0赞
DonnyFlaw
11/17/2023
蝙蝠命令呢?我真的不需要坚持 bash。只需要一个预期的结果
1赞
Léa Gris
11/17/2023
然后@DonnyFlaw Goovy 中执行此操作,Goovy 由 Jenkins 本地处理。
0赞
xpusostomos
11/17/2023
#2
这段代码出了问题:
- 流水线的意义不在于避免编写 shell 代码吗?
- 这不是有效的 shell 代码。首先,环境变量名称不能包含“.”。它看起来像是 shell 和 java 或其他东西的大杂烩。我相信 Jenkins 会在 $BUILD_TYPE 等纯变量中传递参数,但我没有做太多管道,所以你必须检查一下。
- 在 shell 代码中,名称和右值之间不能有空格。它必须是 Debug=true
- 此 shell 代码不执行任何操作。它设置了一些变量,然后退出,因此什么也没实现。在 shell 中设置的变量不会出现在其他任何地方。
我认为你需要回到第一原则,并阅读一些关于这个原则的书。
评论
script{if (${params.BUILD_TYPE}=="Debug") {Debug = true Release = false} else {Debug = false Release = true}}
script{if (env.BUILD_TYPE=="Debug") {env.Debug = true env.Release = false} else {env.Debug = false env.Release = true}}