如何在Jenkinsfile中引入时间戳变量

很多时候,在构建的过程中,我们会取系统当前时间戳作为一个参照,融入到构建过程中,在原来自由风格中,都是基于Linux系统级别的 date 命令进行的定义,现在来到流水线里边,突然发现想要定义一个全局的时间戳变量,似乎并不容易,尽管知道流水线脚本就是groovy语言,然而因为不会开发,一时间也不知道从何下手,原来用的如下方式进行获取的时间戳:

pipeline{
    agent any
    stages{
        stage('timestamp') {
            steps {
                script {
                    try {
                        echo '========================'
                        # 如果想要定义并获取时间戳变量,最好写到这里,实测写到environment是违规的语法
                        sh "version=`date +%Y%m%d%H%M%S`"
                        sh "printenv"
                        echo '========================'
                    } catch (err) {
                        echo '========================'
                    }
                }
            }       
        }
    }
}

后来的使用中,深深觉得这种定义十分不方便,因此不死心的再到网上各种搜罗,看了不少的案例,似乎也都没有找到让自己满意的结果,最后在一个示例当中找到了,并做了一下简单调整,从而符合自己的需求。

def createVersion() {
	// 定义一个版本号作为当次构建的版本,输出结果 20191210175842_69
    return new Date().format('yyyyMMddHHmmss') + "_${env.BUILD_ID}"
}

pipeline {
    agent any
    // 可在 environment 引入上边定义的函数,以便于全局调用
    environment {
        _version = createVersion()
    }
    stages {
        stage ("test") {
            steps {
                echo ${_version}
            }
        }
    }
}

这样就实现了自己想要的全局时间戳变量了。

2赞

取系统当前时间戳,这个很常用的方法,特别是构建发布版本使用时间戳。

我们可以收集一些常用的方法,添加到中文社区的共享库中。

可以,收集一波之后,可以搞一次分享,,话说我还没有掌握共享库的用法呢

我的方式

pipeline {
    agent any

    environment {

       _version = sh(script: "echo `date '+%Y%m%d%H%M%S'`", returnStdout: true).trim()
    }

    stages {
        stage ("test") {
            steps {
                echo "${_version}"
            }
        }
    }
}

建议减少对 shell 的依赖,这样可以对多平台的兼容更好。