我正在尝试从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)但是徒劳的。
请帮我弄清楚出了什么问题,因为我们没有选择在运行时调试。任何帮助将受到高度赞赏,因为我完全坚持这个问题。而且我不想尝试其他插件,因为我在这个问题上花了相当多的时间。
答案 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_BRANCH
或GIT_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)