wake-up-neo.com

Kann Nexus oder Artifactory einfache tar.gz-Artefakte speichern?

Ich habe Cloud-Server in verschiedenen Rechenzentren auf der ganzen Welt. Jedes Rechenzentrum ist von den anderen getrennt.

Ich suche nach einer einfachen Möglichkeit, um Artefakte auf einfache und konsistente Weise auf einzelnen Cluster von Servern (auf denen möglicherweise verschiedene Versionen von Software ausgeführt werden, z. B. ein Entwickler-, Test- und Produktionscluster) in jeder dieser Regionen bereitzustellen. Mir scheint, ich brauche einen Artefaktserver, da ich auf dem Cloud-Server ein Installationsskript ausführen kann, das das richtige Software-Artefakt herunterfährt.

Jetzt arbeite ich auf der Operationsseite. Es interessiert mich nicht, Builds durchzuführen oder Software-Build-Abhängigkeiten zu verwalten. Ich möchte einfach einen Artefaktserver, auf dem ich alle verschiedenen Versionen meiner Pakete für den späteren Zugriff speichern kann. Der Kicker ist, dass ich verschiedene Arten von Artefakten zu speichern habe.

  • Shell-Skripte
  • Python-Skripte
  • Marionette manifestiert sich
  • Debian-Dateien (oft als tar.gz-Datei von mehreren Debians geliefert)

Kann Nexus oder Artifactory alle diese Pakettypen verwalten oder sollte ich in eine andere Richtung schauen? Ich bin nicht dagegen, meinen Shell-Skriptprojekten make-Dateien hinzuzufügen, die einfach tar.gz-Dateien generieren. Ich möchte einfach nicht auf die Idee kommen, ein Artefakt-Repository einzurichten, wenn letztendlich ein bisschen Scripting, Wget und ein Apache-Server gut funktionieren.

25
GregB

Beide Artifactory und Nexus können mit jeder Art von Datei umgehen, da sie beide "Binary Repository Managers" sind.

Trotzdem kann Nexus alle Dateien technisch speichern, es fehlt jedoch die Unterstützung für Binärdateien, die nicht dem Maven-Repository-Layout entsprechen. Beispielsweise werden solche Dateien nicht indiziert und können bei Suchvorgängen nicht abgerufen werden. Wenn nicht-Maven-Artefakte die Modulinformationen in ihrem Pfad belasten, ist Artifactory derzeit das einzige Repository, das dieses nutzen kann und versionsbasierte Operationen für Artefakte zulässt (z. B. neueste Version-Abfrage herunterladen).

Obwohl beide Tools zunächst mit der Lösung eines Problems in der Maven - Welt begonnen haben, wurde die Notwendigkeit eines intelligenten Binärmanagements in vielen anderen Bereichen erkannt, einschließlich Operationen .

Binaries benötigen einen spezialisierten Manager, und obwohl Netzwerkfreigaben/SCM/Dateiserver am Anfang wie eine praktikable Option erscheinen; Sie nur nicht skalieren.

Siehe auch meine Antwort auf eine ähnliche Frage für einige Vorteile eines Managers gegenüber anderen Ad-hoc-Lösungen.

25
noamt

Ja, Sie können Nicht-JAR-Dateien hochladen. Zum Beispiel:

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

Neuere Versionen von Nexus verarbeiten bestimmte Dateien wie tar, swf und andere, indem sie deren korrekte Form bestätigen. Dies kann jedoch unerwartetes oder unerwünschtes Verhalten verursachen.

Ist dies der beste Weg ... nur Sie können aufgrund Ihrer Anwendungsfälle sagen. Faktoren wie die Häufigkeit, mit der sich Artefakte ändern, die Netzwerklatenz und andere Faktoren können zu einer Strategie führen oder sie brechen.

refs: 

https://stackoverflow.com/a/33311645/32453

http://betterlogic.com/roger/2012/04/mavennexus-upload-tgztar-gz-file/

5
cmonkey

Sie können (sehen Sie die anderen Antworten). Sie können beispielsweise auch auf sie verweisen (obwohl ein Beispiel Nizza wäre):

Sie können sie wie dieses Plugin referenzieren/verwenden:

  <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>
0
rogerdpack
0
Bogdan