我想使用hudson的管道插件获取内联管道脚本中的当前时间戳。用于设置构建显示名称。
使用内联groovy脚本:
def jobName = env.JOB_NAME + "_" + new Date()
currentBuild.displayName = "$jobName"
node {
echo "job name $jobName"
}
控制台出错:
org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException:
Scripts not permitted to use new java.util.Date
答案 0 :(得分:10)
你也可以使用它,我需要这个ms,所以:
echo "TimeStamp: ${currentBuild.startTimeInMillis}"
echo "TimeStamp: ${Util.getTimeSpanString(System.currentTimeMillis())}"
答案 1 :(得分:5)
Jenkins脚本在沙箱中运行,默认情况下, Groovy 脚本没有某些操作的权限。
执行没有权限的操作时,会抛出RejectAccessException
。所以你要执行你的脚本,然后在抛出异常时转到:
http://yourHost/jenkins/scriptApproval/
批准必要的许可:
答案 2 :(得分:4)
只需格式化Date
对象:
stage('Foo') {
steps {
script {
def now = new Date()
println now.format("yyMMdd.HHmm", TimeZone.getTimeZone('UTC'))
}
}
}
答案 3 :(得分:2)
您还可以通过在字符串上下文中使用LocalDateTime
或LocalDate
来避免脚本批准。这些将为您提供ISO 8601默认值:
script {
DATE_TAG = java.time.LocalDate.now()
DATETIME_TAG = java.time.LocalDateTime.now()
}
sh "echo ${DATETIME_TAG}"
答案 4 :(得分:0)
有很多方法可以获取时间,具体取决于您最直观的API:
new Date()
has since been added to the script-security-plugin
whitelist
currentBuild
全局变量来 RunWrapper
API
final long startTime = currentBuild.startTimeInMillis
:long
的生成时间(以毫秒为单位)final long scheduledTime = currentBuild.timeInMillis
:计划构建时间的long
值(以毫秒为单位)final long buildDuration = currentBuild.duration
:构建所需的毫秒数final String buildDurationAsStrong = currentBuild.durationString
:duration
作为String
Using whitelisted java.time
API,例如LocalDateTime
import java.time.LocalDateTime
final LocalDateTime currentTime = LocalDateTime.now()
// do stuff with LocalDateTime
当然,要在脚本中添加并使用返回值
final String currentTime = sh(returnStdout: true, script: 'date +%Y-%m-%d').trim()
我敢肯定还有其他方法。