【问题标题】:Jenkins and Shell script - not possible to change date time valueJenkins 和 Shell 脚本 - 无法更改日期时间值
【发布时间】:2021-11-20 15:50:19
【问题描述】:

我正在使用 shell 脚本来获取 Jenkins 代理中构建的当前时间。这是在 docker image 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()

感谢您的帮助!

【问题讨论】:

  • @GeroldBroser 我不明白你想说什么......如果你想帮忙......“sh”在我的第一个脚本中被正确执行,但如果我不正常运行尝试添加-d '+1 hour'
  • 我想到了bashsh 之间的区别,但第二次考虑这对于date 来说不太可能。也许你遇到了Jenkinsfile idiosynchrasies with escaping and quotes。请将构建控制台输出的相关部分添加到您的问题中。
  • @AndreyDonald 为什么不 Use Groovy 获取时间戳?
  • 有多种方式,最简单的可能是:def now = new Date(); 然后是def inOneHour = new Date(now.getTime() + 1 * 3600 * 1000);def inOneHour = new Date(now.getTime() + java.util.concurrent.TimeUnit.HOURS.toMillis(2));,最后是格式:println inOneHour.format("yyMMdd.HHmm", TimeZone.getTimeZone('UTC'))

标签: linux shell jenkins jenkins-pipeline


【解决方案1】:

关于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
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-09
    • 2014-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-04
    • 2018-06-08
    相关资源
    最近更新 更多