Maven发布插件用于简单的Git项目 - 错误:不是工作副本

4

如何在使用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认为这是一个Subversion项目,而不是Git项目。 - Thorbjørn Ravn Andersen
1
首先,您应该使用最新版本的maven-release-plugin(2.5.3)。此外,您不应该在pom中绑定maven-release-plugin与执行块,因为它只能通过命令直接调用...因此需要版本和配置。另外,正如@ThorbjørnRavnAndersen已经提到的那样,为什么会从SVN收到错误消息这一点有点奇怪? - khmarbaise
1个回答

1

根据一些帖子的建议,更好地使用Jgitflow Maven插件。甚至项目也改用了这个插件。因此,没有理由坚持使用Maven Release插件。回头看,我最终同意这个建议并使用Jgitflow插件继续前进。

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

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

需要哪些操作?

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

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

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时,您可以通过pull request将特性分支的更改合并到开发分支中。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接