如何在 Jenkins 中为工件添加时间戳

2023-12-02

我关注了 Jenkisfile,并且正在尝试上传带有时间戳的工件。

import groovy.transform.Field
@Field def timeStamp = Calendar.getInstance().getTime().format('YYYYMMdd-hhmmss',TimeZone.getTimeZone('CST'))

node {
stage('Creating some artifacts') {
    sh 'touch hello.txt hi.txt'
}

stage('Uploading artifacts') {
    def server = Artifactory.server ('art-1')
    def uploadSpec = """{
        "files": [
        {
        "pattern": "*.txt",
        "target": "repo1/Dev/${env.BUILD_NUMBER}/*.txt.${timeStamp}"
         }
  ]
    }"""
            def buildInfo1 = server.upload(uploadSpec)
            server.publishBuildInfo(buildInfo1)
  }
}

但是,我在尝试此操作时遇到以下错误。

[consumer_1] Deploying artifact: http://learner.blr.example.com:8081/artifactory/repo1/Dev/12/*.txt.20180913-044451
[Thread consumer_1] An exception occurred during execution:
java.lang.RuntimeException: java.io.IOException: Failed to deploy file. Status code: 500 Response message: Artifactory returned the following errors: 
Invalid path. '*' is not a valid name character: repo1/Dev/12/*.txt.20180913-044451 Status code: 500
    at org.jfrog.build.extractor.clientConfiguration.util.spec.SpecDeploymentConsumer.consumerRun(SpecDeploymentConsumer.java:44)
    at org.jfrog.build.extractor.producerConsumer.ConsumerRunnableBase.run(ConsumerRunnableBase.java:11)
    at java.lang.Thread.run(Thread.java:748)
Caused by: java.io.IOException: Failed to deploy file. Status code: 500 Response message: Artifactory returned the following errors: 
Invalid path. '*' is not a valid name character: repo1/Dev/12/*.txt.20180913-044451 Status code: 500
    at org.jfrog.build.extractor.clientConfiguration.client.ArtifactoryBuildInfoClient.uploadFile(ArtifactoryBuildInfoClient.java:692)
    at org.jfrog.build.extractor.clientConfiguration.client.ArtifactoryBuildInfoClient.doDeployArtifact(ArtifactoryBuildInfoClient.java:374)
    at org.jfrog.build.extractor.clientConfiguration.client.ArtifactoryBuildInfoClient.deployArtifact(ArtifactoryBuildInfoClient.java:362)
    at org.jfrog.build.extractor.clientConfiguration.util.spec.SpecDeploymentConsumer.consumerRun(SpecDeploymentConsumer.java:39)
    ... 2 more

[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
java.lang.Exception: Error occurred during operation, please refer to logs for more information.
    at org.jfrog.build.extractor.producerConsumer.ProducerConsumerExecutor.start(ProducerConsumerExecutor.java:84)
    at org.jfrog.build.extractor.clientConfiguration.util.spec.SpecsHelper.uploadArtifactsBySpec(SpecsHelper.java:71)
    at org.jfrog.hudson.generic.GenericArtifactsDeployer$FilesDeployerCallable.invoke(GenericArtifactsDeployer.java:190)
Caused: java.lang.RuntimeException: Failed uploading artifacts by spec
    at org.jfrog.hudson.generic.GenericArtifactsDeployer$FilesDeployerCallable.invoke(GenericArtifactsDeployer.java:194)
    at org.jfrog.hudson.generic.GenericArtifactsDeployer$FilesDeployerCallable.invoke(GenericArtifactsDeployer.java:131)
    at hudson.FilePath.act(FilePath.java:1042)
    at hudson.FilePath.act(FilePath.java:1025)
    at org.jfrog.hudson.pipeline.executors.GenericUploadExecutor.execution(GenericUploadExecutor.java:52)
    at org.jfrog.hudson.pipeline.steps.UploadStep$Execution.run(UploadStep.java:65)
    at org.jfrog.hudson.pipeline.steps.UploadStep$Execution.run(UploadStep.java:46)
    at org.jenkinsci.plugins.workflow.steps.AbstractSynchronousNonBlockingStepExecution$1$1.call(AbstractSynchronousNonBlockingStepExecution.java:47)
    at hudson.security.ACL.impersonate(ACL.java:290)
    at org.jenkinsci.plugins.workflow.steps.AbstractSynchronousNonBlockingStepExecution$1.run(AbstractSynchronousNonBlockingStepExecution.java:44)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)
Finished: FAILURE

有没有其他/简单的方法可以在 Jenkins 的工件中添加时间戳?

PS:我是 Jenkins Groovy 脚本和 JFrog 的新手


错误消息说*是文件名的无效字符,因此我认为您不能在目标字段中使用它。然而,artifactory 文档说你可以这样做(文档链接如下):

def uploadSpec = """{
    "files": [
        {
             "pattern": "(*).txt",
             "target": "repo1/Dev/${env.BUILD_NUMBER}/{1}.txt.${timeStamp}"
        }
    ]

在这段代码中,{1}代表“第一个括号内匹配的内容pattern“(正则表达式中的每个左括号+右括号定义一个捕获组).

注意:我不使用神器,所以我没有测试上面的代码,我将离开神器文档:https://www.jfrog.com/confluence/display/RTF/Using+File+Specs https://www.jfrog.com/confluence/display/RTF/Using+File+Specs#UsingFileSpecs-UsingPlaceholders

我还建议您将时间戳移至文件名而不是文件扩展名,以便当您下载文件时,您的计算机知道使用哪个程序来打开它。所以我会将目标更改为:

  • 文件先按名称短写,然后按时间戳短写:repo1/Dev/${env.BUILD_NUMBER}/{1}-${timeStamp}.txt
  • 文件先按时间戳,然后按名称缩短:repo1/Dev/${env.BUILD_NUMBER}/${timeStamp}-{1}.txt
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Jenkins 中为工件添加时间戳 的相关文章

随机推荐

  • 带有设备 UDID 的 iPhone 应用

    我想将我的iPhone应用程序安装到不同的iPhone上进行测试 但每次我都做配置文件的事情 如何在编译时在我的应用程序中使用设备 UDID 以便它们 应用程序 可以安装在这些 iPhone 上 任何想法 Regards 步骤 1 打开你的
  • 在 iPhone 上将 .caf 转换为 .mp3

    有没有办法使用以下方法将我录制的 caf 文件转换为 mp3 iPhone SDK 核心音频 还有其他吗 我已经环顾了一段时间 但我发现的只是一个命令行实用程序 不允许在 iPhone 上运行 Regards 由于iPhone不应该真正用于
  • 如何使用 GDK 检查 Google Glass 是否连接到互联网

    有没有办法在运行时检测 Google Glass 是否连接到互联网 例如 在我的应用程序中使用语音输入时 我经常收到 现在无法联系 Google 的消息 相反 我想先发制人地拦截会导致该消息的条件并使用默认值而不是要求语音输入 经过一段时间
  • 从 R 中的数字中删除逗号

    我的数字有 表示 1 000 及以上 R 将其视为因子 我想将两个这样的变量从因子切换为数字 实际上这两个变量都是数字 但出于某种原因 R 将它们视为因子 数据是从 Excel 导入的 更改因子变量mydata x1对于数字变量 我使用以下
  • java 中更好的 Html Builder [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我想要低于输出 table tbody thead Blah Blah table Header Constant Part thead tr so
  • 单击按钮时反应获取数据

    我正在尝试在反应中获取数据 问题是我必须单击按钮两次才能获取该数据 虽然我在第一次单击时没有获取数据 但如果我向其中添加 JSON stringify 它会以某种方式呈现 如果我不添加 JSON stringify 它会返回未定义 如果有人
  • 依赖属性上的 XAML 绑定

    我目前正在开发 WPF TimePicker 控件 该控件继承了一个 TextBox 它有一个 MaskedTexProvider 它以以下格式显示 TimeSpan HH MM 到目前为止 一切都按预期工作 向上和向下箭头更改基础 Tim
  • 在 RecyclerView 中发布 ExoPlayer

    我正在 RecyclerView 中实现 ExoPlayer 但滚动时视频会停止 但音频不会停止 如何在RecyclerView中释放ExoPlayer 或者我怎样才能获得回收对象的位置 以便我能够释放 ExoPlayer 这是我的数据对象
  • System.Data.Entity.DbContext 找不到添加为引用

    当我去构建我的项目时 我收到此错误 类型 System Data Entity DbContext 是在未引用的程序集中定义的 您必须添加对程序集 EntityFramework Version 5 0 0 0 Culture neutra
  • 如何更改 Oracle 中视图的列大小

    我正在尝试使用与表相同的命令来更改视图的列大小 例如 alter table STUDENT modify ROLL NO VARCHAR2 80 但它的抛出错误 SQL 错误 ORA 00942 表或视图不存在 那么我们如何改变视图的列大
  • 注册到活动的 Google 发布商代码

    我查看了 Google 发布商代码参考 并决定可以向我的广告位添加一些事件 如果我只定义了一个插槽 它会非常有效 如果我添加更多插槽 事件会在我的控制台上不断重复我有插槽的次数 所以 如果我做这样的事情
  • 如何使用 javascript 展开和折叠

    我在我的网站上创建了一个列表 该列表是由 foreach 循环创建的 该循环使用我的数据库中的信息构建 每个项目都是一个包含不同部分的容器 因此这不是像 1 2 3 等这样的列表 我列出了带有信息的重复部分 每个部分都有一个小节 一般构建如
  • C++ 大数算术

    我正在开发一个用于大数算术的类 它现在知道如何进行加法 处理 cin 和 cout 然而 它的减法功能非常有限且基本 并且不知道如何处理负数 但这很容易解决 我的问题是 如何进行乘法运算 我将在这里详细介绍它如何处理 cin 和 cout
  • 将本地 Sourcetree 存储库恢复为 master

    我是 Sourcetree 的新手 在本地造成了混乱 与 origin master 相比 有 7 个提前提交 我想忽略并删除我在本地完成的所有操作 然后通过将本地存储库恢复到当前的 origin master 来重新开始 我该怎么做呢 R
  • DIV 汇编的错误答案

    我有我的代码的一部分 mov di 3 mov cx 16 looop xor dx dx shl bx 1 adc dx dx cmp cx 16 je cx16 it s will dec cx and jump loop push d
  • 更改 ggplot 因子颜色

    我注意到这里盒须图电话 p geom boxplot aes fill factor cyl 为箱线图填充生成明亮的红色 绿色 蓝色 同时 p geom boxplot aes fill factor vs 产生独特的浅绿色 红色 在我的数
  • 如何获取链接到耶拿资源的资源列表?

    我使用 Jena API 创建了一个模型 public static void main String args Model model ModelFactory createDefaultModel Resource alice Reso
  • iOS - 从后台自动打开应用程序

    是否可以以某种方式从后台模式重新打开应用程序 例如 如果后台应用程序正在检查服务器中的某些标志 然后触发时 它会自动转到前台吗 如果没有 我可以显示一条消息并播放声音以供用户请求重新打开应用程序吗 例如 WhatsApp 如何实现这一目标
  • C#中有指数运算符吗?

    例如 是否存在可以处理此问题的操作员 float Result Number1 Number2 Number1 2 Number2 2 Result Number1 operator Number2 过去的 运算符在其他语言中充当指数运算符
  • 如何在 Jenkins 中为工件添加时间戳

    我关注了 Jenkisfile 并且正在尝试上传带有时间戳的工件 import groovy transform Field Field def timeStamp Calendar getInstance getTime format Y