linux - 在 Jenkins 管道作业中将变量传递给 bash 脚本

标签 linux bash shell jenkins parameters

我有一个 Jenkins 管道作业,我在其中使用名为 setup.sh 的 bash 脚本配置我的环境,如下所示:

#!/bin/bash
export ARCH=$1
echo "architecture = " ${ARCH}

在 Jenkins 管道脚本中,我调用 setup.sh 脚本:

def lib_arch='linux-ubuntu-14.04-x86_64-gcc4.8.4'
sh ". /opt/setup.sh ${lib_arch}"

不幸的是,NO 变量似乎被传递给了 setup.sh 脚本,并且 echo ${ARCH} 返回了一个空字符串! 我试着改为: sh "source/opt/setup.sh ${lib_arch}" 这也因“找不到源”消息而失败。 我还尝试将脚本的第一行更改为

#!/bin/sh

但这并没有帮助。那么如何在 Jenkins 管道脚本中将参数传递给我的 bash 脚本呢? 感谢您的帮助。

更新: Bert Jan Schrijve 在此线程中建议了一个解决方法(见下文):

sh "bash -c \" source /opt/setup.sh ${lib_arch}\"" 

最佳答案

如果您使用带三撇号的多行 shell 脚本,则必须使用以下语法:

sh '''
 echo '''+varToPrint+'''
 other commands...
'''

(来自 https://medium.com/devopslinks/a-hacky-hackers-guide-to-hacking-together-jenkins-scripted-pipelines-part-3-aca73bd33eaa)

关于linux - 在 Jenkins 管道作业中将变量传递给 bash 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40323490/

相关文章:

linux - 函数 ibv_get_cq_event() 在销毁后不返回

linux - 在 bash 脚本中使用 grep 命令将变量值传递给 --include 参数

linux - 使用 Linux shell 中的任何命令提取文本

java - JSch ChannelExec OutputStream 不显示程序输出。但是它适用于 shell 脚本

python - 在远程节点执行 bash 脚本并通过服务器上的 python 进行控制

linux - Linux 与 macOS 中的巨大 OpenGL 性能差异,相同的硬件

linux - 广播数据包不通过 Linux veth 隧道传播

bash - 在 Bash shell 脚本中传播所有参数

bash - 在 bash 中解析和存储 curl 命令的 json 输出

shell - 防止 POSIX xargs 尝试运行空命令