12

我有一个声明式管道脚本,用于我的多分支项目,在该项目中,我想读取文本文件并将结果作为字符串变量存储,以供后续步骤管道。使用片断发生器我试图做这样的事情:如何在Jenkins文件中设置和引用变量

filename = readFile 'output.txt' 

对于那些filename将是我的字符串。

我得到的詹金斯控制台输出错误:

org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed: 
WorkflowScript: 30: Expected a step @ line 30, column 5. 
      filename = readFile 'output.txt' 

我需要使用withEnv步骤的readFile输出设置为詹金斯环境变量?如果是这样,怎么样?

感谢

+0

你能根据[MCVE(HTTP编辑你的问题:// stackoverflow.com/help/mcve)指南? –

回答

13

的错误是由于您只允许使用steps指令内部管道的步骤。我知道的一种解决方法是使用script步骤并在其中包装任意管道脚本并将结果保存在环境变量中,以便稍后使用它。

所以你的情况:

pipeline { 
    agent any 
    stages { 
     stage("foo") { 
      steps { 
       script { 
        env.FILENAME = readFile 'output.txt' 
       } 
       echo "${env.FILENAME}" 
      } 
     } 
    } 
} 
+0

我试过了,回声没有显示任何东西 –

+0

奇怪的是,当运行这个(詹金斯2.32.2)我得到了预期的结果(添加'writeFile文件:'output.txt',文本:'asdsad''就在' readFile',我得到'[Pipeline] echo asdsad'按预期)。你确定文件中有任何内容吗? –

+0

雅这是空白的,这是由于我的逻辑中的其他问题,但我认为你的答案是我一直在寻找。谢谢 –

10

According to the documentation,你也可以设置全局环境变量,如果你以后想使用的变量的值在脚本中的其他部分。在你的情况下,将它设置它的根管道:

pipeline { 
    ... 
    environment { 
    FILENAME = readFile ... 
    } 
    ... 
} 
+0

这是正确的答案 – Liam

-2

的脚本pipepline一个完整的例子:

 stage('Build'){ 
      withEnv(["GOPATH=/ws","PATH=/ws/bin:${env.PATH}"]) { 
       sh 'bash build.sh' 
      } 
     } 
+0

这个问题没有提到任何有关运行构建脚本或添加到PATH的内容。 – daemonaka

相关问题