如何配置Jenkins以显示合并分支的名称和提交

时间:2014-11-25 09:01:01

标签: git jenkins

我们正在使用Jenkins和Git以及功能分支,但是当我们在构建之前使用" Merge时,我对Git插件如何向构建过程公开提交信息感到不满意。 git选项。

GIT插件

  1. 检查要构建的功能分支
  2. 将要素分支合并到主
  3. 因此,当前分支现在是origin / master,当前HEAD是一个本地提交,除了在我们的构建服务器上之外还没有。 可以通过将合并的代码推回到GitHub来修复 - 甚至可能是临时分支,但我们不希望这种行为,我们需要手动控制。

    所以问题是: 如何

    1. 将分支名称和提交哈希公开给后续构建步骤
    2. 使用链接装饰构建信息,以便用户可以浏览触发构建的提交。

1 个答案:

答案 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'

复杂的解决方案似乎是:

  1. 安装groovy插件
  2. 安装EnvInject插件
  3. 使用下面的脚本配置EnvInject插件
  4. 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插件本身公开......