使用git-commit-id.branch git-commit-id-plugin在RELEASE构建期间无法检索分支名称

时间:2017-05-21 07:32:40

标签: git build maven-plugin

我正在尝试从git存储库中检索分支名称。当我在本地和 Dev 环境中构建分支名称时,我能够检索分支名称。但是当构建第二次发生时,版本从 SNAPSHOT 变为 RELEASE ,分支名称将使用pom 版本进行初始化该项目。以下是使用的插件

                  <plugin>
                        <groupId>pl.project13.maven</groupId>
                        <artifactId>git-commit-id-plugin</artifactId>
                        <version>2.2.2</version>
                        <executions>
                            <execution>
                                <id>git-commit-id</id>
                                <goals>
                                    <goal>revision</goal>
                                </goals>
                                <phase>validate</phase>
                                <configuration>
                                    <dateFormat>EEE MMM dd hh:mm:ss zzz yyyy</dateFormat>
                                    <prefix>git-commit-id</prefix>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>

以下是属性文件中的条目,在构建过程中,构建详细信息将加载到该文件中。

appsVersion=${pom.version}
appsBuildDateTime=${build-timestamp}
buildBranch=${git.branch}

现在实际问题是,使用appsVersion设置文件属性的 buildBranch 。那是。,

     appsVersion=${pom.version}--->17.2.8
     buildBranch=${git.branch}--->is initialized with 17.2.8 instead of BRANCH NAME during 
RELEASE build.

我还尝试过其他插件,例如 Jgit(maven-jgit-buildnumber-plugin) org.codehaus.mojo(buildnumber-maven-plugin)但是徒劳的。

请帮我弄清楚出了什么问题,因为我们没有选择在运行时调试。任何帮助将受到高度赞赏,因为我完全坚持这个问题。而且我不想尝试其他插件,因为我在这个问题上花了相当多的时间。

2 个答案:

答案 0 :(得分:1)

这可能类似于maven/git/GitDataProvider.java#determineBranchName()maven/git/GitDataProvider.java#determineBranchNameOnBuildServer()

  

如果在Jenkins / Hudson中运行,请尊重通过GIT_BRANCH env var。
传递的分支名称   这是必要的,因为Jenkins / Hudson总是以分离的头状态调用构建。

在你的情况下,Jenkins可能没有参与,但检查Git状态(git status)以查看maven构建是否在分支上运行(分离的头部或标记)

以防万一,检查环境变量GIT_BRANCHGIT_LOCAL_BRANCH的值,该maven插件应使用该值。

作为替代方案,Anand Sunderraman建议in the comments查看ktoso/maven-git-commit-id-plugin issue 359

  

我在VSTS构建代理上面临同样的问题   事实证明,VSTS git checkout基于特定分支上的最后一次提交以分离模式发生,因此代替分支名称的commit-id。

     

我实施了一种解决方法:

<configuration>
 <replacementProperties>
  <replacementProperty>
    <property>git.branch</property>
    <token>^.*$</token>
    <!--NOTE: required for VSTS env where checked out code is not on a branch-->
    <value>${env.BUILD_SOURCEBRANCH}</value>
    <regex>true</regex>
  </replacementProperty>
 </replacementProperties>
</configuration>
  

如果env.BUILD_SOURCEBRANCH不可用,则本地也可以使用{@ 1}}进行回复并使用git branch

答案 1 :(得分:0)

一个解决上述问题的方法可能在这里

https://github.com/ktoso/maven-git-commit-id-plugin/issues/359

这对我来说就像是一种魅力

相关问题