2016-11-16 27 views
1

我们需要将相同的工件部署到两个(或更多)nexus存储库中。 为此,我们使用的是有不同的distributionManagement部分两个独立的配置文件是这样的:Maven发布插件:连续执行一些部署

<profile> 
    <id>deploy-nexus1</id> 
    <distributionManagement> 
     <repository> 
      <id>releases1</id>   
      <url>http://repositories/releases1</url> 
     </repository> 
     <snapshotRepository> 
      <id>snapshots1</id>  
      <url>http://repositories/snapshots1</url> 
     </snapshotRepository> 
    </distributionManagement> 
</profile> 
<profile> 
    <id>deploy-nexus2</id> 
    <distributionManagement> 
     <repository> 
      <id>releases2</id>   
      <url>http://repositories/releases2</url> 
     </repository> 
     <snapshotRepository> 
      <id>snapshots2</id>  
      <url>http://repositories/snapshots2</url> 
     </snapshotRepository> 
    </distributionManagement> 
</profile> 

期望的结果:有相同artifact:1.0.0releases1releases2。 但运行命令后:

mvn clean release:prepare -U 
mvn clean release:perform -U -P deploy-nexus1 
mvn clean release:perform -U -P deploy-nexus2 

部署到releases1库是成功的,但部署到releases2返回:

没有SCM URL是提供从

进行释放。根据插件documentation,之前每release:perform我们需要运行release:prepare或提供自定义url来回购标签。

我们如何执行一个工件版本的两个nexus部署? 是否可以在release:perform命令中添加额外的部署步骤?

在此先感谢。

+0

我很抱歉怀疑你的做法,但它似乎很奇怪:为什么部署两次?如果你想让你的工件在不同的nexus实例中可用,你可以在nexus中使用代理库。你能否给我们一些背景知道你为什么要进行两次部署? –

+0

当然,'nexus1'是我们的内部联系,我们会像往常一样使用它。如果需要的话,其他的Maven模块可以从'nexus1'下载它们的依赖关系。但'nexus2'是外部存储库,我们只在那里推送打包的应用程序,我们可以使用它来立即部署。公司应用程序'XXX Deploy'使用'nexus2',它从'nexus2'下载工件,将其解包到目标主机上并启动一个应用程序。因此,我们需要将工件上传到'nexus1',因为它是我们的主要纽带,并且上传到'nexus2',因为这需要持续交付过程。 –

+0

我会考虑以下方法:在nexus1中代理您的nexus2。然后nexus2的所有工件也可以在nexus1中使用,而无需任何其他步骤。 –

回答

0

从技术文档您参考:

我们可以看到底:发行完成后

后,release.properties等 发布文件将从结账被删除。

而在此之前,我们可以读到:

MVN发布:执行

这依赖于release.properties是从以前的版本制剂目前 。如果不是这种情况,则需要 为目标提供URL和一个可选标记,以执行发行版 。例如:

MVN org.apache.maven.plugins:行家释放小插件:2.5.3:执行 -DconnectionUrl = SCM:SVN:https://svn.mycompany.com/repos/path/to/myproject/tags/myproject-1.2.3

而你的错误是No SCM URL was provide to perform the release from,所以我假设您应该精确释放组件的标签,因为release.properties在第一个release:perform后不再存在。 你可以做这样的事情:

mvn clean release:perform -U -P deploy-nexus2 -DconnectionUrl=scm:svn:urlOfTaggedProject 

另一种解决方案,以避免进入末标签网址将在当前文件夹第一release:perform之前做的release.properties副本某处。例如,通过对其进行不同的复制和重命名,在第一次执行后,您可以将其重命名为release.properties,以便在第二次release:perform期间重新使用它。用一个非常简单的脚本,它可以是自动的。
我不知道它是否可以工作,因为我从来没有这样的要求。也许,你会有其他副作用,这只是猜测。
但不要犹豫,做一个反馈:)

+0

感谢您的回答。我有自动化的bash脚本,因此我想避免使用标签的url,脚本不知道特定的发布版本。 复制'relese.properties'的方法看起来像解决方法。适用,但我想知道找到'maven-release-plugin'可以提供的解决方案。 –

+0

不客气。我明白,但在第二部分中,我解释了您可以重新使用在发布期间生成的原始release.properties:准备目标。所以使用脚本,你可以做到。 – davidxxx