我对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命令的输出并检测特定分支上是否有变化?
答案 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,但是您需要为此更改管道