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

0xC*_*22L 5 jenkins

考虑使用Jenkins 2.176.1进行以下设置:

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

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

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

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

  • 管道项目轮询SCM 只是为了Jenkinsfile或是否有任何更改?在我的情况下,存储库是相同的(用于Jenkinsfile生成二进制文件的源文件和源文件)。
    • 如果(项目级别)轮询触发任何更改,而不是更改Jenkinsfile
  • pollSCM触发器是否Jenkinsfile以某种方式自动地指向该checkout步骤?
    • 然后...会发生什么,我是否可以checkout通过不同的设置执行多个步骤?
    • 是什么决定轮询哪个存储库(以及其中的哪些内容)?
  • ...或者这类似于checkout scm简写,pollSCM实际上是指在管道项目中配置的SCM,因此我可以将checkout()to 缩短checkout scmsteps

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

小智 3

我来尝试一下这个:

管道项目轮询 SCM 只是为了 Jenkinsfile 还是为了任何更改?我的例子中的存储库是相同的(用于 Jenkinsfile 和用于构建二进制文件的源文件)。

管道项目将轮询存储库中的任何文件更改,而不仅仅是 Jenkinsfile。源存储库中的 Jenkinsfile 是常见做法。

如果(项目级)轮询在任何更改而不是 Jenkinsfile 更改时触发,Jenkinsfile 中的 pollSCM 触发器是否会以某种方式自动引用结帐步骤?

当看到存储库发生更改时,您的管道将被执行,并且这些步骤将按照它们在 Jenkinsfile 中出现的顺序运行。

那么......会发生什么,我会有多个具有不同设置的结账步骤吗?

如果您使用签出步骤定义了多个存储库(使用多个签出 SCM 调用),则将轮询主管道项目存储库是否有任何更改,并且您在管道中定义的存储库将被签出,无论它们是否更改。

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

pollSCM指管道项目的回购。除非项目进行了其他配置(浅层克隆、轻量级签出等),否则将克隆整个存储库。