我们正在使用Jenkins和Git以及功能分支,但是当我们在构建之前使用" Merge时,我对Git插件如何向构建过程公开提交信息感到不满意。 git选项。
GIT插件
因此,当前分支现在是origin / master,当前HEAD是一个本地提交,除了在我们的构建服务器上之外还没有。 可以通过将合并的代码推回到GitHub来修复 - 甚至可能是临时分支,但我们不希望这种行为,我们需要手动控制。
所以问题是: 如何
答案 0 :(得分:1)
如果您只想要分支名称,并且在构建期间不需要任何分支名称,则以下groovy脚本非常有用:
def matcher = manager.getLogMatcher(/.*Merging Revision ([0-9a-f]+)\s+\((.*)\).*/)
if (matcher?.matches())
{
commit = matcher.group(1)
mergeBranch = matcher.group(2)
println "buildLog claims we are buidling ${commit} on '${mergeBranch}'"
manager.build.setDisplayName( mergeBranch);
}
if (manager.logContains(".*ERROR: Branch not suitable for integration.*") )
{
manager.addShortText("Merge conflict");
}
这将设置构建名称 - 如果构建永远不会因“分支不适合集成”而启动,这非常有用。
另一个选项(简单明显的一个)是使用GIT_BRANCH
环境变量 - 但这将包含origin / feature-foo - 所以如果你只想要'feature-foo'
复杂的解决方案似乎是:
Groovy脚本:
build = Thread.currentThread().executable
workDir = new File(build.getWorkspace().getRemote())
gitlogProcess = "git log -n 2 --format=\"%H %h %d\"".execute(null,workDir)
log = gitlogProcess?.text // Get the result
items = log?.readLines()?.getAt(1)?.split() // Second line is the commit that was merged onto master
// Parse it
commit = items?.getAt(0)
shortCommit = items?.getAt(1)
mergeBranch = items?.getAt(2)?.minus("(")?.minus(")")?.minus(" ")?.minus("origin/")
// Update build name and description
//buildNumber = build.getEnvironment(listener)?.get("BUILD_NUMBER") <-- This does not work, presumably because the environment is not yet created - if you need this, execute this script as a build step
displayName = "${mergeBranch}-${shortCommit}"
build.setDisplayName(displayName)
githuburl = build.getParent()?.getProperty("com.coravy.hudson.plugins.github.GithubProjectProperty")?.getProjectUrl()?.commitId(commit)
description = "<a href='${githuburl}'>${shortCommit}-${mergeBranch}</a>"
build.setDescription(description)
// Return a map - this will be added to the environment variables
return [
MERGE_BRANCH:mergeBranch,
MERGE_COMMIT:commit,
MERGE_COMMIT_SHORT:shortCommit
]
评论
理想情况下,这些属性将由Git插件本身公开......