2017-02-15 83 views
1

我有詹金斯2.19.4与管道:声明代理API 1.0.1。如果你不能定义一个变量来分配读取属性,那么如何使用readProperties?詹金斯声明性管道:如何注入属性

例如,捕捉到SVN版本号,我目前正与脚本风格下捕捉到它:

echo "SVN_REVISION=\$(svn info ${svnUrl}/projects | \ grep Revision | \ sed 's/Revision: //g')" > svnrev.txt

def svnProp = readProperties file: 'svnrev.txt' 

然后我可以访问使用:

${svnProp['SVN_REVISION']} 

由于在声明式风格中def svnProp不合法,readProperties如何使用?

+0

为了清楚起见,上面的示例脚本来自Jenkinsfile,并且将被封装在管道步骤“sh”中。 –

回答

7

您可以使用steps标记中的script步骤运行任意的管道代码。

所以东西的线路:

pipeline { 
    agent any 
    stages { 
     stage('A') { 
      steps { 
       writeFile file: 'props.txt', text: 'foo=bar' 
       script { 
        def props = readProperties file:'props.txt'; 
        env['foo'] = props['foo']; 
       } 
      } 
     } 
     stage('B') { 
      steps { 
       echo env.foo 
      } 
     } 
    } 
} 

这里我使用ENV传播阶段之间的值,但有可能做其他的解决方案。

+1

最初得到这个异常'org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException:脚本不允许使用staticMethod org.codehaus.groovy.runtime.DefaultGroovyMethods putAt java.lang.Object'我可以通过去“白名单” “进程内脚本批准”和“批准staticMethod org.codehaus.groovy.runtime.DefaultGroovyMethods putAt java.lang.Object'现在,它的工作原理! –

+0

@ P.Beatty我看到类似的问题。有没有可能提到白名单过程的细节。我有点失落,不知道从哪里开始 – Balkrishna

+1

没关系发现它“导航到詹金斯>管理詹金斯>进程内脚本批准” – Balkrishna

0

@ jon -s解决方案需要授予脚本批准,因为它设置了环境变量。在同一个舞台上运行时不需要。

pipeline { 
    agent any 
    stages { 
    stage('A') { 
     steps { 
     writeFile file: 'props.txt', text: 'foo=bar' 
     script { 
      def props = readProperties file:'props.txt'; 
     } 
     sh "echo $props['foo']" 
     } 
    } 
    } 
}