我的云服务器位于世界各地的不同数据中心。每个数据中心彼此独立。
我正在寻找一种简单的方法来轻松且一致地将工件部署到每个区域中的各个服务器集群(可能运行不同版本的软件,即开发、测试和生产集群)。在我看来,我需要一个工件服务器,因为我可以在云服务器上执行安装脚本,从而下载正确的软件工件。
现在,我在运营方面工作。我不关心进行构建或管理软件构建依赖项。我只是想要一个工件服务器,我可以在其中存储包的所有不同版本以供稍后访问。最重要的是,我有几种不同类型的工件要存储。
Nexus 或 Artifactory 可以管理所有这些类型的包,还是我应该寻找不同的方向?我不反对将 make 文件添加到仅生成 tar.gz 文件的 shell 脚本项目中。我只是不想走上设置工件存储库的道路,最终,一些脚本、wget 和 apache 服务器就可以正常工作了。
Artifactory和Nexus都可以处理任何类型的文件,因为它们都是:
“二进制存储库管理器”。
尽管如此,Nexus 在技术上可以存储任何文件[jar/war/tar.gz/...],但是缺乏对不符合 Maven 存储库布局的二进制文件的支持。
例如,此类文件不会被索引,无法在搜索中检索到;此外,如果非 Maven 工件在其路径中阻碍了模块信息,那么目前 Artifactory 是唯一可以利用该信息并允许对工件进行基于版本的操作的存储库(例如,下载最新版本查询)
尽管这两个工具都是从解决 Maven 世界中的问题开始的,但许多其他领域已经认识到对智能二进制管理的需求,包括操作。
二进制文件确实需要专门的管理器,尽管网络共享/SCM/文件服务器一开始似乎是一个可行的选择;他们只是无法扩展。
另请参阅我对类似问题的回答,了解经理相对于其他临时解决方案的一些好处。
是的,您可以上传非 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/
你可以(参见其他答案)。您也可以像这样引用它们(尽管例子会很好):
您可以像这个插件一样参考/使用它们:
<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>
适用于 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
更多信息这里。