如何在Jenkins声明式流水线代码中获取Epoch(Unix)时间戳
Jenkins声明式Pipeline获取13位毫秒级Unix时间戳方案
以下两种实现都可以直接输出符合要求的13位毫秒级Epoch时间戳(格式参考1656166890987),不需要复杂换算:
- 无插件通用方案(优先推荐)
直接使用Groovy/Java原生的静态方法获取,不需要安装任何Jenkins插件,兼容所有版本的声明式Pipeline。如果需要在全Pipeline所有阶段复用这个时间戳,可以直接在全局环境变量块定义:
pipeline { agent any environment { // 核心取值逻辑,直接返回13位毫秒时间戳 EPOCH_TIMESTAMP = "${System.currentTimeMillis()}" } stages { stage('自动化测试执行') { steps { // 直接通过env变量调用即可,比如打日志、传给测试脚本作为版本标识 echo "当前测试批次毫秒时间戳: ${env.EPOCH_TIMESTAMP}" // 示例:把时间戳作为参数传给测试启动命令 sh "python run_test.py --batch-id=${env.EPOCH_TIMESTAMP}" } } } }
说明:System.currentTimeMillis()是原生内置方法,直接返回从1970-01-01 00:00:00 UTC到当前时刻的真实毫秒数,输出长度固定为13位,完全匹配格式要求,没有精度损失。
- 已安装timestamper插件的简化写法
如果你的Jenkins环境已经预装了常用的timestamper日志时间戳插件,也可以直接用构建对象自带的时间属性取值:
pipeline { agent any stages { stage('获取时间戳') { steps { script { def epochMillis = currentBuild.startTimeInMillis.toString() echo "构建启动时间的13位毫秒戳: ${epochMillis}" } } } } }
避坑提醒:不要使用秒级时间戳乘1000的方式凑13位,这种写法生成的时间戳最后三位固定为
000,没有真实毫秒精度,不符合实际使用要求。也不推荐使用new Date().getTime()的写法,效果和原生方法一致但会额外生成临时对象,没有必要。
内容的提问来源于stack exchange,提问作者Chandru
相关产品推荐
相关产品推荐

