【问题标题】:maven release plugin for simple git project - error: not a working copy用于简单 git 项目的 Maven 发布插件 - 错误:不是工作副本
【发布时间】:2019-01-12 19:16:17
【问题描述】:

在与 Git(lab) 一起使用时,如何使用 Maven 'maven-release-plugin' 对简单项目执行“发布”?

我正在开发一个开发/功能分支,最后我将更新合并到“主”分支。我想,然后“发布”插件开始发挥作用。正确的?

在我的 Jenkinsfile 中,我调用:

sh 'mvn release:prepare release:perform'

在尝试许多选项时,我不断收到此错误:

The svn command failed. 
[ERROR] Command output:
[ERROR] svn: E155007: '..workspace/project/pom.xml' is not a working copy

失败的命令是:

[INFO] Executing: /bin/sh -c cd /var/jenkins_home/workspace/jenkins-testing-releasing && svn --non-interactive commit --file /tmp/maven-scm-1557766606.commit --targets /tmp/maven-scm-8208798121252708517-targets
[INFO] Working directory: /var/jenkins_home/workspace/jenkins-testing-releasing

奇怪,因为我不使用 SVN。

这是我目前所拥有的:

<project ...
    <artifactId>jenkinstesting</artifactId>
    <version>0.1-SNAPSHOT</version>
    <scm>
        <connection>scm:git:git@gitlab.com:user/project.git</connection>
        <developerConnection>scm:git:git@gitlab.com:user/project.git</developerConnection>
        <tag>rel1</tag>
    </scm>

版本 1:

    <build>
        <plugins ... 
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-release-plugin</artifactId>
                <version>2.2.1</version>
                <executions>
                    <execution>
                        <id>default</id>
                        <goals>
                            <goal>perform</goal>
                        </goals>
                        <configuration>
                            <pomFileName>pom.xml</pomFileName>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

版本 2:

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>versions-maven-plugin</artifactId>
    <version>2.1</version>
</plugin>
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-release-plugin</artifactId>
    <version>2.5.3</version>
</plugin>

【问题讨论】:

  • 出于某种原因,Maven 认为这是一个颠覆项目,而不是一个 git 项目。
  • 首先,您应该使用最新版本的 maven-release-plugin (2.5.3) 此外,您永远不应该将 maven-release-plugin 与 pom 中的执行块绑定,因为它只能通过调用直接命令...所以需要版本和配置。同样奇怪的是@ThorbjørnRavnAndersen 已经提到的是为什么你会从 SVN 收到错误?

标签: git maven maven-release-plugin


【解决方案1】:

正如一些帖子中所建议的,使用 Jgitflow Maven 插件(确实)更好。甚至项目也改为了这个插件。因此,没有理由坚持使用 Maven Release 插件。回首往事,我终于同意了这个建议,继续使用 Jgitflow 插件。

发布步骤的结果是什么?假设开发分支的当前版本是 0.5.0-SNAPSHOT。

  • 我们有一个“发布”分支,其中包含正确的版本和已构建的产品 (v0.5.0);
  • 我们为下一个版本 (v0.6.0-SNAPSHOT) 准备了一个“开发”分支;
  • 我们有一个“主”分支作为备份 (v0.5.0)。

需要哪些操作?

  • 基于开发分支创建一个新的“发布”分支。此分支的版本是当前版本减去“-SNAPSHOT”部分。
  • 使用该发布分支构建最终产品。您还可以使用该版本的标签构建 Docker 映像。您可以向该 Docker 映像添加其他标签。
  • 将分支合并到“主”分支。所以你有一个生产问题的备份。
  • 确定“开发”分支的下一个版本号。这取决于您是否需要主要、次要或补丁版本。
  • 用新版本更新“开发”分支。

好的,给我看代码... ;-)

def mavenHome = tool 'Maven Latest'
def nextVersion = // determine this on the requested major/minor/patch release
sh "${mavenHome}/bin/mvn clean -B jgitflow:release-start jgitflow:release-finish " +
        "-DskipTests " +
        "-DallowUntracked=true " +
        "-DpushReleases=true " +
        "-DscmCommentPrefix=[RELEASE]- " +
        "-DenableSshAgent=true " +
        "-DreleaseVersion=${nextVersion}"

下一个版本的确定可以作为参数:major、minor或patch等。

准备工作是:使用 GIT-flow 时,您可以通过拉取请求将功能分支更改合并到开发分支中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-15
    • 2010-09-27
    • 1970-01-01
    • 1970-01-01
    • 2017-10-17
    相关资源
    最近更新 更多