我正在使用 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()
感謝您的幫助!
uj5u.com熱心網友回復:
關于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.HOURSwhich 需要管理員批準:
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屬性并且可能應該駐留在共享庫中。
在庫中,它看起來像:
import groovy.time.TimeCategory
@NonCPS
def addHoursToDate(Date date, Integer numOfHours) {
use(TimeCategory) {
return date numOfHours.hours
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/362583.html
上一篇:使用shell(bash)腳本從檔案中匯出帶有子字串的字串
下一篇:在shell中逐行合并兩個檔案
