如何通过轮询SubVersion来配置Jenkins管道?

Jon*_*son 14 svn triggers jenkins jenkins-pipeline

我们一直在使用Jenkins进行持续集成.典型的构建作业在"源代码管理"部分中指定SVN存储库和凭证,然后在"构建触发器"部分中,我们启用"轮询SCM",其中每10分钟的轮询时间表(H/10****) .我们已经更新到最新版本的Jenkins,并且正在寻求建立管道构建.典型的管道脚本如下所示:

node {
    stage 'Build'
    build job: 'MyApplication Build'
    stage 'Deploy to test environment'
    build job: 'MyApplication Deploy', parameters: [
        [$class: 'StringParameterValue', name: 'DatabaseServer', value: 'DatabaseServer1'],
        [$class: 'StringParameterValue', name: 'WebServer', value: 'WebServer1']
    ]
    stage 'RunIntegrationTests'
    build job: 'MyApplication Test', parameters: [
        [$class: 'StringParameterValue', name: 'DatabaseServer', value: 'DatabaseServer1'],
        [$class: 'StringParameterValue', name: 'WebServer', value: 'WebServer1']
    ]
}
Run Code Online (Sandbox Code Playgroud)

当手动触发管道作业时,一切运行正常,但是我们希望每次将新版本签入SVN存储库时都运行此管道.管道配置确实具有"poll SCM"构建触发器选项,但没有"源代码管理"部分,您可以在其中指定存储库.我们怎样才能做到这一点?

Jon*_*son 9

我发现的解决方案是:

  1. 将管道脚本移动到一个文件(默认为JenkinsFile)并将其存储在SubVersion项目的根目录中.
  2. 设置我的流水线作业定义源"从SCM管道脚本",进入在哪里可以找到我的Subversion项目按照正常詹金斯建设工作的细节,并设置脚本路径在包含管道脚本JenkinsFile点.
  3. 将管道作业的构建触发器设置为"Poll SCM"并输入计划.
  4. 手动运行管道作业

它似乎是第4步,手动运行管道作业,导致poll触发器选择正确的存储库进行轮询.在那之前它似乎不知道在哪里看.


小智 7

作为管道脚本不是项目的一部分或在作业中定义的替代方法,您可以添加poll: true到您的结帐阶段。

例子:

stage('checkout') {
    checkout(
        changelog: true, 
        poll: true, /*This is the important option*/
        scm: [
            $class: 'SubversionSCM', 
            filterChangelog: false, 
            ignoreDirPropChanges: false,
            locations: [...], /*ommited for obvious reasons*/
            workspaceUpdater: [$class: 'CheckoutUpdater']
        ])
}
Run Code Online (Sandbox Code Playgroud)

在第一次运行后,它将开始从这个 SCM 开始轮询,如果是这样的话,它也会从管道所在的 SCM 开始轮询。

此选项记录在https://jenkins.io/doc/pipeline/steps/workflow-scm-step/#code-checkout-code-general-scm,在页面的最后,没有详细信息。


hee*_*nee 6

使用Jenkins Declarative Pipeline脚本,您可以将作业配置为每10分钟轮询一次SVN存储库URL,如下所示:

pipeline {
    agent any
    triggers {
        pollSCM 'H/10 * * * *'
    }
    stages {
        stage('checkout') {
            steps {
                checkout([
                    $class: 'SubversionSCM', 
                    additionalCredentials: [], 
                    excludedCommitMessages: '', 
                    excludedRegions: '', 
                    excludedRevprop: '', 
                    excludedUsers: '', 
                    filterChangelog: false, 
                    ignoreDirPropChanges: false, 
                    includedRegions: '', 
                    locations: [[
                        credentialsId: 'mySvnCredentials', 
                        depthOption: 'infinity',
                        ignoreExternalsOption: true, 
                        local: '.', 
                        remote: 'http://example.com/svn/url/trunk']], 
                    workspaceUpdater: [$class: 'CheckoutUpdater']
                ])
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

pollSCM触发器应自动轮询与您的构建相关联的所有SCM仓库的网址,包括由指定的URL checkout的步骤,从SCM您的声明管道脚本的URL,你的全球管道库的URL.如果您真的希望为每个修订版运行管道,那么您需要设置一个post-commit钩子.