首页 > 解决方案 > 从 bash 脚本中导出变量

问题描述

我必须使用 kubenetes 命令完成一些变量,所以我认为最好将它们放在 bash 脚本中。我已经设法做到这一点并调用它并看到变量被创建但是当它来自 bash 脚本时,它们没有被分配。

在 Jenkinsfile 脚本中我有

steps {
    sh '''
      ./bin/kube.sh
      echo "Kube2 = ${SCRET}"

......

在我的 kube.sh 文件中

#!/bin/bash

export SCRET=`kubectl -n keycloak get secret auser -o yaml | grep password | awk '{print $2}'`
echo "Kube2 = ${SCRET}"

我得到以下结果

+ ./bin/kube.sh
Kube1 = XXXXXXXX
+ echo 'SCRET = XXXXXXXX'
Kube2 = 

为什么它又变乱了?我错过了什么

标签: jenkinsgroovyjenkins-pipelinejenkins-groovyjenkins-job-dsl

解决方案


在子 shell 中设置的变量会随该 shell 一起消失,并且不会导出到父 shell。

要使用脚本在当前环境中设置变量,您必须将代码代码到当前上下文中。

$: cat x
foo=bar
$: ./x && echo $foo # runs in a subshell - foo ends with ./x

$: . x && echo $foo # runs in current shell - foo is set
bar

推荐阅读