使用hudson的管道插件获取内联管道脚本中的当前时间戳

时间:2016-10-26 11:59:23

标签: jenkins groovy jenkins-pipeline

我想使用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

5 个答案:

答案 0 :(得分:10)

你也可以使用它,我需要这个ms,所以:

echo "TimeStamp: ${currentBuild.startTimeInMillis}"

echo "TimeStamp: ${Util.getTimeSpanString(System.currentTimeMillis())}"

答案 1 :(得分:5)

Jenkins脚本在沙箱中运行,默认情况下, Groovy 脚本没有某些操作的权限。

执行没有权限的操作时,会抛出RejectAccessException。所以你要执行你的脚本,然后在抛出异常时转到:

http://yourHost/jenkins/scriptApproval/

批准必要的许可:

enter image description here

答案 2 :(得分:4)

只需格式化Date对象:

stage('Foo') {
  steps {
    script {
        def now = new Date()
        println now.format("yyMMdd.HHmm", TimeZone.getTimeZone('UTC'))
    }
  } 
}

答案 3 :(得分:2)

您还可以通过在字符串上下文中使用LocalDateTimeLocalDate来避免脚本批准。这些将为您提供ISO 8601默认值:

script {
  DATE_TAG = java.time.LocalDate.now()
  DATETIME_TAG = java.time.LocalDateTime.now()
}
sh "echo ${DATETIME_TAG}"

答案 4 :(得分:0)

有很多方法可以获取时间,具体取决于您最直观的API:

  1. new Date() has since been added to the script-security-plugin whitelist

  2. 通过使用currentBuild全局变量来
  3. RunWrapper API

    1. final long startTime = currentBuild.startTimeInMillislong的生成时间(以毫秒为单位)
    2. final long scheduledTime = currentBuild.timeInMillis:计划构建时间的long值(以毫秒为单位)
    3. final long buildDuration = currentBuild.duration:构建所需的毫秒数
    4. final String buildDurationAsStrong = currentBuild.durationStringduration作为String
  4. Using whitelisted java.time API,例如LocalDateTime

    import java.time.LocalDateTime
    final LocalDateTime currentTime = LocalDateTime.now()
    // do stuff with LocalDateTime
    
  5. 当然,要在脚本中添加并使用返回值

    final String currentTime = sh(returnStdout: true, script: 'date +%Y-%m-%d').trim()
    

我敢肯定还有其他方法。