首页 > 解决方案 > 如何在声明性 Jenkinsfile 中跨阶段保留非字符串对象?

问题描述

在声明性管道 Jenkinsfile 中,变量属性的更改似乎在env各个阶段和管道的重新启动之间保留,而与阶段无关。但是,似乎所有内容都env必须是字符串。env有没有办法在不使用或写入文件的情况下跨阶段保留非字符串内容?

具体来说,我在想我可能会使用params它,但似乎params无法更改值。还有其他想法吗?

标签: jenkinsjenkins-pipelinejenkins-groovyjenkins-declarative-pipeline

解决方案


要跨阶段保留变量的值,请使用 @Field 注释在管道外部定义一个变量

import groovy.transform.Field

@Field def toto

pipeline {
    agent none
    stages {
       stage('stage1') {
           steps {
               toto = { name -> println name }  
           }
       }
       stage('stage2') {
           steps {
               println toto('toto')
           }
       }
    }
}

该变量将无法在重新启动后继续存在。

为了重新启动,您可以序列化变量的值并将其保存到文件中,如果文件存在,则在第一阶段取消序列化它


推荐阅读