gpt4 book ai didi

jenkins - 如何在Jenkinsfile if语句中使用jenkins环境变量

转载 作者:行者123 更新时间:2023-12-02 10:28:06 28 4
gpt4 key购买 nike

我正在尝试在 Jenkinsfile 中使用 if 语句进行多分支管道项目。为了回答这个问题,假设我的当前目录中有一个名为“scan.txt”的文本文件。该文本文件是使用 bash 命令生成的

echo "False" > scan.txt

所以唯一的内容是字符串“False”

我在 Jenkinsfile 中将任意环境变量设置为 scan.txt 的内容,如下所示:

script {
env.TEXT = readFile 'scan.txt'
}

如果我这样做

echo "${env.TEXT}" 

在脚本 block 之外,jenkins 控制台按预期显示该步骤的 False。

但是,我检查它是否等于“False”的所有尝试都失败了。我在脚本 block 之后立即尝试了以下操作:

if (env.TEXT.equals("False")) {
//do something
}

if (env.TEXT.matches("False")) {
//do something
}


if (env.TEXT == "False") {
//do something
}

但它们都不起作用。所有这些条件都是 bool 假。读取文件管道步骤的文档指出它返回文件内容的字符串 https://jenkins.io/doc/pipeline/steps/workflow-basic-steps/#code-readfile-code-read-file-from-workspace所以我不确定这里发生了什么。有没有人有任何见解?

谢谢

最佳答案

问题是,当您执行 echo "False"> scan.txt echo 时,echo 会在文件末尾留下换行符,如果您 echo env,则可以看到这一点。 TEXT 在管道脚本中。

所以你需要做的是在检查它是否等于False之前使用String.trim(),trim将删除开头和结尾的所有空格。此外,测试字符串是否包含的最佳方法是使用 Boolean.parseBoolean(),它会为您完成所有艰苦的工作。

让我们试试这个:

node {
sh 'echo "False" > output.txt'
def val = readFile 'output.txt'
echo "${val}"
echo "${val.trim()}"
if (val.equals("False")) { // This will print No
echo "Yes"
} else {
echo "No"
}
if (val.trim().equals("False")) { // This will print Yes
echo "Yes"
} else {
echo "No"
}
if (!Boolean.parseBoolean(val)) { // This will print Yes
echo "Yes"
} else {
echo "No"
}
}

我们得到的输出是:

Started by user jon
[Pipeline] node
Running on master in /var/lib/jenkins/workspace/pl
[Pipeline] {
[Pipeline] sh
[pl] Running shell script
+ echo False
[Pipeline] readFile
[Pipeline] echo
False

[Pipeline] echo
False
[Pipeline] echo
No
[Pipeline] echo
Yes
[Pipeline] echo
Yes
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
Finished: SUCCESS

正如您所见,当我们执行第一个回显步骤时,我们有一个额外的换行符。另请注意,Boolean.parseBoolean() 处理字符串时不进行任何修剪。

关于jenkins - 如何在Jenkinsfile if语句中使用jenkins环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42543794/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com