jenkins - 在 Jenkins Pipeline 的 shell 脚本部分定义变量
问题描述
我正在尝试动态定义稍后在我的 Jenkins 管道的一些 shell 命令中使用的变量,并且它引发了异常。我什至尝试从环境部分预定义变量无济于事。这是禁止的操作吗?我的另一个变量myVar
似乎工作正常,但它在管道中是一个常数。
pipeline {
agent any
environment {
py2Ana=""
myVar="ABCDE"
}
stages {
stage('Stage1') {
steps {
sh """
echo myVar=$myVar
echo Find Anaconda2 Python installation...
py2Ana=`which -a python | grep --max-count=1 anaconda2`
if [[ -z "$py2Ana" ]]; then
echo ERROR: must have a valid Anaconda 2 distribution installed and on the PATH for this job.
exit 1 # terminate and indicate error
fi
"""
}
}
}
例外
groovy.lang.MissingPropertyException: No such property: py2Ana for class: groovy.lang.Binding
at groovy.lang.Binding.getVariable(Binding.java:63)
at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onGetProperty(SandboxInterceptor.java:242)
at org.kohsuke.groovy.sandbox.impl.Checker$6.call(Checker.java:288)
at org.kohsuke.groovy.sandbox.impl.Checker.checkedGetProperty(Checker.java:292)
at org.kohsuke.groovy.sandbox.impl.Checker.checkedGetProperty(Checker.java:268)
at org.kohsuke.groovy.sandbox.impl.Checker.checkedGetProperty(Checker.java:268)
at com.cloudbees.groovy.cps.sandbox.SandboxInvoker.getProperty(SandboxInvoker.java:29)
at com.cloudbees.groovy.cps.impl.PropertyAccessBlock.rawGet(PropertyAccessBlock.java:20)
at WorkflowScript.run(WorkflowScript:21)
解决方案
正如@jxramos 所说,Jenkins 正在尝试解析脚本中的变量。它将任何 $string 解释为需要替换的变量。解决方法是将脚本内变量的$转义,如下:
pipeline {
agent any
stages {
stage('test stage'){
steps {
sh """#!/bin/bash
myvar=somevalue
echo "The value is \$myvar"
"""
}
}
}
}
推荐阅读
- python - python模块属性错误-子包
- android - 从 SMS 读取 otp 并设置为编辑文本 不工作
- mysql - 使用 LIKE 语句连接两个表
- angular - Angular 5中的服务器端分页
- scala - 线程“主”java.lang.IllegalArgumentException 中的异常:实例化“org.apache.spark.sql.hive.HiveSessionState”时出错:
- python - 如何找出不连续的日期时间索引?如何取平均值而不是连续指数?
- caching - 即使在 `before_cache` 中删除了目录,Travis CI 也会一直说“检测到更改”
- c# - 如何从字符串中读取特定行?统一 C#
- python - 回溯时如何存储递归结果?
- c# - 我想使用二进制读取器/写入器对存储在两个文本文件中的值求和,但是当我运行代码时它不显示输出,甚至不显示异常