使用 Maven 从 Bamboo 发布时在 SVN 标记中创建的多余主干子文件夹

Posted

技术标签:

【中文标题】使用 Maven 从 Bamboo 发布时在 SVN 标记中创建的多余主干子文件夹【英文标题】:Superfluous trunk subfolder created in SVN tag when releasing with Maven from Bamboo 【发布时间】:2016-05-20 17:43:21 【问题描述】:

我们已经多次遇到这个问题:

标记文件夹不包含修改后发布的主干版本,而是包含修改前的主干副本,并且还包含正确修改版本所在的“主干”子文件夹。

因此,如果我在发布之前在我的 SVN 存储库中有这个:

项目名称 trunk(pom.xml 中的版本是 1.0.0-SNAPHOT) 标签

通常,在发布 1.0.0 版后,我会有以下内容:

项目名称 trunk(pom.xml 中的版本是 1.1.0-SNAPSHOT) 标签 1.0.0(pom.xml中的版本是1.0.0)

但是,我很少遇到:

项目名称 trunk(pom.xml 中的版本是 1.1.0-SNAPSHOT) 标签 1.0.0(pom.xml 中的版本为 1.0.0-SNAPSHOT) trunk(pom.xml 中的版本为 1.0.0)

发布前 pom.xml 中的“scm”标签似乎是正确的,所以我不认为是否来自那里:

<scm>
  <url>http://.../projectName/trunk</url>
  <connection>scm:svn:http://.../projectName/trunk</connection>
  <developerConnection>scm:svn:http://.../projectName/trunk</developerConnection>
</scm>

我的 Bamboo 计划由以下任务组成:

    源代码签出(使用强制清理构建) 脚本(确定发布版本) Maven 3.x(实际版本)

我的 Maven 3.x 任务有以下目标:

--batch-mode -Dusername=$bamboo.username -Dpassword=$bamboo.password -Dtag=$bamboo.version release:prepare -DreleaseVersion=$bamboo.version -DdevelopmentVersion= $bamboo.nextVersion-SNAPSHOT -Dresume=false 发布:执行

插件没有选项:

<plugin>
  <artifactId>maven-release-plugin</artifactId>
  <version>2.4.1</version>
</plugin>

查看日志后,我看不到任何异常以确定原因。

[LOG] Checking in modified POMs...
[LOG] Executing: /bin/sh -c cd .../build-dir/PROJECT-PLAN-JOB && svn --username user --password '*****' --no-auth-cache --non-interactive commit --file .../temp/PROJECT-PLAN-JOB/maven-scm-386932260.commit --targets .../temp/PROJECT-PLAN-JOB/maven-scm-7155492065832691877-targets
[LOG] Working directory: .../build-dir/PROJECT-PLAN-JOB
[LOG] Tagging release with the label 1.0.0...
[LOG] Executing: /bin/sh -c cd .../build-dir/PROJECT-PLAN-JOB && svn --username user --password '*****' --no-auth-cache --non-interactive copy --file .../temp/PROJECT-PLAN-JOB/maven-scm-80256020.commit --revision 46345 http://.../projectName/trunk http://.../projectName/tags/1.0.0
[LOG] Working directory: .../build-dir/PROJECT-PLAN-JOB
[LOG] Transforming 'projectName'...
[LOG] Not removing release POMs
[LOG] Checking in modified POMs...
[LOG] Executing: /bin/sh -c cd .../build-dir/PROJECT-PLAN-JOB && svn --username user --password '*****' --no-auth-cache --non-interactive commit --file .../temp/PROJECT-PLAN-JOB/maven-scm-1254735614.commit --targets .../temp/PROJECT-PLAN-JOB/maven-scm-2179675177497779390-targets
[LOG] Working directory: .../build-dir/PROJECT-PLAN-JOB
[LOG] Release preparation complete.
[LOG] 
[LOG] --- maven-release-plugin:2.4.1:perform (default-cli) @ projectName ---
[LOG] Checking out the project to perform the release ...
[LOG] Executing: /bin/sh -c cd .../build-dir/PROJECT-PLAN-JOB/target && svn --username user --password '*****' --no-auth-cache --non-interactive checkout http://.../projectName/tags/1.0.0 .../build-dir/PROJECT-PLAN-JOB/target/checkout
[LOG] Working directory: .../build-dir/PROJECT-PLAN-JOB/target
[LOG] Invoking perform goals in directory .../build-dir/PROJECT-PLAN-JOB/target/checkout
[LOG] Executing goals 'deploy'...

从日志中看到,执行是:

    修改pom中的版本去掉-SNAPSHOT (1.0.0) 这个 pom 在主干中提交 主干内容复制到标签1.0.0中 pom中的版本修改为下一个版本(1.1.0-SNAPSHOT) 这个 pom 在主干中提交 标签 1.0.0 的内容在文件夹 /target/checkout/ 中检出 发布在 /target/checkout/ 上完成

知道为什么 SVN 存储库中的 1.0.0 标记文件夹包含另一个“主干”子文件夹吗?

【问题讨论】:

【参考方案1】:

经过调查,我发现这是因为maven-release-plugin而发生的,与Bamboo无关。事实上,只要您尝试发布已经发布的版本,就会发生这种情况。

这是插件的“正常”行为。

【讨论】:

以上是关于使用 Maven 从 Bamboo 发布时在 SVN 标记中创建的多余主干子文件夹的主要内容,如果未能解决你的问题,请参考以下文章

从 Bamboo 6 发布到 Artifactory

如何使用 Maven 从 Nexus 下载进行部署

Bamboo 阶段和 Maven 生命周期

Bamboo:更改 Maven 插件的构建根目录?

使用 Bamboo 构建定义父 POM 的 Subversion/Maven 项目

将 Jar Artifact 从 Bamboo 部署到 Artifactory