Jenkins 和 Shell 腳本 - 無法更改日期時間值

安德烈·唐納德

我正在使用 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()

感謝您的幫助!

諾姆·赫爾默

關於shell腳本,您不需要該echo命令,因為datesh步驟將返回命令的輸出,因此以下內容應該有效:

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

groovy 腳本似乎超時 (jenkins)

在 Jenkins 管道代碼中通過 shell 腳本運行時找不到 SQL 命令

用於重置日期和時間的 Python 腳本

在 Shell 腳本中匹配列和行

如何通過 Shell 腳本更改用戶名

循環變量不會傳遞給 Jenkins 中的 shell 腳本

無法從通過 pip 和 setuptools 安裝的 entry_points 腳本中的 exec() Python 腳本

我需要在腳本執行結束時更新 shell 腳本中的源配置文件

我在將 bash 命令轉換為 shell 腳本中的 shell 腳本語法錯誤時遇到錯誤

無法使用“查找”在 shell 腳本中設置變量

無法在 shell 腳本的 gremlin 查詢中傳遞變量

Shell/Bash - 腳本和函數衝突的位置參數

當在子shell腳本中運行時,scp沒有列出

從 shell 腳本中的文件讀取時缺少字符

當我不知道文件名稱時重命名文件 - shell 腳本

如何使用shell腳本在csv文件的列開頭插入值

如何在 shell 腳本中使用帶有 sed 的值?

Power Shell 簡單腳本

如何在執行之前查找和替換 build.gradle 中的行,使用 shell 腳本

如何僅從 Shell 腳本中的變量返回整數並丟棄字母和前導零?

當腳本位於 shell 的 stdin 上時,apt-get 之後的 shell 腳本中的命令未正確執行

如何同時執行 django runserver 和 python 腳本(在 cmd 中的一行)

從字符串中提取腳本參數名稱和值

帶有參數值和可選標誌的 Bash 腳本

if 和 else if 在谷歌腳本中

我的 GitHub 操作中嵌入式 shell 腳本的 YAML 語法有什麼問題?

如何在使用 shell 腳本將 Linux 機器加入 Active Directory 時輸入密碼?

Jenkins Workflow Shell步骤和密码

將 Powershell 腳本轉換為 jenkins 作業