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。