加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

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

发布时间:2020-12-14 01:44:42 所属栏目:Linux 来源:网络整理
导读:我有一个Jenkins管道作业,我在其中使用名为setup.sh的bash脚本配置我的环境,如下所示: #!/bin/bashexport ARCH=$1echo "architecture = " ${ARCH} 在Jenkins管道脚本中,使用以下命令调用setup.sh脚本: def lib_arch='linux-ubuntu-14.04-x86_64-gcc4.8.4's
我有一个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}""

解决方法

以下示例有效:

void updateApplicationVersionMaven(String version) {
    sh "mvn -B versions:set -DnewVersion=$version"
}

一个完整的管道脚本(在Jenkins 2.7.3上测试):

node {
    stage('test') {
        def testVar='foo'
        sh "echo $testVar"    
    }
}

编辑(评论后):啊,测试了一些,可以重现这个问题.这是因为您使用“./opt/setup.sh”获取脚本.这会影响shell环境,在这种情况下会破坏Jenkins变量注入.有趣.

EDIT2(评论后):我认为这是正在使用的默认shell的问题(由Jenkins或OS).
我可以从评论中重现这个问题,并且能够通过明确地使用bash作为shell来解决它:

def testVar='foo3'
sh "bash -c ". /var/jenkins_home/test.sh $testVar && echo $ARCH""

最后一个echo现在回显了testVar的内容,它作为参数传递给脚本,随后由脚本设置为环境变量.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读