31

我的云服务器位于世界各地不同的数据中心。每个数据中心都与其他数据中心分开。

我正在寻找一种简单的方法将工件部署到每个这些区域中的各个服务器集群(可能运行不同版本的软件,即开发、测试和生产集群),轻松且一致。在我看来,我需要一个工件服务器,因为我可以在云服务器上执行一个安装脚本,它会拉下正确的软件工件。

现在,我在运营方面工作。我不关心进行构建或管理软件构建依赖项。我只是想要一个工件服务器,我可以在其中存储我的包的所有不同版本以供以后访问。更重要的是,我有几种不同类型的工件要存储。

  • 外壳脚本
  • Python 脚本
  • 木偶显现
  • Debian 文件(通常作为多个 debian 的 tar.gz 文件交付)

Nexus 或 Artifactory 可以管理所有这些类型的包,还是我应该换个方向?我不反对将 make 文件添加到仅生成 tar.gz 文件的 shell 脚本项目中。我只是不想走建立工件存储库的道路,最终,一点脚本、wget 和 apache 服务器就可以正常工作。

4

5 回答 5

27

ArtifactoryNexus都可以处理任何类型的文件,因为它们都是“二进制存储库管理器”

尽管如此,Nexus 在技术上可以存储任何文件,但缺乏对不符合 Maven 存储库布局的二进制文件的支持。例如,此类文件不会被索引,也无法在搜索中检索到;此外,如果非 Maven 工件在其路径中阻碍了模块信息,那么目前 Artifactory 是唯一可以利用它并允许对工件进行基于版本的操作(例如,下载最新版本查询)的存储库

尽管这两个工具都是从解决Maven世界中的一个问题开始的,但智能二进制管理的需求已经在许多其他领域得到认可,包括操作

二进制文件确实需要一个专门的管理器,尽管网络共享/SCM/文件服务器在一开始似乎是一个可行的选择;他们只是不缩放

另请参阅我对类似问题的回答,了解经理相对于其他临时解决方案的一些好处。

于 2012-10-26T07:33:33.667 回答
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/

于 2012-10-24T18:25:22.817 回答
0

如果你想用 curl 来做,试试这个方法: https: //support.sonatype.com/entries/22189106-How-can-I-programatically-upload-an-artifact-into-Nexus-

于 2015-04-23T13:19:19.503 回答
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>
于 2017-10-03T18:58:13.263 回答
0

Nexus 3的解决方案。

首先在Nexus中创建一个原始存储库: Nexus 管理控制台

然后,您可以在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

更多信息在这里

于 2021-01-15T16:03:38.910 回答