Jenkins声明性管道:如何注入属性

时间:2017-02-15 14:46:18

标签: jenkins jenkins-pipeline

我有Jenkins 2.19.4 with Pipeline:Declarative Agent 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如何使用?

3 个答案:

答案 0 :(得分:10)

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

所以有以下几点:

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 :(得分:1)

要定义可用于所有阶段的常规变量,请在:13:24: warning: multi-character character constant [-Wmultichar] 中将值定义为:

props.txt

并将脚本和声明性Jenkins管道混合为:

version=1.0
fix=alfa

答案 2 :(得分: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']"
      }
    }
  }
}