Maven jgitflow 插件
Maven jgitflow plugin
不知道大家有没有用过maven插件jgitflow。
当 运行宁
clean jgitflow:release-start jgitflow:release-finish
在 hudson 上,我收到以下错误:
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to
execute goal external.atlassian.jgitflow:jgitflow-maven-plugin:1.0-m5.1:release-start
(default-cli) on project test-git-release: Execution default-cli of goal
external.atlassian.jgitflow:jgitflow-maven-plugin:1.0-m5.1:release-start
failed: String index out of range: -6
我的 pom.xml 看起来如下:
<plugin>
<groupid>external.atlassian.jgitflow</groupid>
<artifactid>jgitflow-maven-plugin</artifactid>
<version>1.0-m5.1</version>
<configuration>
<enablesshagent>true</enablesshagent>
<defaultoriginurl>URL</defaultoriginurl>
<autoversionsubmodules>true</autoversionsubmodules>
<nodeploy>true</nodeploy>
<pushreleases>true</pushreleases>
<flowinitcontext>
<versiontagprefix>V_</versiontagprefix>
</flowinitcontext>
</configuration>
</plugin>
在我的本地机器上,我能够成功地运行这个命令。
Apparently is a known bug: official bug report,对于您提到的相同版本和相同的行为(在本地工作正常但在 Jenkins/Hudson 上出现相同的异常)。
请注意,上面链接的错误报告提供了一个可能值得尝试的解决方法:
The workaround is in Jenkins:
Additional Behaviours
=> checkout to specific local branch
更新
根据交流的意见,提出的解决方案和有效的解决方案,这里是历史日志,以备日后帮助:
- 按照上面建议的解决方法并将本地分支设置为从 origin/develop 签出,遇到以下错误:
error occurred during unpacking on the remote end: unpack-objects abnormal exit
- 这样的错误实际上是由于对相关文件夹的权限,正如其他 SO 线程 here and here 所建议的那样。然而,之后更改权限并没有帮助。
- 问题最终通过在服务器本身上创建 .git 存储库得到解决。这样做会赋予文件夹组与所有者相同的权限。
为所有使用 GitLab 并遇到此问题的人节省一点时间:
GitLab 的 Runner 在 DETACHED HEAD 上工作,这会导致 JGitFlow 搜索 GIT refs 失败,从而导致此错误。
解决方法和Jenkins一样:在执行JGitFlow操作之前,做一个checkout。对于 GitLab,您可以通过在 gitlab-ci.yml 的相应管道的 /script 部分添加 git checkout 来完成此操作,例如:
sample-pipeline:
stage: release
script:
-git checkout -B master
-mvn --batch-mode jgitflow:release-start jgitflow:release-finish
由于 JGitFlow 自动签出 develop 分支并从那里发挥它的魔力,你总是可以事先签出 master,因为它根本没有任何作用;重要的是,当 GitLab 开始搜索 refs 时,它不是一个 DETACHED HEAD。
不知道大家有没有用过maven插件jgitflow。 当 运行宁
clean jgitflow:release-start jgitflow:release-finish
在 hudson 上,我收到以下错误:
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal external.atlassian.jgitflow:jgitflow-maven-plugin:1.0-m5.1:release-start (default-cli) on project test-git-release: Execution default-cli of goal external.atlassian.jgitflow:jgitflow-maven-plugin:1.0-m5.1:release-start failed: String index out of range: -6
我的 pom.xml 看起来如下:
<plugin>
<groupid>external.atlassian.jgitflow</groupid>
<artifactid>jgitflow-maven-plugin</artifactid>
<version>1.0-m5.1</version>
<configuration>
<enablesshagent>true</enablesshagent>
<defaultoriginurl>URL</defaultoriginurl>
<autoversionsubmodules>true</autoversionsubmodules>
<nodeploy>true</nodeploy>
<pushreleases>true</pushreleases>
<flowinitcontext>
<versiontagprefix>V_</versiontagprefix>
</flowinitcontext>
</configuration>
</plugin>
在我的本地机器上,我能够成功地运行这个命令。
Apparently is a known bug: official bug report,对于您提到的相同版本和相同的行为(在本地工作正常但在 Jenkins/Hudson 上出现相同的异常)。
请注意,上面链接的错误报告提供了一个可能值得尝试的解决方法:
The workaround is in Jenkins: Additional Behaviours => checkout to specific local branch
更新
根据交流的意见,提出的解决方案和有效的解决方案,这里是历史日志,以备日后帮助:
- 按照上面建议的解决方法并将本地分支设置为从 origin/develop 签出,遇到以下错误:
error occurred during unpacking on the remote end: unpack-objects abnormal exit
- 这样的错误实际上是由于对相关文件夹的权限,正如其他 SO 线程 here and here 所建议的那样。然而,之后更改权限并没有帮助。
- 问题最终通过在服务器本身上创建 .git 存储库得到解决。这样做会赋予文件夹组与所有者相同的权限。
为所有使用 GitLab 并遇到此问题的人节省一点时间:
GitLab 的 Runner 在 DETACHED HEAD 上工作,这会导致 JGitFlow 搜索 GIT refs 失败,从而导致此错误。
解决方法和Jenkins一样:在执行JGitFlow操作之前,做一个checkout。对于 GitLab,您可以通过在 gitlab-ci.yml 的相应管道的 /script 部分添加 git checkout 来完成此操作,例如:
sample-pipeline:
stage: release
script:
-git checkout -B master
-mvn --batch-mode jgitflow:release-start jgitflow:release-finish
由于 JGitFlow 自动签出 develop 分支并从那里发挥它的魔力,你总是可以事先签出 master,因为它根本没有任何作用;重要的是,当 GitLab 开始搜索 refs 时,它不是一个 DETACHED HEAD。