Usa le istantanee di Maven - CodeArtifact

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Usa le istantanee di Maven

Un'istantanea Maven è una versione speciale di un pacchetto Maven che si riferisce all'ultimo codice filiale di produzione. È una versione di sviluppo che precede la versione di rilascio finale. È possibile identificare una versione istantanea di un pacchetto Maven dal suffisso SNAPSHOT aggiunto alla versione del pacchetto. Ad esempio, l'istantanea della versione è. 1.1 1.1-SNAPSHOT Per ulteriori informazioni, consulta Cos'è una SNAPSHOT versione? sul sito Web del progetto Apache Maven.

AWS CodeArtifact supporta la pubblicazione e l'utilizzo di istantanee Maven. Le istantanee uniche che utilizzano un numero di versione basato sul tempo sono le uniche istantanee supportate. CodeArtifact non supporta istantanee non univoche generate dai client Maven 2. È possibile pubblicare un'istantanea Maven supportata in qualsiasi repository. CodeArtifact

Pubblicazione di istantanee in CodeArtifact

AWS CodeArtifact supporta i modelli di richiesta utilizzati dai client, ad esempiomvn, per la pubblicazione di istantanee. Per questo motivo, è possibile seguire la documentazione dello strumento di compilazione o del gestore di pacchetti senza avere una comprensione dettagliata di come vengono pubblicate le istantanee di Maven. Se state facendo qualcosa di più complesso, questa sezione descrive in dettaglio come CodeArtifact gestisce le istantanee.

Quando un'istantanea di Maven viene pubblicata in un CodeArtifact repository, la sua versione precedente viene conservata in una nuova versione chiamata build. Ogni volta che viene pubblicata un'istantanea di Maven, viene creata una nuova versione di build. Tutte le versioni precedenti di un'istantanea vengono mantenute nelle relative versioni di build. Quando viene pubblicata un'istantanea di Maven, lo stato della versione del pacchetto è impostato su Published e lo stato della build che contiene la versione precedente è impostato su. Unlisted Questo comportamento si applica solo alle versioni del pacchetto Maven in cui la versione del pacchetto ha come suffisso. -SNAPSHOT

Ad esempio, le versioni snapshot di un pacchetto Maven chiamato com.mycompany.myapp:pkg-1 vengono caricate in un repository chiamato. CodeArtifact my-maven-repo La versione snapshot è. 1.0-SNAPSHOT Finora non è stata pubblicata alcuna versione dicom.mycompany.myapp:pkg-1. Innanzitutto, le risorse della build iniziale vengono pubblicate nei seguenti percorsi:

PUT maven/my-maven-repo/com/mycompany/myapp/pkg-1/1.0-SNAPSHOT/pkg-1-1.0-20210728.194552-1.jar PUT maven/my-maven-repo/com/mycompany/myapp/pkg-1/1.0-SNAPSHOT/pkg-1-1.0-20210728.194552-1.pom

Nota che il timestamp 20210728.194552-1 viene generato dal client che pubblica le build di snapshot.

Dopo il caricamento dei file.pom e.jar, l'unica versione esistente nel repository è. com.mycompany.myapp:pkg-1 1.0-20210728.194552-1 Ciò accade anche se la versione specificata nel percorso precedente è. 1.0-SNAPSHOT Lo stato della versione del pacchetto a questo punto èUnfinished.

aws codeartifact list-package-versions --domain my-domain --repository \ my-maven-repo --package pkg-1 --namespace com.mycompany.myapp --format maven { "versions": [ { "version": "1.0-20210728.194552-1", "revision": "GipMW+599JmwTcTLaXo9YvDsVQ2bcrrk/02rWJhoKUU=", "status": "Unfinished" } ], "defaultDisplayVersion": null, "format": "maven", "package": "pkg-1", "namespace": "com.mycompany.myapp" }

Successivamente, il client carica il maven-metadata.xml file per la versione del pacchetto:

PUT my-maven-repo/com/mycompany/myapp/pkg-1/1.0-SNAPSHOT/maven-metadata.xml

Quando il file maven-metadata.xml viene caricato correttamente, CodeArtifact crea la versione del 1.0-SNAPSHOT pacchetto e imposta la 1.0-20210728.194552-1 versione suUnlisted.

aws codeartifact list-package-versions --domain my-domain --repository \ my-maven-repo --package pkg-1 --namespace com.mycompany.myapp --format maven { "versions": [ { "version": "1.0-20210728.194552-1", "revision": "GipMW+599JmwTcTLaXo9YvDsVQ2bcrrk/02rWJhoKUU=", "status": "Unlisted" }, { "version": "1.0-SNAPSHOT", "revision": "tWu8n3IX5HR82vzVZQAxlwcvvA4U/+S80edWNAkil24=", "status": "Published" } ], "defaultDisplayVersion": "1.0-SNAPSHOT", "format": "maven", "package": "pkg-1", "namespace": "com.mycompany.myapp" }

A questo punto, la versione snapshot 1.0-SNAPSHOT può essere utilizzata in una build. Sebbene com.mycompany.myapp:pkg-1 nel repository siano presenti due versionimy-maven-repo, entrambe contengono le stesse risorse.

aws codeartifact list-package-version-assets --domain my-domain --repository \ my-maven-repo --format maven --namespace com.mycompany.myapp \ --package pkg-1 --package-version 1.0-SNAPSHOT--query 'assets[*].name' [ "pkg-1-1.0-20210728.194552-1.jar", "pkg-1-1.0-20210728.194552-1.pom" ]

L'esecuzione dello stesso list-package-version-assets comando mostrato in precedenza con il --package-version parametro modificato in 1.0-20210728.194552-1 restituisce un output identico.

Man mano che 1.0-SNAPSHOT vengono aggiunte altre versioni di al repository, viene creata una nuova versione Unlisted del pacchetto per ogni nuova build. Le risorse della versione 1.0-SNAPSHOT vengono aggiornate ogni volta in modo che la versione faccia sempre riferimento alla build più recente di quella versione. L'aggiornamento 1.0-SNAPSHOT con le risorse più recenti viene avviato caricando il maven-metadata.xml file per la nuova build.

Consumo di versioni istantanee

Se si richiede un'istantanea, viene restituita la versione con lo statoPublished. Questa è sempre la versione più recente dell'istantanea di Maven. Puoi anche richiedere una build particolare di un'istantanea utilizzando il numero di versione della build (ad esempio,1.0-20210728.194552-1) anziché la versione dell'istantanea (ad esempio,1.0-SNAPSHOT) nel percorso. URL Per vedere le versioni di build di un'istantanea di Maven, usa ListPackageVersions APInella CodeArtifact APIGuida e imposta il parametro status su. Unlisted

Eliminazione delle versioni istantanee

Per eliminare tutte le versioni di build di un'istantanea di Maven, usa DeletePackageVersionsAPI, specificando le versioni che desideri eliminare.

Pubblicazione di istantanee con curl

Se disponi di versioni di snapshot esistenti archiviate in Amazon Simple Storage Service (Amazon S3) o in un altro prodotto di artifact repository, potresti volerle ripubblicare su. AWS CodeArtifact A causa del modo in cui CodeArtifact supporta le istantanee di Maven (vediPubblicazione di istantanee in CodeArtifact), la pubblicazione di istantanee con un HTTP client generico come ad esempio curl è più complessa rispetto alla pubblicazione delle versioni di rilascio di Maven, come descritto in. Pubblicazione con curl Tieni presente che questa sezione non è rilevante se stai creando e distribuendo versioni di snapshot con un client Maven come o. mvn gradle È necessario seguire la documentazione relativa a quel client.

La pubblicazione di una versione snapshot implica la pubblicazione di una o più build di una versione snapshot. In CodeArtifact, se ci sono n build di una versione snapshot, ci saranno n+1 CodeArtifact versioni: n versioni di build tutte con uno stato di Unlisted e una versione snapshot (l'ultima build pubblicata) con uno stato di. Published La versione snapshot (ovvero la versione con una stringa di versione che contiene «-SNAPSHOT») contiene un set di risorse identico all'ultima build pubblicata. Il modo più semplice per creare questa struttura utilizzando curl è il seguente:

  1. Pubblica tutte le risorse di tutte le build utilizzandocurl.

  2. Pubblica il maven-metadata.xml file dell'ultima build (ovvero la build con il timbro data-ora più recente) con. curl Questo creerà una versione con «-SNAPSHOT» nella stringa della versione e con il set di risorse corretto.

  3. Utilizzate il UpdatePackageVersionsStatusAPIper impostare lo stato di tutte le versioni di build non più recenti suUnlisted.

Utilizzate i seguenti curl comandi per pubblicare risorse snapshot (come i file.jar e .pom) per la versione snapshot di un pacchetto: 1.0-SNAPSHOT com.mycompany.app:pkg-1

curl --user "aws:$CODEARTIFACT_AUTH_TOKEN" -H "Content-Type: application/octet-stream" \ -X PUT https://my_domain-111122223333.d.codeartifact.us-west-2.amazonaws.com/maven/my_maven_repo/com/mycompany/app/pkg-1/1.0-SNAPSHOT/pkg-1-1.0-20210729.171330-2.jar \ --data-binary @pkg-1-1.0-20210728.194552-1.jar
curl --user "aws:$CODEARTIFACT_AUTH_TOKEN" -H "Content-Type: application/octet-stream" \ -X PUT https://my_domain-111122223333.d.codeartifact.us-west-2.amazonaws.com/maven/my_maven_repo/com/mycompany/app/pkg-1/1.0-SNAPSHOT/pkg-1-1.0-20210729.171330-2.pom \ --data-binary @pkg-1-1.0-20210728.194552-1.pom

Quando si utilizzano questi esempi:

  • Replace (Sostituisci) my_domain con il tuo nome di CodeArtifact dominio.

  • Replace (Sostituisci) 111122223333 con l' Account AWS ID del proprietario del tuo CodeArtifact dominio.

  • Replace (Sostituisci) us-west-2 con il luogo Regione AWS in cui si trova il tuo CodeArtifact dominio.

  • Replace (Sostituisci) my_maven_repo con il nome del tuo CodeArtifact repository.

Importante

È necessario anteporre il carattere al valore del --data-binary parametro. @ Quando si inserisce il valore tra virgolette, @ deve essere incluso tra virgolette.

Potresti avere più di due risorse da caricare per ogni build. Ad esempio, potrebbero esserci Javadoc e JAR file sorgente oltre ai file principali JAR e. pom.xml Non è necessario pubblicare file di checksum per gli asset della versione del pacchetto perché genera CodeArtifact automaticamente i checksum per ogni risorsa caricata. Per verificare che le risorse siano state caricate correttamente, recuperate i checksum generati utilizzando il list-package-version-assets comando e confrontateli con i checksum originali. Per ulteriori informazioni su come CodeArtifact gestisce i checksum di Maven, consulta. Utilizzo dei checksum Maven

Utilizzate il seguente comando curl per pubblicare il maven-metadata.xml file per l'ultima versione di build:

curl --user "aws:$CODEARTIFACT_AUTH_TOKEN" -H "Content-Type: application/octet-stream" \ -X PUT https://my_domain-111122223333.d.codeartifact.us-west-2.amazonaws.com/maven/my_maven_repo/com/mycompany/app/pkg-1/1.0-SNAPSHOT/maven-metadata.xml \ --data-binary @maven-metadata.xml

Il maven-metadata.xml file deve fare riferimento ad almeno una delle risorse nell'ultima versione di build dell'<snapshotVersions>elemento. Inoltre, il <timestamp> valore deve essere presente e deve corrispondere al timestamp riportato nei nomi dei file delle risorse. Ad esempio, per la 20210729.171330-2 build pubblicata in precedenza, il contenuto di maven-metadata.xml sarebbe:

<?xml version="1.0" encoding="UTF-8"?> <metadata> <groupId>com.mycompany.app</groupId> <artifactId>pkg-1</artifactId> <version>1.0-SNAPSHOT</version> <versioning> <snapshot> <timestamp>20210729.171330</timestamp> <buildNumber>2</buildNumber> </snapshot> <lastUpdated>20210729171330</lastUpdated> <snapshotVersions> <snapshotVersion> <extension>jar</extension> <value>1.0-20210729.171330-2</value> <updated>20210729171330</updated> </snapshotVersion> <snapshotVersion> <extension>pom</extension> <value>1.0-20210729.171330-2</value> <updated>20210729171330</updated> </snapshotVersion> </snapshotVersions> </versioning> </metadata>

Dopo maven-metadata.xml la pubblicazione, l'ultimo passaggio consiste nell'impostare tutte le altre versioni di build (ovvero tutte le versioni di build tranne la build più recente) per avere lo stato della versione del pacchetto diUnlisted. Ad esempio, se la 1.0-SNAPSHOT versione ha due build, di cui la prima build è20210728.194552-1, il comando su cui impostare quella build Unlisted è:

aws codeartifact update-package-versions-status --domain my-domain --domain-owner 111122223333 \ --repository my-maven-repo --format maven --namespace com.mycompany.app --package pkg-1 \ --versions 1.0-20210728.194552-1 --target-status Unlisted

Istantanee e connessioni esterne

Le istantanee di Maven non possono essere recuperate da un archivio pubblico Maven tramite una connessione esterna. AWS CodeArtifact supporta solo l'importazione di versioni di release di Maven.

Istantanee e repository upstream

In generale, le istantanee di Maven funzionano allo stesso modo delle versioni di release di Maven se utilizzate con repository upstream, ma esiste una limitazione se si prevede di pubblicare istantanee della stessa versione del pacchetto su due repository che hanno una relazione a monte. Ad esempio, supponiamo che ci siano due repository in un dominio e che dove sia un upstream di. AWS CodeArtifact R U U R Se pubblichi una nuova build inR, quando un client Maven richiede l'ultima build di quella versione snapshot, CodeArtifact restituisce la versione più recente da. U Questo può essere inaspettato poiché l'ultima versione è ora disponibile, no. R U Esistono due modi per evitarlo:

  1. Non pubblicate build di una versione istantanea come 1.0-SNAPSHOT inR, se 1.0-SNAPSHOT esiste in. U

  2. Usa i controlli di origine CodeArtifact del pacchetto per disabilitare gli upstream su quel pacchetto in. R Quest'ultimo ti permetterà di pubblicare versioni di 1.0-SNAPSHOT inR, ma R impedirà anche di recuperare altre versioni di quel pacchetto U che non siano già state conservate.