考虑使用Jenkins 2.176.1进行以下设置:
一个新的管道项目名为 Foobar
Poll 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' } } } } } }
到目前为止,我的理解是:
更改Jenkinsfile
(不是整个回购)会触发任何已注册代理(或在管道项目中配置)上的管道。
所述代理(是随机的)使用中的pollSCM
触发器Jenkinsfile
来触发管道阶段。
但是pollSCM
触发器在哪里轮询(什么是SCM回购)?而且,如果它是随机代理,那么它如何合理地检测民意测验中的变化?
然后在分配的代理上执行阶段...
现在我很困惑什么是指什么。因此,这里是我的问题(所有相互关联的原因,就是为什么我将其放在一个问题中):
管道项目轮询SCM 只是为了Jenkinsfile
或是否有任何更改?在我的情况下,存储库是相同的(用于Jenkinsfile
生成二进制文件的源文件和源文件)。
如果(项目级别)轮询触发任何更改,而不是更改Jenkinsfile
pollSCM
触发器是否Jenkinsfile
以某种方式自动地指向该checkout
步骤?
然后...会发生什么,我是否可以checkout
通过不同的设置执行多个步骤?
是什么决定轮询哪个存储库(以及其中的哪些内容)?
...或者这类似于checkout scm
简写,pollSCM
实际上是指在管道项目中配置的SCM,因此我可以将checkout()
to 缩短checkout scm
为steps
?
不幸的是,用户手册没有回答这些问题中的任何pollSCM
一个,并且整个手册中的单个页面上总共出现了四次。