这个Jenkins文件中的pollSCM触发器指的是什么?

时间:2019-06-27 10:36:12

标签: jenkins

使用Jenkins 2.176.1考虑以下设置:

  • 一个名为Foobar的新管道项目
  • Poll SCM作为(仅)构建触发器,使用:H/5 * * * * ...,前提是这是指在下一步中配置的SCM
  • Pipeline script from SCM,带有SCM Git和有效的Git存储库URL
    • 由于JENKINS-42971JENKINS-48431而取消选中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'
                    }
                }
            }
        }
    }
}

到目前为止,我的理解是:

  1. 更改Jenkinsfile(不是整个仓库)会触发任何已注册代理(或在管道项目中配置的)上的管道。
  2. 所述代理(是随机的)使用pollSCM中的Jenkinsfile触发器来触发管道阶段。
    • 但是pollSCM在哪里触发轮询(什么是SCM回购)?而且,如果它是随机代理,那么它如何合理地检测民意测验中的变化
  3. 然后在分配的代理上执行阶段...

现在我很困惑什么是指什么。因此,这里是我的问题(所有相互关联的原因,就是为什么我将其合并为一个问题):

  • 管道项目对SCM just 进行Jenkinsfile任何更改的轮询?在我的情况下,存储库是相同的(对于Jenkinsfile和要从中构建二进制文件的源文件)。
    • 如果(项目级)轮询在任何更改而不是对Jenkinsfile的更改触发时
  • pollSCM中的Jenkinsfile触发器是否以某种方式自动地引用了checkout步骤?
    • 然后...会发生什么情况,我是否要执行多个checkout步骤且设置不同的内容?
    • 什么决定轮询哪个存储库(以及其中的哪些内容)?
  • ...还是类似于checkout scm的简写,而pollSCM实际上是指在管道项目中配置的SCM,因此我可以将checkout()缩短为{{1} }中的checkout scm

不幸的是,用户手册没有回答任何这些问题,steps在整个手册中的单个页面上总共出现了四次。

1 个答案:

答案 0 :(得分:3)

我会对此做个破解:

  

管道项目仅针对Jenkinsfile或任何其他对象轮询SCM   变化?在我的情况下,存储库是相同的(对于Jenkinsfile和   源文件来构建二进制文件。)

管道项目将轮询回购以查找任何文件更改,而不仅仅是Jenkinsfile。在源存储库中使用Jenkinsfile是常见做法。

  

如果(项目级)轮询在任何更改而不是在任何时候触发   对Jenkinsfile的更改是否在Jenkinsfile中触发pollSCM   以某种方式自动地参考结帐步骤?

看到回购更改时,将执行您的管道,并且步骤将按照它们出现在jenkinsfile中的顺序运行。

  

然后...会发生什么,我是否要执行多个结帐步骤,   不同的设置?

如果您在检出步骤中定义了多个存储库(使用多个checkout scm调用),则将对主管道项目存储库进行轮询以查找任何更改,并且无论它们是否更改,都将检出您在管道中定义的存储库

  

由什么决定什么存储库(以及其中的内容)   被轮询? ...或者类似于结帐scm的简写,   pollSCM实际上是指在管道项目中配置的SCM   所以我可以在步骤中将checkout()缩短为scm?

pollSCM是指管道项目的回购。除非对项目进行了其他配置(浅克隆,轻量检出等),否则整个仓库都将被克隆。