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
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:
sie können dies auch verwenden, ich brauchte das in ms so:
echo "TimeStamp: ${currentBuild.startTimeInMillis}"
echo "TimeStamp: ${Util.getTimeSpanString(System.currentTimeMillis())}"
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}"
Es gibt eine Reihe von Möglichkeiten, Zeit zu gewinnen, je nachdem, welche APIs Sie am intuitivsten finden:
new Date()
wurde der Whitelist script-security-plugin
hinzugefügt
RunWrapper
APIs durch Verwendung der globalen Variablen currentBuild
final long startTime = currentBuild.startTimeInMillis
: long
Wert, ab dem der Build in Millisekunden gestartet wurdefinal long scheduledTime = currentBuild.timeInMillis
: long
Wert, zu dem der Build in Millisekunden geplant wurdefinal long buildDuration = currentBuild.duration
: Millisekunden, die für die Erstellung benötigt wurdenfinal String buildDurationAsStrong = currentBuild.durationString
: duration
als String
Verwenden von APIs mit Whitelist Java.time
, zum Beispiel LocalDateTime
import Java.time.LocalDateTime
final LocalDateTime currentTime = LocalDateTime.now()
// do stuff with LocalDateTime
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.
Formatieren Sie einfach das Date
-Objekt:
stage('Foo') {
steps {
script {
def now = new Date()
println now.format("yyMMdd.HHmm", TimeZone.getTimeZone('UTC'))
}
}
}