考虑使用Jenkins 2.176.1进行以下设置:
FoobarPoll SCM作为(仅)构建触发器,具有:H/5 * * * *...(假设这是指在下一步中配置的SCM)Pipeline script from SCM与SCM Git和一个有效的Git存储库URL
Lightweight checkout由于JENKINS-42971和JENKINS-48431(我用的生成变量真正的项目和Jenkinsfile,这也可能会影响如何pollSCM工作的,所以我在这里包括这一步)Jenkinsfile在Jenkinsfile看起来大约是这样的:
#!groovy
pipeline {
agent any
triggers { pollSCM 'H/5 * * * *' }
stages {
stage('Source checkout') {
steps {
checkout(
[
$class: 'GitSCM',
branches: [],
browser: [],
doGenerateSubmoduleConfigurations: false,
extensions: [],
submoduleCfg: [],
userRemoteConfigs: [
[
url: 'git://server/project.git'
]
]
]
)
stash 'source'
}
}
stage('OS-specific binaries') {
parallel {
stage('Linux') {
agent { label 'gcc && linux' }
steps {
unstash 'source'
echo 'Pretending to do a build here'
}
}
stage('Windows') {
agent { label 'windows' }
steps {
unstash 'source'
echo 'Pretending to do a build here'
}
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
到目前为止,我的理解是:
Jenkinsfile(不是整个回购)会触发任何已注册代理(或在管道项目中配置)上的管道。pollSCM触发器Jenkinsfile来触发管道阶段。
pollSCM触发器在哪里轮询(什么是SCM回购)?而且,如果它是随机代理,那么它如何合理地检测民意测验中的变化?现在我很困惑什么是指什么。因此,这里是我的问题(所有相互关联的原因,就是为什么我将其放在一个问题中):
Jenkinsfile或是否有任何更改?在我的情况下,存储库是相同的(用于Jenkinsfile生成二进制文件的源文件和源文件)。
pollSCM触发器是否Jenkinsfile以某种方式自动地指向该checkout步骤?
checkout通过不同的设置执行多个步骤?checkout scm简写,pollSCM实际上是指在管道项目中配置的SCM,因此我可以将checkout()to 缩短checkout scm为steps?不幸的是,用户手册没有回答这些问题中的任何pollSCM一个,并且整个手册中的单个页面上总共出现了四次。
小智 3
我来尝试一下这个:
管道项目轮询 SCM 只是为了 Jenkinsfile 还是为了任何更改?我的例子中的存储库是相同的(用于 Jenkinsfile 和用于构建二进制文件的源文件)。
管道项目将轮询存储库中的任何文件更改,而不仅仅是 Jenkinsfile。源存储库中的 Jenkinsfile 是常见做法。
如果(项目级)轮询在任何更改而不是 Jenkinsfile 更改时触发,Jenkinsfile 中的 pollSCM 触发器是否会以某种方式自动引用结帐步骤?
当看到存储库发生更改时,您的管道将被执行,并且这些步骤将按照它们在 Jenkinsfile 中出现的顺序运行。
那么......会发生什么,我会有多个具有不同设置的结账步骤吗?
如果您使用签出步骤定义了多个存储库(使用多个签出 SCM 调用),则将轮询主管道项目存储库是否有任何更改,并且您在管道中定义的存储库将被签出,无论它们是否更改。
是什么决定了哪个存储库(以及其中的哪些内容)被轮询?...或者这类似于 checkout scm 简写,而 pollSCM 实际上指的是管道项目中配置的 SCM,因此我可以在步骤中将 checkout() 缩短为 checkout scm ?
pollSCM指管道项目的回购。除非项目进行了其他配置(浅层克隆、轻量级签出等),否则将克隆整个存储库。