我在将脚本移植到声明性管道时遇到了问题。我曾经有脚本: //脚本化
var arrayAbjad=[{char:"الف",value: 1},{char:"ب", value: 2},{char:"ج", value: 3}]
function letterValue(str){
var sum = 0;
for(var charIndex = 0; charIndex < str.length; charIndex++){
for(var i = 0; i < arrayAbjad.length; i++){
if(str[charIndex] == arrayAbjad[i].char){
sum += arrayAbjad[i].value;
}
}
}
return sum;
}
let str = prompt('enter string');
console.log(letterValue(str));
现在我想要声明性地
//声明性
بج
当我尝试运行此命令时,它失败并显示Env
org.codehaus.groovy.control.MultipleCompilationErrorsException: 启动失败:WorkflowScript:xx:“ myEnv”不是有效的环境 表达。将“键=值”对与有效的Java / shell键配合使用。
足够公平。 为了能够使用声明性环境{}避免在以后的每步中使用withEnv(myEnv),我该怎么办?
答案 0 :(得分:0)
您似乎缺少的部分是使用environment
子句。
代替
environment { myEnv }
应该是
environment { myEnvVal = myEnv }
就像错误方法提到的那样,这应该是键=值对。
答案 1 :(得分:0)
您的问题来自变量myEnv
的类型。您进行def myEnv = [:]
时将其定义为地图。
因此,它可以与takes a map as parameter的withEnv
一起使用,但不能与takes only "key = value" statements的environment {...}
一起使用。
解决方案取决于您如何添加myEnv
中包含的环境变量。
最简单的方法是使用environment
指令,列出先前变量myEnv
中包含的所有键/值:
pipeline{
agent none
environment {
test1 = 'test-1'
test2 = 'test-2'
}
stages{
stage('Fancy stuff'){
steps{
echo "${test1}"
}
}
stage('Fancy stuff2'){
steps{
echo "${test2}"
}
}
}
}
但是您也可以按照脚本方式进行操作:
pipeline{
agent none
stages{
stage('Prepare my env') {
steps {
script {
def test = []
for (int i = 1; i < 3; ++i) {
test[i] = 'test-' + i.toString()
}
test1 = test[1]
test2 = test[2]
}
}
}
stage('Fancy stuff'){
steps{
echo "${test1}"
}
}
stage('Fancy stuff2'){
steps{
echo "${test2}"
}
}
}
}