Jenkinsfile中字符串变量使用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Jenkinsfile中字符串变量使用相关的知识,希望对你有一定的参考价值。

参考技术A Groovy 支持使用单引号或双引号声明一个字符串,例如:

只有通过双引号才支持通过$获取,例如:

其结果是:

错误:在声明性 Jenkinsfile 中使用 Bash 脚本

【中文标题】错误:在声明性 Jenkinsfile 中使用 Bash 脚本【英文标题】:Error: Using Bash script inside Declarative Jenkinsfile 【发布时间】:2019-07-26 15:02:11 【问题描述】:

在 Jenkinsfile 中编写 bash 脚本代码时我面临一些挑战。 UserCase:我在一个 GIT 存储库的文件夹结构中保留了多个工具代码。我希望每当任何开发人员对单个文件夹进行更改时,都会针对特定文件夹相关代码触发构建。 我的逻辑:选择最后两个提交,找出不同之处。在差异的基础上,根据更改的文件进行构建。 我编写了 bash 脚本,它在 linux 机器上运行良好。将其移入 Jenkinsfile 后,我遇到了一些错误。 这可能是特定的。 在这些方面需要帮助

#!/bin/bash
git log -2 --no-merges | grep commit > git_commit.txt
cat git_commit.txt
echo 'hi'
i=0;
while read -r line;
do
    commit[$i]=`echo "$line" | awk 'print \$2'`
    i=$((i+1))
done < git_commit.txt

这不是完整的代码。我在赋值时遇到错误:

commit[$i]=`echo "$line" | awk 'print \$2'`

如果您知道进一步的解释以提供帮助,请告诉我。

【问题讨论】:

嗨@jvipul你不应该把它存储为.sh文件并从jenkins执行吗?你的詹金斯管道代码是什么样的? @Jvipul :“getting error”不是一个很有帮助的问题描述。詹金斯是否说“我不再爱你了”,或者错误是什么样的?另外,你确定 Jenkins 真的在 bash 下运行你的代码吗? 【参考方案1】:

我刚刚抓住了它。这是在 bash 中分配 var 的愚蠢错误。我在分配 awk 命令的输出时添加了 eval 。所以我的代码更改是:

eval commit[$i]=`echo "$line" | awk 'print \$2'`

不确定 eval 对我的帮助如何,但现在解决了。

【讨论】:

以上是关于Jenkinsfile中字符串变量使用的主要内容,如果未能解决你的问题,请参考以下文章

转义Jenkinsfile shell中的JSON字符串

Jenkinsfile:变量未在 SSH 命令中“解析”

jenkins集群使用k8s部署,pipeline中文乱码的问题解决记录

错误:在声明性 Jenkinsfile 中使用 Bash 脚本

使用 Intellij Idea 在 Java 项目中突出显示 Jenkinsfile 语法

Jenkinsfile的pipeline配置