如何在 bash 脚本中验证 Jenkins 管道参数

How to validate Jenkins pipeline parameter inside bash script

提问人:DonnyFlaw 提问时间:11/17/2023 最后编辑:DonnyFlaw 更新时间:11/17/2023 访问量:56

问:

在我的 Pipeline Jenkins 作业中,我有一个名为 Choice 的参数:BUILD_TYPEenter image description here

我想检查用户选择了哪个值:

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赞 Léa Gris 11/17/2023
您应该将 shell 指令放在脚本文件中,而不是内联它。不过,我很确定您可以更恰当地将其编码为 Jenkins 将本地运行的 Groovy 脚本。
0赞 DonnyFlaw 11/17/2023
@LéaGris 我对Groovy语法不太熟悉。我试过了,但没有用script{if (${params.BUILD_TYPE}=="Debug") {Debug = true Release = false} else {Debug = false Release = true}}
0赞 DonnyFlaw 11/17/2023
@LéaGris应该是什么样子?script{if (env.BUILD_TYPE=="Debug") {env.Debug = true env.Release = false} else {env.Debug = false env.Release = true}}

答:

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

这段代码出了问题:

  1. 流水线的意义不在于避免编写 shell 代码吗?
  2. 这不是有效的 shell 代码。首先,环境变量名称不能包含“.”。它看起来像是 shell 和 java 或其他东西的大杂烩。我相信 Jenkins 会在 $BUILD_TYPE 等纯变量中传递参数,但我没有做太多管道,所以你必须检查一下。
  3. 在 shell 代码中,名称和右值之间不能有空格。它必须是 Debug=true
  4. 此 shell 代码不执行任何操作。它设置了一些变量,然后退出,因此什么也没实现。在 shell 中设置的变量不会出现在其他任何地方。

我认为你需要回到第一原则,并阅读一些关于这个原则的书。