我需要有两个与jenkins声明管道并行运行的构建。 为避免构建之间的冲突,可以使用构造后脚本化管道中的工作区:
lock('some_lock') {
checkout git 'gitrepo'
build
}
在声明性管道中,不会直接调用结帐步骤,所以即使我们会像这样锁定,
steps {
lock('some_lock') {
build here ongoing
}
}
我们可以遇到构建A正在构建的情况,构建B正在等待锁定,但它仍然会执行结帐,因为在声明性管道中,您没有指定何时结帐。可以避免吗?
我在理论上知道Jenkins不应该在这种情况下使用相同的工作空间。但不幸的是,它不时发生。
答案 0 :(得分:4)
我认为声明性管道中阻碍你的部分是默认情况下自动发生的“声明:Checkout SCM”阶段。如果是这样,您可以通过关闭此功能并手动检查源代码来解决您的问题,如下所示:
pipeline {
agent { label 'docker' }
options {
skipDefaultCheckout true // this is how you avoid the 'Declarative: Checkout SCM' stage
}
stages {
stage('commit_stage') {
steps {
lock('some_lock') {
checkout scm // this is how you replicate what 'Declarative: Checkout SCM' does as a step
echo 'build stuff here'
}
}
}
}
}