Jenkins 和 Shell 脚本 - 无法更改日期时间值
Jenkins and Shell script - not possible to change date time value
我正在使用 shell 脚本获取 Jenkins 代理中构建的当前时间。这是 运行 中的 docker 图片 node:alpine
此命令有效:
def BUILDVERSION = sh(script: "echo `date +%Y-%m-%d-%H-%M-%S`", returnStdout: true).trim()
Output: 2021-11-20-15-27-57
现在我想在时间值上增加 1 小时,所以我用 -d '+1 hour'
修改了我的脚本 这个 shell 脚本通常在 Linux 中工作,但是如果我在Jenkins 构建代理我收到消息:invalid date '+1 hour'
这是不起作用的脚本!
def BUILDVERSION = sh(script: "echo `date -d '+1 hour' +%Y-%m-%d-%H-%M-%S`", returnStdout: true).trim()
感谢您的帮助!
关于 shell
脚本,您不需要 echo
命令,因为 date
命令的输出将由 sh
步骤返回,因此以下应该工作:
def BUILDVERSION = sh(script: "date -d '+1 hour' +%Y-%m-%d-%H-%M-%S", returnStdout: true).trim()
或者,您可以使用 Groovy(或 Java)代码计算您的时间戳,这可能会使它作为管道流程的一部分更容易处理。您可以使用类似的东西:
def HOUR = 3600 * 1000
def now = new Date();
def inOneHour = new Date(now.getTime() + 1 * HOUR);
println inOneHour.format("yyMMdd.HHmm", TimeZone.getTimeZone('UTC'))
或者使用需要管理员批准的TimeUnit.HOURS
:
def now = new Date();
def inOneHour = new Date(now.getTime() + java.util.concurrent.TimeUnit.HOURS.toMillis(2));
println inOneHour.format("yyMMdd.HHmm", TimeZone.getTimeZone('UTC'))
最后一个选项是使用 Groovy TimeCategory
,它提供了非常友好的 DSL 语法,但需要 @NonCPS
属性并且可能应该位于 shared library 中.
在库中它看起来像:
import groovy.time.TimeCategory
@NonCPS
def addHoursToDate(Date date, Integer numOfHours) {
use(TimeCategory) {
return date + numOfHours.hours
}
}
我正在使用 shell 脚本获取 Jenkins 代理中构建的当前时间。这是 运行 中的 docker 图片 node:alpine 此命令有效:
def BUILDVERSION = sh(script: "echo `date +%Y-%m-%d-%H-%M-%S`", returnStdout: true).trim()
Output: 2021-11-20-15-27-57
现在我想在时间值上增加 1 小时,所以我用 -d '+1 hour'
修改了我的脚本 这个 shell 脚本通常在 Linux 中工作,但是如果我在Jenkins 构建代理我收到消息:invalid date '+1 hour'
这是不起作用的脚本!
def BUILDVERSION = sh(script: "echo `date -d '+1 hour' +%Y-%m-%d-%H-%M-%S`", returnStdout: true).trim()
感谢您的帮助!
关于 shell
脚本,您不需要 echo
命令,因为 date
命令的输出将由 sh
步骤返回,因此以下应该工作:
def BUILDVERSION = sh(script: "date -d '+1 hour' +%Y-%m-%d-%H-%M-%S", returnStdout: true).trim()
或者,您可以使用 Groovy(或 Java)代码计算您的时间戳,这可能会使它作为管道流程的一部分更容易处理。您可以使用类似的东西:
def HOUR = 3600 * 1000
def now = new Date();
def inOneHour = new Date(now.getTime() + 1 * HOUR);
println inOneHour.format("yyMMdd.HHmm", TimeZone.getTimeZone('UTC'))
或者使用需要管理员批准的TimeUnit.HOURS
:
def now = new Date();
def inOneHour = new Date(now.getTime() + java.util.concurrent.TimeUnit.HOURS.toMillis(2));
println inOneHour.format("yyMMdd.HHmm", TimeZone.getTimeZone('UTC'))
最后一个选项是使用 Groovy TimeCategory
,它提供了非常友好的 DSL 语法,但需要 @NonCPS
属性并且可能应该位于 shared library 中.
在库中它看起来像:
import groovy.time.TimeCategory
@NonCPS
def addHoursToDate(Date date, Integer numOfHours) {
use(TimeCategory) {
return date + numOfHours.hours
}
}