Groovy参数传递给shell脚本

3

我一直在尝试将代码分成两个不同的文件:callTheFunction.groovytheFunction.groovy

从文件名可以看出:

  • callTheFunction.groovy调用在theFunction.groovy中定义的函数,并将随机值作为参数传递。
  • theFunction是一个shell脚本,位于groovy函数内部,应该使用从callTheFunction传递的参数。

问题:
该shell脚本无法识别/理解参数,变量为空,没有值。

theFunction.groovy

def call(var1, var2) {
  sh '''
    echo "MY values $var1 and $var2"
  '''
}

callTheFunction.groovy

def call {
  pipeline {
    stages {
      stage ('myscript') {
        steps {
          theFunction("Value1", "Value2")
        }
      }
    }
  }
}

管道输出:

MY values  and

我知道这方面有类似的问题:


你需要阅读关于Groovy中字符串的内容,以及单引号字符串和双引号字符串之间的区别。https://groovy-lang.org/syntax.html#all-strings - daggett
我应该添加的是:如果我将shell脚本与变量放在同一个文件中,它就可以工作。所以,如果我定义全局变量def var1 = "myvalue"def var2 = "myothervalue", 并将shell脚本置于同一文件中,它就可以工作。 - user1098490
2
将以下与编程相关的内容从英语翻译成中文。仅返回翻译后的文本:将引号“sh'''...'''”替换为“sh"""..."""”。 - daggett
刚拿到一个例子:假设我使用 sh """ ... """,如果我有一个带有 for 循环和 sed 的例子,该怎么办呢?例如:for i in a b c; do sed -i '/^$i/d myfile--> 这将无法工作,因为当您使用 **三重双引号** 时,必须转义 shell 变量,这意味着我的 sed 将如下所示:sed -i '/^$i/d myfilesed不再寻找我的变量$i,而是字符 $i`。 - user1098490
使用环境变量,或者使用''' ... ''' + 变量 + ''' ... '''来注入变量值。 - daggett
1个回答

0

更新

您可以在没有environment {}的情况下使用环境变量。

像这里使用的环境变量一样使用它们(我稍微重构了您的代码)。使用三个单引号作为shell脚本循环的引用,并将Groovy变量添加到其中:

def callfunc() {
  sh '''
  export s="key"
  echo $s
  for i in $VARENV1 
    do
      echo "Looping ... i is set to $i"
    done
    '''
}

pipeline {
    agent { label 'agent_1' }
    stages {
      stage ('Run script') {
        steps {
            script {
                env.VARENV1 = "Peace"
            }
            callfunc()
        }
      }
    }
}

输出:

enter image description here

参考链接: Jenkins - 将参数传递给Groovy函数


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接