使用Jenkins 2.176.1考虑以下设置:
Foobar
的新管道项目Poll SCM
作为(仅)构建触发器,使用:H/5 * * * *
...,前提是这是指在下一步中配置的SCM Pipeline script from SCM
,带有SCM Git
和有效的Git存储库URL
Lightweight checkout
(我在 real 项目和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回购)?而且,如果它是随机代理,那么它如何合理地检测民意测验中的变化?现在我很困惑什么是指什么。因此,这里是我的问题(所有相互关联的原因,就是为什么我将其合并为一个问题):
Jenkinsfile
或任何更改的轮询?在我的情况下,存储库是相同的(对于Jenkinsfile
和要从中构建二进制文件的源文件)。
pollSCM
中的Jenkinsfile
触发器是否以某种方式自动地引用了checkout
步骤?
checkout
步骤且设置不同的内容?checkout scm
的简写,而pollSCM
实际上是指在管道项目中配置的SCM,因此我可以将checkout()
缩短为{{1} }中的checkout scm
不幸的是,用户手册没有回答任何这些问题,steps
在整个手册中的单个页面上总共出现了四次。
答案 0 :(得分:3)
我会对此做个破解:
管道项目仅针对Jenkinsfile或任何其他对象轮询SCM 变化?在我的情况下,存储库是相同的(对于Jenkinsfile和 源文件来构建二进制文件。)
管道项目将轮询回购以查找任何文件更改,而不仅仅是Jenkinsfile。在源存储库中使用Jenkinsfile是常见做法。
如果(项目级)轮询在任何更改而不是在任何时候触发 对Jenkinsfile的更改是否在Jenkinsfile中触发pollSCM 以某种方式自动地参考结帐步骤?
看到回购更改时,将执行您的管道,并且步骤将按照它们出现在jenkinsfile中的顺序运行。
然后...会发生什么,我是否要执行多个结帐步骤, 不同的设置?
如果您在检出步骤中定义了多个存储库(使用多个checkout scm调用),则将对主管道项目存储库进行轮询以查找任何更改,并且无论它们是否更改,都将检出您在管道中定义的存储库
由什么决定什么存储库(以及其中的内容) 被轮询? ...或者类似于结帐scm的简写, pollSCM实际上是指在管道项目中配置的SCM 所以我可以在步骤中将checkout()缩短为scm?
pollSCM是指管道项目的回购。除非对项目进行了其他配置(浅克隆,轻量检出等),否则整个仓库都将被克隆。