Delen via


ACR-overdracht met Az CLI

In dit artikel wordt beschreven hoe u de functie ACR Transfer gebruikt met de az CLI-extensie acrtransfer.

Vereisten voltooien

Voltooi de vereisten die hier worden beschreven voordat u de acties in dit artikel uitvoert. Dit betekent het volgende:

  • U hebt een bestaand Premium SKU-register in beide clouds.
  • U hebt een bestaande opslagaccountcontainer in beide clouds.
  • U hebt een bestaande Sleutelkluis met een geheim met een geldig SAS-token met de benodigde machtigingen in beide clouds.
  • U hebt een recente versie van Az CLI geïnstalleerd in beide clouds.

De Az CLI-extensie installeren

In AzureCloud kunt u de extensie installeren met de volgende opdracht:

az extension add --name acrtransfer

In AzureCloud en andere clouds kunt u de blob rechtstreeks vanuit een openbare opslagaccountcontainer installeren. De blob wordt gehost in het opslagaccount, dist de container, acrtransfer-1.0.0-py2.py3-none-any.wh de acrtransferext blob. Mogelijk moet u het achtervoegsel van de opslag-URI wijzigen, afhankelijk van de cloud waarin u zich bevindt. Het volgende wordt geïnstalleerd in AzureCloud:

az extension add --source https://acrtransferext.blob.core.windows.net/dist/acrtransfer-1.0.0-py2.py3-none-any.whl

ExportPipeline maken met de az CLI-extensie acrtransfer

Maak een ExportPipeline-resource voor uw AzureCloud-containerregister met behulp van de az CLI-extensie acrtransfer.

Maak een exportpijplijn zonder opties en een door het systeem toegewezen identiteit:

az acr export-pipeline create \
--resource-group $MyRG \
--registry $MyReg \
--name $MyPipeline \
--secret-uri https://$MyKV.vault.azure.net/secrets/$MySecret \
--storage-container-uri https://$MyStorage.blob.core.windows.net/$MyContainer

Maak een exportpijplijn met alle mogelijke opties en een door de gebruiker toegewezen identiteit:

az acr export-pipeline create \
--resource-group $MyRG \
--registry $MyReg \
--name $MyPipeline \
--secret-uri https://$MyKV.vault.azure.net/secrets/$MySecret \
--storage-container-uri https://$MyStorage.blob.core.windows.net/$MyContainer \
--options OverwriteBlobs ContinueOnErrors \
--assign-identity /subscriptions/$MySubID/resourceGroups/$MyRG/providers/Microsoft.ManagedIdentity/userAssignedIdentities/$MyIdentity

Opties voor exporteren

De options eigenschap voor de exportpijplijnen ondersteunt optionele Booleaanse waarden. De volgende waarden worden aanbevolen:

Parameter Weergegeven als
Opties Overschrijvenblobs - Bestaande doel-blobs overschrijven
ContinueOnErrors: doorgaan met het exporteren van resterende artefacten in het bronregister als het exporteren van één artefact mislukt.

Toegang tot het keyvault-beleid voor de ExportPipeline-identiteit geven

Als u uw pijplijn hebt gemaakt met een door de gebruiker toegewezen identiteit, geeft u deze door de gebruiker toegewezen toegangsbeleidsmachtigingen secret get voor identiteiten op de sleutelkluis.

Als u uw pijplijn hebt gemaakt met een door het systeem toegewezen identiteit, moet u eerst de principalId ophalen die het systeem heeft toegewezen aan uw pijplijnresource.

Voer de volgende opdracht uit om uw pijplijnresource op te halen:

az acr export-pipeline show --resource-group $MyRG --registry $MyReg --name $MyPipeline

In deze uitvoer wilt u de waarde in het principalId veld kopiëren.

Vervolgens voert u de volgende opdracht uit om deze principal de juiste secret get toegangsbeleidsmachtigingen voor uw sleutelkluis te geven.

az keyvault set-policy --name $MyKeyvault --secret-permissions get --object-id $MyPrincipalID

ImportPipeline maken met de az CLI-extensie acrtransfer

Maak een ImportPipeline-resource in uw doelcontainerregister met behulp van de az CLI-extensie acrtransfer. De pijplijn is standaard ingeschakeld om automatisch een Import PipelineRun te maken wanneer de gekoppelde opslagaccountcontainer een nieuwe artefact-blob ontvangt.

Maak een importpijplijn zonder opties en een door het systeem toegewezen identiteit:

az acr import-pipeline create \
--resource-group $MyRG \
--registry $MyReg \
--name $MyPipeline \
--secret-uri https://$MyKV.vault.azure.net/secrets/$MySecret \
--storage-container-uri https://$MyStorage.blob.core.windows.net/$MyContainer

Maak een importpijplijn met alle mogelijke opties, brontrigger uitgeschakeld en een door de gebruiker toegewezen identiteit:

az acr import-pipeline create \
--resource-group $MyRG \
--registry $MyReg \
--name $MyPipeline \
--secret-uri https://$MyKV.vault.azure.net/secrets/$MySecret \
--storage-container-uri https://$MyStorage.blob.core.windows.net/$MyContainer \
--options DeleteSourceBlobOnSuccess OverwriteTags ContinueOnErrors \
--assign-identity /subscriptions/$MySubID/resourceGroups/$MyRG/providers/Microsoft.ManagedIdentity/userAssignedIdentities/$MyIdentity \
--source-trigger-enabled False

Opties voor importeren

De options eigenschap voor de importpijplijn ondersteunt optionele Booleaanse waarden. De volgende waarden worden aanbevolen:

Parameter Weergegeven als
Opties Overschrijftags - Bestaande doeltags overschrijven
DeleteSourceBlobOnSuccess - Verwijder de bronopslag-blob na het importeren in het doelregister
ContinueOnErrors: doorgaan met het importeren van resterende artefacten in het doelregister als het importeren van één artefact mislukt.

Toegang tot het keyvault-beleid voor de ImportPipeline-identiteit geven

Als u uw pijplijn hebt gemaakt met een door de gebruiker toegewezen identiteit, geeft u deze door de gebruiker toegewezen toegangsbeleidsmachtigingen secret get voor identiteiten op de sleutelkluis.

Als u uw pijplijn hebt gemaakt met een door het systeem toegewezen identiteit, moet u eerst de principalId ophalen die het systeem heeft toegewezen aan uw pijplijnresource.

Voer de volgende opdracht uit om uw pijplijnresource op te halen:

az acr import-pipeline show --resource-group $MyRG --registry $MyReg --name $MyPipeline

In deze uitvoer wilt u de waarde in het principalId veld kopiëren.

Vervolgens voert u de volgende opdracht uit om deze principal het juiste secret get toegangsbeleid voor uw sleutelkluis te geven.

az keyvault set-policy --name $MyKeyvault --secret-permissions get --object-id $MyPrincipalID

PipelineRun maken voor export met de az CLI-extensie acrtransfer

Maak een PipelineRun-resource voor uw containerregister met behulp van de az CLI-extensie acrtransfer. Deze resource voert de ExportPipeline-resource uit die u eerder hebt gemaakt en exporteert opgegeven artefacten uit uw containerregister als blob naar uw opslagaccountcontainer.

Een exportpijplijnuitvoering maken:

az acr pipeline-run create \
--resource-group $MyRG \
--registry $MyReg \
--pipeline $MyPipeline \
--name $MyPipelineRun \
--pipeline-type export \
--storage-blob $MyBlob \
--artifacts hello-world:latest hello-world@sha256:90659bf80b44ce6be8234e6ff90a1ac34acbeb826903b02cfa0da11c82cbc042 \
--force-redeploy

Als u een PipelineRun-resource opnieuw implementeert met identieke eigenschappen, moet u de vlag --force-redeploy gebruiken.

Het kan enkele minuten duren voordat artefacten zijn geëxporteerd. Wanneer de implementatie is voltooid, controleert u het exporteren van artefacten door de geëxporteerde blob in de container van het bronopslagaccount te vermelden. Voer bijvoorbeeld de opdracht az storage blob list uit:

az storage blob list --account-name $MyStorageAccount --container $MyContainer --output table

Blob overdragen tussen domeinen

In de meeste gevallen gebruikt u nu een oplossing voor meerdere domeinen of een andere methode om uw blob over te dragen van het opslagaccount in uw brondomein (het opslagaccount dat is gekoppeld aan uw exportpijplijn) naar het opslagaccount in uw doeldomein (het opslagaccount dat is gekoppeld aan uw importpijplijn). Op dit moment gaan we ervan uit dat de blob is aangekomen in het doeldomeinopslagaccount dat is gekoppeld aan uw importpijplijn.

ImportPipeline-resource activeren

Als u de parameter niet hebt gebruikt bij het maken van de --source-trigger-enabled False importpijplijn, wordt de pijplijn binnen 15 minuten nadat de blob binnenkomt in de container van het opslagaccount geactiveerd. Het kan enkele minuten duren voordat artefacten zijn geïmporteerd. Wanneer het importeren is voltooid, controleert u het importeren van artefacten door de tags op te vermelden in de opslagplaats die u in het doelcontainerregister importeert. Voer bijvoorbeeld az acr repository show-tags uit:

az acr repository show-tags --name $MyRegistry --repository $MyRepository

Notitie

Brontrigger importeert alleen blobs met een tijd voor laatst gewijzigd binnen de afgelopen 60 dagen. Als u van plan bent om brontriggers te gebruiken om blobs ouder te importeren, vernieuwt u de tijd van de laatste wijziging van de blobs door er blobmetagegevens aan toe te voegen of importeert u deze met handmatig gemaakte pijplijnuitvoeringen.

Als u de parameter hebt gebruikt bij het --source-trigger-enabled False maken van uw ImportPipeline, moet u handmatig een PipelineRun maken, zoals wordt weergegeven in de volgende sectie.

PipelineRun maken voor importeren met de az CLI-extensie acrtransfer

Maak een PipelineRun-resource voor uw containerregister met behulp van de az CLI-extensie acrtransfer. Deze resource voert de ImportPipeline-resource uit die u eerder hebt gemaakt en importeert opgegeven blobs uit uw opslagaccount in het containerregister.

Een importpijplijnuitvoering maken:

az acr pipeline-run create \
--resource-group $MyRG \
--registry $MyReg \
--pipeline $MyPipeline \
--name $MyPipelineRun \
--pipeline-type import \
--storage-blob $MyBlob \
--force-redeploy

Als u een PipelineRun-resource opnieuw implementeert met identieke eigenschappen, moet u de vlag --force-redeploy gebruiken.

Het kan enkele minuten duren voordat artefacten zijn geïmporteerd. Wanneer het importeren is voltooid, controleert u het importeren van artefacten door de opslagplaatsen in het doelcontainerregister weer te laten zien. Voer bijvoorbeeld az acr repository show-tags uit:

az acr repository show-tags --name $MyRegistry --repository $MyRepository

ACR-overdrachtsbronnen verwijderen

Een ExportPipeline verwijderen:

az acr export-pipeline delete --resource-group $MyRG --registry $MyReg --name $MyPipeline

Een ImportPipeline verwijderen:

az acr import-pipeline delete --resource-group $MyRG --registry $MyReg --name $MyPipeline

Een PipelineRun-resource verwijderen. Houd er rekening mee dat hiermee de actie die door de PipelineRun wordt uitgevoerd, niet ongedaan wordt gemaakt. Dit lijkt meer op het verwijderen van het logboek van de PipelineRun.

az acr pipeline-run delete --resource-group $MyRG --registry $MyReg --name $MyPipelineRun

Problemen met ACR Transfer oplossen

Bekijk ACR Transfer Troubleshooting voor richtlijnen voor probleemoplossing.

Volgende stappen