我想在 Jenkins 管道腳本中獲取作業日的最后一個日期,例如今天 3,如果今天是星期一或今天 1。所以我寫了一個這樣的腳本:
environment {
TODAY_WEEK = "`date %u`" // today is 9/26/2022, so "1"
LAST = "${env.TODAY_WEEK == "1" ? "`date -d '-3 day' %Y%m%d`" : "`date -d '-1 day' %Y%m%d`"}"
}
...
sh( "diff report_${LAST}.json report_${TODAY}.json" )
但是當我運行這個腳本時,LAST總是變成date -d '-1 day'不管當前日期。所以我嘗試了另一種方法:
environment {
TODAY_WEEK = "`date %u`" // today is 9/26/2022, so "1"
LAST = getLastDate(env.TODAY_WEEK)
}
...
def getLastDate(dayOfWeek) {
today = new Date()
if (dayOfWeek.equals("1")) {
last = today - 3
} else {
last = today - 1
}
return last.format("yyyyMMdd")
}
但我得到了相同的結果 - LAST 始終成為“今天 - 1”的日期。這個腳本有什么問題?
uj5u.com熱心網友回復:
此管道腳本將幫助:
pipeline {
agent any
environment {
TODAY_WEEK = sh(returnStdout: true, script: 'date %u')
}
stages {
stage ('Run'){
steps {
script {
today = new Date()
if (env.TODAY_WEEK.toInteger() == 1) {
testLast = today - 3
lastDayofWeek = testLast.format("yyyyMMdd")
echo "${lastDayofWeek}"
}
else {
testLast = today - 1
lastDayofWeek = testLast.format("yyyyMMdd")
echo "${lastDayofWeek}"
}
}
}
}
}
}
輸出:

作業輸出不正確的原因
在您的管道腳本中,環境變數TODAY_WEEK沒有回傳任何結果,因此腳本始終無法呼叫else條件。
您可以使用以下命令在 Jenkins 管道中列印環境變數:
sh "printenv"
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/510155.html
標籤:詹金斯
