Nab*_*ane 7 linux parameters bash shell jenkins
我有一个Jenkins管道作业,我在其中使用名为setup.sh的bash脚本配置我的环境,如下所示:
#!/bin/bash
export ARCH=$1
echo "architecture = " ${ARCH}
Run Code Online (Sandbox Code Playgroud)
在Jenkins管道脚本中,使用以下命令调用setup.sh脚本:
def lib_arch='linux-ubuntu-14.04-x86_64-gcc4.8.4'
sh ". /opt/setup.sh ${lib_arch}"
Run Code Online (Sandbox Code Playgroud)
不幸的是,似乎NO变量传递给setup.sh脚本,echo $ {ARCH}返回一个空字符串!我尝试改为:sh"source /opt/setup.sh $ {lib_arch}",这也失败了"源未找到"消息.我也尝试将脚本的第一行更改为
#!/bin/sh
Run Code Online (Sandbox Code Playgroud)
但它没有帮助.那么如何在Jenkins管道脚本中将参数传递给我的bash脚本呢?谢谢你的帮助.
更新:Bert Jan Schrijve在此主题中提出了一个解决方法(见下文):
sh "bash -c \" source /opt/setup.sh ${lib_arch}\""
Run Code Online (Sandbox Code Playgroud)
Ton*_*ony 13
如果您使用带有三个撇号的多行 shell 脚本,则必须使用以下语法:
sh '''
echo '''+varToPrint+'''
other commands...
'''
Run Code Online (Sandbox Code Playgroud)
小智 8
遇到了同样的问题,并且发布的解决方案对我不起作用。使用环境变量就达到了目的:
env.someVar='someVal'
sh "echo ${env.someVar}"
Run Code Online (Sandbox Code Playgroud)
下面的例子有效:
void updateApplicationVersionMaven(String version) {
sh "mvn -B versions:set -DnewVersion=$version"
}
Run Code Online (Sandbox Code Playgroud)
以及一个完整的管道脚本(在 Jenkins 2.7.3 上测试):
node {
stage('test') {
def testVar='foo'
sh "echo $testVar"
}
}
Run Code Online (Sandbox Code Playgroud)
编辑(评论后):啊,测试了更多,可以重现这个问题。这是因为您使用“./opt/setup.sh”获取脚本。这会影响 shell 环境,在这种情况下会破坏 Jenkins 变量注入。有趣的。
EDIT2(评论后):我相信这是正在使用的默认 shell(由 Jenkins 或由操作系统)的问题。我可以从评论中重现这个问题,并且能够通过显式使用 bash 作为 shell 来解决它:
def testVar='foo3'
sh "bash -c \". /var/jenkins_home/test.sh $testVar && echo \$ARCH\""
Run Code Online (Sandbox Code Playgroud)
最后一个 echo 现在回显 testVar 的内容,该内容作为参数传递给脚本,随后由脚本设置为环境变量。
| 归档时间: |
|
| 查看次数: |
19521 次 |
| 最近记录: |