我的云服务器位于世界各地的不同数据中心。每个数据中心都与其他数据中心分开。
我正在寻找一种简单的方法,可以轻松,一致地在每个区域中将工件部署到各个服务器集群(可能运行不同版本的软件,即开发,测试和生产集群)。在我看来,工件服务器是我需要的,因为我可以在云服务器上执行安装脚本,从而下载正确的软件工件。
现在,我在运营方面工作。我不关心做构建或管理软件构建依赖性。我只想要一个工件服务器,我可以存储我的所有不同版本的软件包,以便以后访问。踢球者,我有几种不同类型的工件要存储。
Nexus或Artifactory可以管理所有这些类型的包裹,还是我应该朝不同的方向寻找?我不反对将make文件添加到我的shell脚本项目中,这些项目只生成tar.gz文件。我只是不想走下设置工件库的道路,最终,一个小脚本,wget和一个apache服务器可以正常工作。
答案 0 :(得分:25)
Artifactory 和 Nexus 都可以处理任何类型的文件,因为它们都是“二进制存储库管理器”。
尽管如此,Nexus可以在技术上存储任何文件,但缺乏对不遵守Maven存储库布局的二进制文件的支持。例如,这些文件不会被编入索引,也无法在搜索中检索到;此外,如果非Maven工件在其路径中阻碍模块信息,那么当前Artifactory是唯一可以利用它并允许基于工件的操作的存储库(例如,下载最新版本查询)
尽管这两个工具都是通过解决Maven世界中的问题而开始的,但智能二进制管理的需求已在许多其他领域得到认可,operations included。
二进制文件确实需要一个专门的经理,虽然网络共享/ SCM /文件服务器在开始时似乎是一个可行的选择;他们只是不扩展。
另请参阅my answer to a similar question了解管理员与其他临时解决方案相比的一些好处。
答案 1 :(得分:5)
是的,您可以上传非jar文件。例如:
mvn deploy:deploy-file -DgroupId=org.group.id -DartifactId=artifact-id -Dversion=0.0.0.1-SNAPSHOT -Dpackaging=tar.gz -DrepositoryId=repository-id -Durl=http://url -Dfile=localfile-0.0.0.1-SNAPSHOT.tar.gz
较新版本的Nexus会通过验证它们是否正确形成来处理某些文件,如tar,swf等。但是,这可能会导致意外或不需要的行为。
这是最好的方式......只有你可以根据你的用例说出来。诸如工件更改频率,网络延迟以及其他因素等因素可能决定策略。
参考:
https://stackoverflow.com/a/33311645/32453
http://betterlogic.com/roger/2012/04/mavennexus-upload-tgztar-gz-file/
答案 2 :(得分:0)
如果您想使用curl,请尝试以下方法:https://support.sonatype.com/entries/22189106-How-can-I-programatically-upload-an-artifact-into-Nexus-
答案 3 :(得分:0)
你可以(见其他答案)。你也可以像这样引用它们(虽然一个例子很好):
你可以像这个插件一样引用/使用它们:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy</id>
<phase>package</phase>
<goals>
<goal>copy</goal>
</goals>
<configuration>
<artifactItems>
<artifactItem>
<groupId>org.apache</groupId>
<artifactId>activemq-distro</artifactId>
<version>5.7.0</version>
<type>gz</type>
<overWrite>true</overWrite>
<outputDirectory>${project.build.directory}</outputDirectory>
</artifactItem>
</artifactItems>
<!-- other configurations here -->
</configuration>
</execution>
</executions>
</plugin>
答案 4 :(得分:0)
Nexus 3 的解决方案。
然后您可以在 maven 或通过 curl 使用它,例如。
通过 curl 的示例:
curl -v --user '$NEXUS_REGISTRY_USER:$NEXUS_REGISTRY_PASSWORD' --upload-file ./my_artifact.tar.gz $NEXUS_GENERAL_REPOSITORY_URL/general-raw/my-project/my_artifact.tar.gz
更多信息here。