web-dev-qa-db-de.com

Aktuelle Zeitmarke im Inline-Pipeline-Skript mithilfe des Pipeline-Plugins von Hudson

Ich möchte aktuelle Zeitstempel im Inline-Pipeline-Skript erhalten, indem Sie das Pipeline-Plugin von Hudson verwenden. Zum Einrichten des Build-Anzeigenamens.

Inline Groovy Script verwendet:

def jobName = env.JOB_NAME + "_" + new Date()
currentBuild.displayName = "$jobName"
node {
   echo "job name $jobName"
}

Fehler in der Konsole:

org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException: 
  Scripts not permitted to use new Java.util.Date
7

Jenkins-Skripts werden in einer Sandbox ausgeführt. Standardmäßig hat das Skript Groovy keine Berechtigungen für einige Operationen. 

Wenn Sie eine Operation ohne Berechtigungen ausführen, wird die RejectAccessException ausgelöst. Sie müssen Ihr Skript also ausführen, und wenn die Ausnahme ausgelöst wird, gehen Sie zu:

http://yourHost/jenkins/scriptApproval/

Und genehmige die notwendige Erlaubnis:

 enter image description here

5
albciff

sie können dies auch verwenden, ich brauchte das in ms so:

echo "TimeStamp: ${currentBuild.startTimeInMillis}"

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

Sie können Skriptgenehmigungen auch vermeiden, indem Sie LocalDateTime oder LocalDate im Zeichenfolgenkontext verwenden. Daraus ergeben sich die ISO 8601-Standardeinstellungen:

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

Es gibt eine Reihe von Möglichkeiten, Zeit zu gewinnen, je nachdem, welche APIs Sie am intuitivsten finden:

  1. new Date() wurde der Whitelist script-security-plugin hinzugefügt

  2. RunWrapper APIs durch Verwendung der globalen Variablen currentBuild

    1. final long startTime = currentBuild.startTimeInMillis : long Wert, ab dem der Build in Millisekunden gestartet wurde
    2. final long scheduledTime = currentBuild.timeInMillis : long Wert, zu dem der Build in Millisekunden geplant wurde
    3. final long buildDuration = currentBuild.duration : Millisekunden, die für die Erstellung benötigt wurden
    4. final String buildDurationAsStrong = currentBuild.durationString : duration als String
  3. Verwenden von APIs mit Whitelist Java.time , zum Beispiel LocalDateTime

    import Java.time.LocalDateTime
    final LocalDateTime currentTime = LocalDateTime.now()
    // do stuff with LocalDateTime
    
  4. Natürlich muss der Rückgabewert in Ihrem Skript ausgeblendet und verwendet werden

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

Und ich bin mir sicher, dass es auch andere Methoden gibt.

4
mkobit

Formatieren Sie einfach das Date-Objekt:

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