maven release plugin for simple git project - error: not a working copy
maven release plugin for simple git project - error: not a working copy
如何在使用 Git(lab) 的同时使用 Maven 'maven-release-plugin' 对简单项目执行 'releasing'?
我正在开发/功能分支上工作,最后我将更新合并到 'master' 分支中。我想,然后 'release' 插件开始发挥作用。正确的?
在我的 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>
正如一些帖子中所建议的,使用 Jgitflow Maven 插件(确实)更好。连项目都改成了这个插件。因此,没有理由坚持使用 Maven Release 插件。回过头来看,我终于同意了建议并继续使用Jgitflow插件。
释放步骤的结果是什么?假设开发分支的当前版本是 0.5.0-SNAPSHOT。
- 我们有一个 'release' 分支,具有正确的版本和构建的产品 (v0.5.0);
- 我们有一个 'development' 分支准备好用于下一个版本 (v0.6.0-SNAPSHOT);
- 我们有一个 'master' 分支作为备份 (v0.5.0)。
需要执行哪些操作?
- 在开发分支的基础上新建'release'分支。该分支的版本是当前版本减去“-SNAPSHOT”部分。
- 使用该发布分支构建最终产品。您还可以使用该版本的标签构建 Docker 图像。您可以向该 Docker 图像添加其他标签。
- 将分支合并到 'master' 分支中。所以你有生产问题的备份。
- 确定'development'分支下一个版本号。这取决于您是想要主要版本、次要版本还是补丁版本。
- 用新版本更新 'development' 分支。
好的,给我看代码……;-)
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 时,您可以通过拉取请求将您的功能分支更改合并到开发分支中。
如何在使用 Git(lab) 的同时使用 Maven 'maven-release-plugin' 对简单项目执行 'releasing'?
我正在开发/功能分支上工作,最后我将更新合并到 'master' 分支中。我想,然后 'release' 插件开始发挥作用。正确的?
在我的 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>
正如一些帖子中所建议的,使用 Jgitflow Maven 插件(确实)更好。连项目都改成了这个插件。因此,没有理由坚持使用 Maven Release 插件。回过头来看,我终于同意了建议并继续使用Jgitflow插件。
释放步骤的结果是什么?假设开发分支的当前版本是 0.5.0-SNAPSHOT。
- 我们有一个 'release' 分支,具有正确的版本和构建的产品 (v0.5.0);
- 我们有一个 'development' 分支准备好用于下一个版本 (v0.6.0-SNAPSHOT);
- 我们有一个 'master' 分支作为备份 (v0.5.0)。
需要执行哪些操作?
- 在开发分支的基础上新建'release'分支。该分支的版本是当前版本减去“-SNAPSHOT”部分。
- 使用该发布分支构建最终产品。您还可以使用该版本的标签构建 Docker 图像。您可以向该 Docker 图像添加其他标签。
- 将分支合并到 'master' 分支中。所以你有生产问题的备份。
- 确定'development'分支下一个版本号。这取决于您是想要主要版本、次要版本还是补丁版本。
- 用新版本更新 'development' 分支。
好的,给我看代码……;-)
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 时,您可以通过拉取请求将您的功能分支更改合并到开发分支中。