'How to specify Job DSL checkout timeout in Jenkins Git plugin?
Clone timeout can be specified using:
git {
...
cloneTimeout(60)
}
where 60 is timeout is minutes. I read that checkout timeout can also be specified but I cannot find details. Both checkoutTimeout(...) and timeout(...) give an error.
EDIT
I can set the checkout timeout via Jenkins GUI (Configuration --> SCM --> Git --> Additional Behaviors --> Advanced Checkout Behaviors --> Timeout). I'd like to do the same in a Groovy script that generates Docker configurations for Jenkins:
...
public class DockerJob {
...
multiscm {
git {
remote {
url(...)
branch(...)
...
}
shallowClone()
cloneTimeout(60)
// Add "checkout timeout" here...
}
...
}
...
}
...
Solution 1:[1]
After some experimentation, I found the solution shown below.
RECAP
Checkout timeout can be set via Jenkins GUI (Configuration --> SCM --> Git --> Additional Behaviors --> Advanced Checkout Behaviors --> Timeout). I'd like to do the same in a Groovy script that generates Docker configurations for Jenkins. The script already sets clone timeout.
...
public class DockerJob {
...
multiscm {
git {
remote {
url(...)
branch(...)
...
}
shallowClone()
cloneTimeout(60)
// Add "checkout timeout" here...
}
...
}
...
}
...
The obvious
...
// "Checkout timeout"
checkoutTimeout(60)
...
did not work. Setting timeouts in general
...
// "Checkout timeout"
timeout(60)
...
also did not work. Then comment on a web page lead to:
...
// "Checkout timeout"
extensions {
checkoutOptions {
timeout(60)
}
}
...
that also did not work. Finally...
SOLUTION
...
public class DockerJob {
...
multiscm {
git {
remote {
url(...)
branch(...)
...
}
shallowClone()
cloneTimeout(60)
// "Checkout timeout"
configure { node ->
node / 'extensions' << 'hudson.plugins.git.extensions.impl.CheckoutOption' {
timeout 60
}
}
}
...
}
...
}
...
Solution 2:[2]
I had to change it like this with the pipeline as the CheckoutOption was not working for me
extensions: [[$class: 'CloneOption', timeout: 120]]
Full checkout code
checkout([$class: 'GitSCM', branches: [[name: '*/master']],
extensions: [[$class: 'CloneOption', timeout: 120]], gitTool: 'Default',
userRemoteConfigs: [[credentialsId: key, url: repo]]
])
Solution 3:[3]
How about using the workflow plugin and do something like this?
checkout([$class: 'GitSCM', branches: [[name: '*/master']], doGenerateSubmoduleConfigurations: false, extensions: [[$class: 'CheckoutOption', timeout: 100]], submoduleCfg: [], userRemoteConfigs: [[]]])
Solution 4:[4]
Following checkout config works perfect for me in a jenkins pipeline script. We are using stash1 just like github as internal git server. Replace it with your own.
stage('Checkout') {
steps {
echo "Running checkout stage"
checkout([$class: 'GitSCM', branches: [
[name: "*/${params.branch}"]
], doGenerateSubmoduleConfigurations: false, extensions: [
[$class: 'CleanCheckout'], [$class: 'CloneOption', timeout: 30, shallow: true]
], submoduleCfg: [], userRemoteConfigs: [
[credentialsId: 'ink_bot', url: "ssh://[email protected]:7999/int_sparktp/${params.repo}.git"]
]])
}
}
Solution 5:[5]
Adding this extension works for me.
extensions: [[$class: 'CloneOption', timeout: 60]]
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | Petr Vep?ek |
| Solution 2 | guillem |
| Solution 3 | OhadBasan |
| Solution 4 | saumilsdk |
| Solution 5 | Neal |
