Reputation: 939
I want to get Getting current timestamp in inline pipeline script using pipeline plugin of hudson. For setting up build display name.
Inline groovy script used:
def jobName = env.JOB_NAME + "_" + new Date()
currentBuild.displayName = "$jobName"
node {
echo "job name $jobName"
}
Error on console :
org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException:
Scripts not permitted to use new java.util.Date
Upvotes: 38
Views: 138666
Reputation: 16971
Here's a short way to print timestamp in your local timezone:
String.format('%tF %<tH:%<tM', java.time.LocalDateTime.now())
I'm using it to set build name and description, with a groovy token, for example:
${GROOVY,script = "String.format('%tF %<tH:%<tM', java.time.LocalDateTime.now())"}
Prints my local time: 2021-12-05 16:07
Note that build.getTimestampString2() would also print the timestamp, but in UTC (might be different than your timezone).
Upvotes: 2
Reputation: 47259
There are a bunch of ways to get time depending on what APIs you find most intuitive:
new Date()
has since been added to the script-security-plugin
whitelist
RunWrapper
APIs through use of currentBuild
global variable
final long startTime = currentBuild.startTimeInMillis
: long
value of when the build was started in millisecondsfinal long scheduledTime = currentBuild.timeInMillis
: long
value of when the build was scheduled in millisecondsfinal long buildDuration = currentBuild.duration
: milliseconds it has taken to buildfinal String buildDurationAsStrong = currentBuild.durationString
: duration
as a String
Using whitelisted java.time
APIs, for example LocalDateTime
import java.time.LocalDateTime
final LocalDateTime currentTime = LocalDateTime.now()
// do stuff with LocalDateTime
Of course, shelling out and using the return value in your script
final String currentTime = sh(returnStdout: true, script: 'date +%Y-%m-%d').trim()
And I'm sure there are other methods, too.
Upvotes: 31
Reputation: 1137
You can also avoid script approvals by using LocalDateTime
or LocalDate
in string context. These will give you ISO 8601 defaults:
script {
DATE_TAG = java.time.LocalDate.now()
DATETIME_TAG = java.time.LocalDateTime.now()
}
sh "echo ${DATETIME_TAG}"
Upvotes: 15
Reputation: 8711
Just format the Date
object:
stage('Foo') {
steps {
script {
def now = new Date()
println now.format("yyMMdd.HHmm", TimeZone.getTimeZone('UTC'))
}
}
}
Upvotes: 36
Reputation: 4769
you can also use this, I needed this in ms so:
echo "TimeStamp: ${currentBuild.startTimeInMillis}"
echo "TimeStamp: ${Util.getTimeSpanString(System.currentTimeMillis())}"
Upvotes: 37
Reputation: 18507
Jenkins scripts are running in a sandbox, by default the Groovy script doesn't have permissions for some operations.
When you perform an operation without permissions the RejectAccessException
is thrown. So you've to execute your script, and then when the exception is thrown go to:
http://yourHost/jenkins/scriptApproval/
And approve the necessary permission:
Upvotes: 10