与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配置得很好,应该有一种方法可以在不调整安装的情况下完成。但也许我在这里太天真了。
答案 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,我有一些(可能是愚蠢的)问题:
编辑:根据OP的回答,我认为使用HTTPS可能确实是使用SecureCI的“自然”方式。但是,在通过HTTPS上传之前,您需要将SecureCI的CA证书(证书颁发者的证书)添加到JDK中。您可以按9.4.2. Update the POM: Deployment Configuration执行此操作。但在进一步说明之前,真正的问题是:
如果他们不这样做,我不知道如何在不调整防火墙规则的情况下进行部署。
答案 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证书?)。此处还注明了现有证书的位置。