【问题标题】:Incorrect SCM polling on multi-project job since migration from SVN to git从 SVN 迁移到 git 后对多项目作业的 SCM 轮询不正确
【发布时间】:2017-04-26 10:18:00
【问题描述】:

我知道这是关于过时的软件,但请多多包涵。我们正在使用 Jenkins v1.x 分支的最新版本。刚刚从 Subversion 迁移到 git,我们需要重新配置我们的 CI 以使用 git。一项工作需要检查两个项目并构建两个项目以运行测试。由于git plugin 不允许将不同的项目签出到不同的目录中(请参阅JENKINS-4535 和各种后续行动——TLDR:它没有实现),我们使用Multiple SCM plugin 来实现这一点。

现在我们被这样一个事实所困扰,即 SCM 轮询在此设置中无法正常工作,即使没有更改,Jenkins 每次都会运行该作业。我发现this fix 是因为当您检查同一个项目的两个不同分支时,但在我们的例子中,我们检查的是不同项目的同一个分支。我想这就是为什么上述修复不起作用的原因,因为两个项目的分支说明符完全相同。

我们有什么办法可以让这个设置正确运行吗? 请注意,自从迁移到 git 并因此将 Jenkins 升级到 v2.x 或使用管道(尽管肯定是有意的)之后,还有很多过渡工作要做,这是我们现在真正想避免的事情。 em>

【问题讨论】:

    标签: git jenkins jenkins-plugins


    【解决方案1】:

    尝试将轮询与结帐分开:您可以定义两个额外的“触发”作业,每个作业单独轮询您的一个项目。更改后,每一项都会触发您的主要工作(然后通过 Muliple SCM 插件执行实际结帐)。

    【讨论】:

    • 感谢您的意见,这很可能是一种方法。但是,我们现在已经在更新到 Jenkins 2.x 并使用管道 DSL。稍后我将发布此类迁移的最小脚本。
    【解决方案2】:

    我们决定将 Jenkins 更新到 2.x 并使用 declarative pipeline DSL,因为我们的设置似乎无法使用一组相同的作业进行迁移(但是 Alex O's solution 是一个使用额外触发器作业的好主意)而且看起来喜欢与 Jenkins 保持同步的正确方式。

    这是我们想出的脚本的骨架。我们无法让声明性 SCM 轮询 (triggers/pollSCM) 工作 - 它只是从未触发过(但 we're not alone on this one)。不过,通过编辑器设置“经典”SCM 触发器是可行的。有点尴尬,但现在还可以。

    pipeline {
        agent any
        stages {
            stage('checkout') {
                steps {
                    checkout([
                        $class: 'GitSCM', branches: [[name: '*/master']], 
                        doGenerateSubmoduleConfigurations: false, 
                        extensions: [[
                            $class: 'RelativeTargetDirectory', 
                            relativeTargetDir: 'project1']], 
                        submoduleCfg: [], 
                        userRemoteConfigs: [[ credentialsId: '...', url: '...']]
                    ])
                    checkout([
                        $class: 'GitSCM', branches: [[name: '*/master']], 
                        doGenerateSubmoduleConfigurations: false, 
                        extensions: [[
                            $class: 'RelativeTargetDirectory', 
                            relativeTargetDir: 'project2']], 
                        submoduleCfg: [], 
                        userRemoteConfigs: [[ credentialsId: '...', url: '...']]
                    ])
                }
            }
            stage('build') { steps { sh '...' } }
            stage('test') { steps { sh '...' } }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-07-11
      • 1970-01-01
      • 1970-01-01
      • 2020-11-23
      • 1970-01-01
      • 1970-01-01
      • 2010-12-09
      相关资源
      最近更新 更多