Jenkins pollSCM触发器在此文件中引用了什么?

Jenkins pollSCM触发器在此文件中引用了什么?,jenkins,Jenkins,使用Jenkins 2.176.1考虑以下设置: 名为Foobar 轮询SCM作为(仅)生成触发器,带有:H/5****。。。假设这是指在下一步中配置的SCM 来自SCM的管道脚本,带有SCMGit和工作Git存储库URL 取消选中Lightweight checkout,因为和(我在实际项目和Jenkinsfile中使用构建变量;这也可能会影响pollSCM的工作方式,因此我在这里包括此步骤) 所述存储库包含一个简单的jenkins文件 jenkins文件大致如下: #!groovy

使用Jenkins 2.176.1考虑以下设置:

  • 名为
    Foobar
  • 轮询SCM
    作为(仅)生成触发器,带有:
    H/5****
    。。。假设这是指在下一步中配置的SCM
  • 来自SCM的管道脚本,带有SCM
    Git
    和工作Git存储库URL
    • 取消选中
      Lightweight checkout
      ,因为和(我在实际项目和
      Jenkinsfile
      中使用构建变量;这也可能会影响
      pollSCM
      的工作方式,因此我在这里包括此步骤)
  • 所述存储库包含一个简单的
    jenkins文件
jenkins文件
大致如下:

#!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
    (不是整个回购)的更改会触发任何注册代理上的管道(或管道项目中配置的管道)
  • 所述代理(随机)使用
    Jenkinsfile
    中的
    pollSCM
    触发器触发管道阶段。
    • 但是,
      pollSCM
      在哪里触发poll(什么样的SCM回购)?如果它是一个随机代理,那么它如何合理地检测民意测验中的变化呢
  • 然后在分配的代理上执行阶段
  • 现在我很困惑什么是指什么。因此,这里我的问题(所有相互关联的问题,这就是为什么我把它们放在一个问题中):

    • 管道项目仅轮询SCM以获取
      Jenkinsfile
      或任何更改?在我的例子中,存储库是相同的(对于
      Jenkinsfile
      和用于构建二进制文件的源文件)。
      • 如果(项目级)轮询在任何更改而不是文件更改时触发
    • jenkins文件中的
      pollSCM
      触发器是否自动引用了
      签出步骤?
      
      • 然后。。。会发生什么情况,我会有多个设置不同的
        签出
        步骤吗
      • 什么决定了轮询哪个存储库(以及其中的哪些内容)
    • 。。。或者这类似于
      checkout scm
      速记和
      pollSCM
      实际上是指管道项目中配置的scm,因此我可以在
      步骤中将
      checkout()
      缩短为
      checkout scm

    不幸的是,《用户手册》没有回答任何这些问题,而且在整个手册的一页上总共出现了四次。

    我将对这一问题进行分析:

    管道项目只轮询SCM中的Jenkins文件或任何 变化?在我的例子中,存储库是相同的(对于Jenkinsfile和 从中生成二进制文件的源文件)

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

    如果(项目级)轮询在任何更改而不是 对Jenkins文件的更改会在Jenkins文件中触发pollSCM 以某种方式自动引用签出步骤

    当看到对回购协议的更改时,将执行您的管道,并且这些步骤将按照它们在您的文件中出现的顺序运行

    然后。。。会发生什么情况,我是否会使用多个签出步骤 不同的设置

    如果使用签出步骤定义了多个回购(使用多个签出SCM调用),则主管道项目回购将被轮询以获取任何更改,并且您在管道中定义的回购将被签出,而不管它们是否更改

    什么决定了什么存储库(以及存储库中的内容) 被调查了吗。。。或者这类似于签出scm速记和 pollSCM实际上是指在管道项目中配置的SCM 所以我可以在步骤中将checkout()缩短为checkout scm


    pollSCM
    指管道项目的回购。除非项目另有配置(浅克隆、轻型签出等),否则将克隆整个回购协议。

    谢谢。如果正在考虑“任何”变更,那么排除和包括的区域是什么?另外,只要
    Jenkinsfile
    位于其他源代码旁边,那么
    checkout scm
    的声音就足够了,对吗。。。可能还参考了SCM的管道项目设置。把赏金奖励给你。我不知道你所说的被排除和被包括的地区是什么意思。这是您在创建管道项目时看到的吗?抱歉,我们通常使用GitHub组织文件夹或多分支管道。是的,当Jenkins文件与源代码位于同一repo中时,不带选项的checkout scm将引用项目的scm。但是,除非您签出其他一些repo,否则您不需要签出scm,因为它已经克隆了repo以获取jenkins文件。此时您正在执行冗余检查。正确,这可以在项目中配置。不过,您可能需要查看高级配置。现在手头上没有Jenkins实例,但我想这就是它的名称。是的,我尝试了一个管道项目,但我没有看到任何关于包含或排除的内容。可能是您安装的插件的一部分。当我在过去看到它时,它通常与包含或排除多分支管道中的分支有关。然后,项目将只在包含的分支或每个分支中查找更改,排除的分支除外。