将时间戳添加到Jenkins管道中从节点项目到artifactory生成的war文件中

将时间戳添加到Jenkins管道中从节点项目到artifactory生成的war文件中,jenkins,jenkins-pipeline,artifactory,jenkins-groovy,Jenkins,Jenkins Pipeline,Artifactory,Jenkins Groovy,我有一个从Jenkins管道生成的war文件。我想把它发布到Artifactory。我想向生成到Artifactory上的war文件添加一个时间戳。是否有办法更改JenkinsFile以反映时间戳 def server = Artifactory.newServer url: "https://artifacts.com/artifactory" buildInfo = Artifactory.newBuildInfo() uploadSpec = """{ "files": [

我有一个从Jenkins管道生成的
war
文件。我想把它发布到Artifactory。我想向生成到Artifactory上的
war
文件添加一个时间戳。是否有办法更改
JenkinsFile
以反映时间戳

def server = Artifactory.newServer url: "https://artifacts.com/artifactory"
buildInfo = Artifactory.newBuildInfo()
uploadSpec = """{
    "files": [
    {
        "pattern": "./build/*.war",
        "target": "<path-to-target>"
    }
    } """

    // Upload to Artifactory.
    server.upload spec: uploadSpec, buildInfo: buildInfo
    // Publish build info.
    server.publishBuildInfo buildInfo
def server=Artifactory.newServer url:https://artifacts.com/artifactory"
buildInfo=Artifactory.newBuildInfo()
uploadSpec=“”{
“文件”:[
{
“模式”:“/build/*.war”,
“目标”:”
}
} """
//上传到Artifactory。
server.upload spec:uploadSpec,buildInfo:buildInfo
//发布构建信息。
server.publishBuildInfo buildInfo
JenkinsFile
中需要做哪些更改才能将时间戳包含到工件中?

两种解决方案

  • 在上载之前重命名文件

    • 如果您只有一个文件,并且知道其名称:
    • 如果你有几个文件,你不知道它们的名字
    在这里,我们使用bash循环遍历所有.war文件并移动它们以重命名它们。
    ${i::-4}
    删除扩展名。您可以通过查看date的手册页来修改日期格式

  • 使用groovy并让target属性成为进行重命名的属性
  • @Field def timeStamp=Calendar.getInstance().getTime().format('YYYYMMdd-hhmmss',TimeZone.getTimeZone('CST'))
    uploadSpec=“”{
    “文件”:[
    {
    “模式”:“/build/*.war”,
    “目标”:“${timeStamp}.war”
    }
    } """
    
    原文来自:


    正如您所提到的,您必须将Calendar.getInstance方法、getTime和getTimeZone也列为白名单

    此时间戳将反映在工件元数据或工件名称中。您还可以查看工件的“build.timestamp”属性。此解决方案需要启用,这是不可能的,因为我不希望我更新了我的答案。在jenkins作业中,命令行确实是比Groovy更好的解决方案。Groovy在master jenkins上执行,sh命令在Slave上执行,但我个人喜欢Groovy的解决方案。我很好奇你所说的安全漏洞。如何列出日历方法是否存在安全漏洞?
    sh 'mv toto.war `date +"%d-%m-%Y-%H.%M"`toto.war'
    
    sh '''#!/bin/bash
    for i in *.war; do mv "$i" ${i::-4}`date +"--%d-%m-%Y-%H.%M"`.war; done
    '''
    
    @Field def timeStamp = Calendar.getInstance().getTime().format('YYYYMMdd-hhmmss',TimeZone.getTimeZone('CST'))
    
    uploadSpec = """{
        "files": [
        {
            "pattern": "./build/*.war",
            "target": "<path-to-target>.${timeStamp}.war"
        }
        } """