Jenkins管道 - 检测多个存储库的更改

时间:2018-04-09 09:22:37

标签: jenkins jenkins-pipeline

我对Jenkin Pipelines有疑问。 我有多个存储库来设置CI。所有这些存储库都应遵循相同的构建步骤。

我的问题是如何启用此行为。我目前只使用Jenkins管道检查存储库,但无论发生什么变化都会继续构建下一个阶段......

pipeline{
    agent any
    triggers {
        pollSCM('H/1 * * * *')
    }
    stages {
        stage('Checkout') {
            steps {
                dir('ABC'){
                    checkout poll: true,
                             scm: [$class: 'GitSCM',
                                  branches: [[name: '**']],
                                  doGenerateSubmoduleConfigurations: false,
                                  extensions: [],
                                  submoduleCfg: [],
                                  userRemoteConfigs: [[credentialsId: 'an_id1',
                                                       url: 'git@github.com:ABC.git']]]
                }
                dir('DEF'){
                    checkout poll: true,
                             scm: [$class: 'GitSCM',
                                  branches: [[name: '**']],
                                  doGenerateSubmoduleConfigurations: false,
                                  extensions: [],
                                  submoduleCfg: [],
                                  userRemoteConfigs: [[credentialsId: 'an_id2',
                                                       url: 'git@github.com:DEF.git']]]
                }
            }
        }
        stage('Build') {
            steps {
                sh 'printenv'
            }
        }
    }
}

始终执行sh 'printenv'。不是在找到更改时。 有没有办法捕获checkout命令的输出并检测特定分支上是否有变化?

1 个答案:

答案 0 :(得分:0)

您可以使用Git Changelog Plugin

将更改放入字符串中,然后检查是否有任何更改。此示例来自插件页面:

node {
 deleteDir()
 sh """
 git clone git@github.com:jenkinsci/git-changelog-plugin.git .
 """

 def changelogString = gitChangelog returnType: 'STRING',
  from: [type: 'REF', value: 'git-changelog-1.50'],
  to: [type: 'REF', value: 'master'],
  template: """
 <h1> Git Changelog changelog </h1>

<p>
Changelog of Git Changelog.
</p>

{{#tags}}
<h2> {{name}} </h2>
 {{#issues}}
 {{#hasIssue}}
 {{#hasLink}}
<h2> {{name}} <a href="{{link}}">{{issue}}</a> {{title}} </h2>
 {{/hasLink}}
 {{^hasLink}}
<h2> {{name}} {{issue}} {{title}} </h2>
 {{/hasLink}}
 {{/hasIssue}}
 {{^hasIssue}}
<h2> {{name}} </h2>
 {{/hasIssue}}


 {{#commits}}
<a href="https://github.com/tomasbjerre/git-changelog-lib/commit/{{hash}}">{{hash}}</a> {{authorName}} <i>{{commitTime}}</i>
<p>
<h3>{{{messageTitle}}}</h3>

{{#messageBodyItems}}
 <li> {{.}}</li> 
{{/messageBodyItems}}
</p>


 {{/commits}}

 {{/issues}}
{{/tags}}
 """

 currentBuild.description = changelogString
}

其他选择是使用Web挂钩而不是合并SCM,但是您需要为此更改管道