Jenkins管道参数被评估为以前的值

aelbi1ox  于 2023-04-19  发布在  Jenkins
关注(0)|答案(2)|浏览(132)

我有一个构建软件的管道,其中包含用于版本的参数。
该参数默认为一个计算为当前日期的Groovy表达式。
但是当我运行它时,它使用的值实际上是上一次构建的日期。
示例:

  • 构建版本#17(2022年3月25日,10:37:57)打印2022-03-25T10:37:51.471369100
  • 构建版本#18(2022年3月25日,11:08:33)打印2022-03-25T10:37:57.857506500
  • 构建版本#19(2022年3月25日,11:09:52)打印Build version 2022-03-25T11:08:33.802312

管道脚本:

pipeline {
        agent any
        parameters {
            string(
                name: "BUILD_VERSION",
                defaultValue: "Build version "+java.time.LocalDateTime.now()
                )
            }
            stages {
                stage("Print") {
                    steps {
                        echo params.BUILD_VERSION
                    }
                }
            }
        }

我错过了什么?我如何将参数默认为执行日期?

af7jpaap

af7jpaap1#

当你使用字符串参数的defaultValue属性时,你实际上是在为项目的下一次执行设置默认值,而不是为当前的项目设置默认值--因为默认值只有在构建开始运行给定的参数后才会更新。
因此,下一个构建将使用前一个构建设置的值执行。
为了克服这个问题,您需要定义一个参数,在构建开始运行之前更新该参数,然后构建将在执行中使用该参数。
一种方法是使用Extended Choice Parameter Plugin,当您在作业中单击带参数构建时,Extended Choice Parameter Plugin将在运行时生成默认值。这样,默认时间值将用于当前运行的构建。
下面是代码示例:

pipeline {
    agent any
    parameters {
        extendedChoice(name: 'BUILD_VERSION', type: 'PT_TEXTBOX',
                       defaultGroovyScript: 'return java.time.LocalDateTime.now().toString()')
    }
    stages {
        stage("Print") {
            steps {
                echo params.BUILD_VERSION
            }
        }
    }
}
clj7thdc

clj7thdc2#

如果时间戳不需要是可编辑的,也许这就足够了?

import groovy.transform.Field

@Field
String BUILD_VERSION_TXT

pipeline {
    agent any
    parameters {
        string(name: 'BUILD_VERSION', defaultValue: "Build version")
    }
    stages {
        stage('Initialize') {
            steps {
                script {
                    BUILD_VERSION_TXT = params.BUILD_VERSION + ' ' + java.time.LocalDateTime.now()
                }
            }
        }
        stage("Print") {
            steps {
                echo BUILD_VERSION_TXT
            }
        }
    }
}

相关问题