如何部署到nexus(由secureci托管)?

时间:2009-10-18 12:28:45

标签: deployment maven-2 nexus

a previous SO-Answer中推荐的一样,我正在运行secureci的VmWare映像作为包含maven,nexus,hudson,svn的预配置开发基础架构。

现在我想在我的Windows XP机器上配置maven,将其工件部署到nexus。但是当我像这样配置我的pom.xml时(取自Deploying Artifacts to Nexus):

<distributionManagement>
    <!-- use the following if you're not using a snapshot version. -->
    <repository>
        <id>nexus</id>
        <name>RepositoryProxy</name>
        <url>scp://192.168.0.197/nexus/content/repositories/releases</url>
    </repository>
    <!-- use the following if you ARE using a snapshot version. -->
    <snapshotRepository>
        <id>nexus</id>
        <name>RepositoryProxy</name>
        <url>scp://192.168.0.197/nexus/content/repositories/snapshots</url>
    </snapshotRepository>
</distributionManagement>

... mvn deploy打印错误消息:

Error deploying artifact: Exit code: 1 - 
    mkdir: cannot create directory `/nexus': Permission denied

settings.xml我配置了这样的用户名和密码:

<servers>
  <server>
    <id>nexus</id>
    <username>tangens</username>
    <password>********</password>
  </server>
</servers>

问题:我必须使用哪种配置来部署到nexus?


我已经尝试了https而不是scp,但是这个maven遇到了缺少证书的问题。

我尝试了http而不是scp,但是安装了一个防火墙来阻止访问端口80(http),导致超时。

修改

我发现nexus将其工件存储在/root/sonatype-work/nexus/storage/snapshots/。但我不喜欢在我的settings.xml中输入root帐户的凭据。

修改

  

问:您是否在Nexus下为托管存储库启用了部署?

是的,默认情况下已启用。

  

问: Nexus是否正在侦听端口80?

端口80上运行了一个apache。 Server: Apache/2.2.8 (Ubuntu) DAV/2 SVN/1.4.6 mod_ssl/2.2.8 OpenSSL/0.9.8g mod_wsgi/1.3 Python/2.5.2

  

问:如果防火墙不允许使用HTTP,为什么不直接为“主机”IP添加HTTP连接异常?

因为我认为SecureCI配置得很好,应该有一种方法可以在不调整安装的情况下完成。但也许我在这里太天真了。

2 个答案:

答案 0 :(得分:12)

错误很明显:用户tangens无权在远程计算机上创建/nexus。实际上,您的scp网址不正确,并且没有像您提到的那样指向正确的位置。您必须为用户tangens提供正确的权限,或者配置sshd以允许root连接,但这不是一个好主意。

话虽如此,我认为scp是与Nexus合作的方式。如果使用scp进行部署,则不会通知Nexus部署,并且您的工件将不可见。根据{{​​3}}和Nexus一书的Deploying Artifacts to Nexus章节,必须使用HTTP PUT进行部署。换句话说,您的distributionManagement部分应如下所示:

  <distributionManagement>
    ...
    <repository>
      <id>releases</id>
      <name>Internal Releases</name>
      <url>http://localhost:8081/nexus/content/repositories/releases</url>
    </repository>
    ...
  </distributionManagement>

我注意到你说SecureCI使用的防火墙配置为丢弃端口80上的连接。但是,由于我自己没有使用SecureCI,我有一些(可能是愚蠢的)问题:

  • 您是否在Nexus下为托管存储库启用了部署?
  • Nexus是否正在侦听端口80?
  • 如果防火墙不允许使用HTTP,为什么不直接从“主机”IP添加HTTP连接的异常?

编辑:根据OP的回答,我认为使用HTTPS可能确实是使用SecureCI的“自然”方式。但是,在通过HTTPS上传之前,您需要将SecureCI的CA证书(证书颁发者的证书)添加到JDK中。您可以按9.4.2. Update the POM: Deployment Configuration执行此操作。但在进一步说明之前,真正的问题是:

  • SecureCI是否提供CA证书(证书颁发者的证书)?

如果他们不这样做,我不知道如何在不调整防火墙规则的情况下进行部署。

答案 1 :(得分:1)

对不起。刚刚遇到了这个问题。

有两个选项,正如其他海报所提到的:将证书提供给Maven或打开HTTP访问并打开端口80(为安全起见默认关闭)。

要启用HTTP访问,请参阅SecureCI中的/ trac / secureci / wiki / HowTo / EnableHttp(在wiki上的HowTo文档下,如何启用HTTP访问?)。

对于证书,公钥和私钥位于/ etc / apache2 / ssl /中。

如果要替换默认证书,则安装自己的文档(可以是自签名的或由认可的CA签名)位于SecureCI wiki的/ trac / secureci / wiki / HowTo / InstallSslCert(在wiki上的HowTo文档,如何安装SSL证书?)。此处还注明了现有证书的位置。