Pubblicare e scaricare gli artefatti della pipeline

Servizi di Azure DevOps

Con Azure Pipelines è possibile scaricare gli artefatti dalle fasi precedenti della pipeline o da un'altra pipeline. È anche possibile pubblicare l'artefatto in una condivisione file o renderlo disponibile come artefatto della pipeline.

Pubblicare elementi

È possibile pubblicare gli artefatti usando YAML, l'editor classico o l'interfaccia della riga di comando di Azure:

Nota

La pubblicazione degli artefatti della pipeline non è supportata nelle pipeline di versione.

steps:
- publish: $(System.DefaultWorkingDirectory)/bin/WebApp
  artifact: WebApp

Nota

La publish parola chiave è un collegamento per l'attività Publish Pipeline Artifact .

Anche se il nome dell'artefatto è facoltativo, è consigliabile specificare un nome che rifletta accuratamente il contenuto dell'artefatto. Se si prevede di utilizzare l'artefatto da un processo in esecuzione in un sistema operativo diverso, è necessario assicurarsi che tutti i percorsi di file siano validi per l'ambiente di destinazione. Ad esempio, un nome di file contenente il carattere \ o * non riuscirà a scaricarlo in Windows.

Il percorso del file o della cartella da pubblicare è obbligatorio. Può trattarsi di un percorso assoluto o relativo a $(System.DefaultWorkingDirectory).

I pacchetti in Azure Artifacts non sono modificabili. Dopo aver pubblicato un pacchetto, la relativa versione è riservata in modo permanente. Se il pacchetto è stato pubblicato, la riesecuzione dei processi non riusciti avrà esito negativo. Un buon modo per risolvere questo problema se si vuole essere in grado di rieseguire processi non riusciti senza riscontrare già un pacchetto di errore, è usare Condizioni per l'esecuzione solo se il processo precedente è riuscito.

  jobs:
  - job: Job1
    steps:
      - script: echo Hello Job1!

  - job: Job2
    steps:
      - script: echo Hello Job2!
    dependsOn: Job1

Nota

Non verrà addebitato alcun costo per l'archiviazione degli artefatti della pipeline. La memorizzazione nella cache della pipeline è anche esente dalla fatturazione dell'archiviazione. Vedere Quali artefatti vengono conteggiati per l'archiviazione totale fatturata.

Attenzione

L'eliminazione di un'esecuzione della pipeline comporterà l'eliminazione di tutti gli artefatti associati a tale esecuzione.

Usare .artifactignore

.artifactignore usa una sintassi simile a .gitignore (con poche limitazioni) per specificare quali file devono essere ignorati durante la pubblicazione degli artefatti. Assicurarsi che il file con estensione artifactignore si trovi all'interno della directory specificata dall'argomento targetPath dell'attività Publish Pipeline Artifacts.

Nota

Il carattere + segno più non è supportato nei percorsi URL e alcuni metadati di compilazione per i tipi di pacchetto, ad esempio Maven.

Esempio: ignorare tutti i file tranne .exe file:

**/*
!*.exe

Importante

Azure Artifacts ignora automaticamente il percorso della cartella .git quando non si dispone di un file con estensione artifactignore . È possibile ignorare questo problema creando un file con estensione artifactignore vuoto.

Scaricare gli artefatti

È possibile scaricare elementi usando YAML, l'editor classico o l'interfaccia della riga di comando di Azure.

steps:
- download: current
  artifact: WebApp
  • current: scaricare gli artefatti prodotti dall'esecuzione della pipeline corrente. Opzioni: corrente, specifica.

Nota

L'elenco degli artefatti pubblicati sarà disponibile solo nei processi dipendenti seguenti. Pertanto, usare l'opzione current solo in processi separati, con dipendenza dai processi con attività di pubblicazione degli artefatti.

Suggerimento

È possibile usare le risorse della pipeline per definire l'origine in un'unica posizione e usarla ovunque nella pipeline.

Nota

La download parola chiave scarica gli artefatti. Per altre informazioni, vedere steps.download.

Per scaricare un artefatto della pipeline da un progetto diverso all'interno dell'organizzazione, assicurarsi di disporre delle autorizzazioni appropriate configurate sia per il progetto downstream che per la pipeline che genera l'artefatto. Per impostazione predefinita, i file vengono scaricati in $(Pipeline.Workspace). Se non è stato specificato un nome di artefatto, verrà creata una sottodirectory per ogni artefatto scaricato. È possibile usare modelli di corrispondenza per limitare i file scaricati. Per altri dettagli, vedere Modelli di corrispondenza dei file.

steps:
- download: current
  artifact: WebApp
  patterns: |
    **/*.js
    **/*.zip

Selezione artefatti

Un singolo passaggio di download può scaricare uno o più artefatti. Per scaricare più artefatti, lasciare vuoto il campo del nome dell'artefatto e usare i criteri di corrispondenza dei file per limitare i file da scaricare. ** è il modello di corrispondenza dei file predefinito (tutti i file in tutti gli artefatti).

Singolo artefatto

Quando viene specificato un nome di artefatto:

  1. Vengono scaricati solo i file per tale artefatto specifico. Se l'artefatto non esiste, l'attività avrà esito negativo.

  2. I criteri di corrispondenza dei file vengono valutati in relazione alla radice dell'artefatto. Ad esempio, il modello *.jar corrisponde a tutti i file con un'estensione .jar nella radice dell'artefatto.

Nell'esempio seguente viene illustrato come scaricare tutto *.js da un artefatto WebApp:

steps:
- download: current
  artifact: WebApp
  patterns: '**/*.js'

Più artefatti

Quando non viene specificato alcun nome di artefatto:

  1. È possibile scaricare più artefatti e l'attività non ha esito negativo se non vengono trovati file.

  2. Viene creata una sottodirectory per ogni artefatto.

  3. I criteri di corrispondenza dei file devono presupporre che il primo segmento del modello sia (o corrisponda) a un nome di artefatto. Ad esempio, WebApp/** corrisponde a tutti i file dell'artefatto WebApp . Il modello */*.dll corrisponde a tutti i file con un'estensione .dll nella radice di ogni artefatto.

L'esempio seguente illustra come scaricare tutti i .zip file da tutti gli artefatti:

steps:
- download: current
  patterns: '**/*.zip'

Scaricare un artefatto specifico

L'esempio seguente illustra come scaricare gli artefatti della pipeline da una versione di compilazione specifica prodotta da una determinata esecuzione:

resources:
  pipelines:
  - pipeline: myPipeline
    project: 'xxxxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx'
    source: '79'
    version: '597'

steps:
- download: myPipeline
  artifact: drop
  patterns: '**'
  displayName: 'Download Pipeline Artifact'

Artefatti nei processi di rilascio e distribuzione

Gli artefatti vengono scaricati automaticamente nei processi di distribuzione. Per impostazione predefinita, gli artefatti vengono scaricati in $(Pipeline.Workspace). L'attività di download artefatto verrà inserita automaticamente solo quando si usa l'hook del deploy ciclo di vita nella distribuzione. Per impedire il download automatico degli artefatti, aggiungere un download passaggio e impostarne il valore su nessuno. In un normale processo di compilazione è necessario usare in modo esplicito la download parola chiave step o l'attività Scarica artefatto pipeline. Per altre informazioni sugli altri tipi di hook, vedere Hook del ciclo di vita.

steps:
- download: none

Usare artefatti in più fasi

Se si vuole poter accedere all'artefatto in diverse fasi della pipeline, è ora possibile pubblicare l'artefatto in una fase e scaricarlo nella fase successiva sfruttando le dipendenze. Per altre informazioni, vedere Dipendenze da fase a fase.

Esempio

Nell'esempio seguente verrà copiata e pubblicata una cartella script dal repository in $(Build.ArtifactStagingDirectory). Nella seconda fase verrà scaricato ed eseguito lo script.

trigger:
- main
stages:
- stage: build
  jobs:
  - job: run_build
    pool:
      vmImage: 'windows-latest'
    steps:
    - task: VSBuild@1
      inputs:
        solution: '**/*.sln'
        msbuildArgs: '/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:DesktopBuildPackageLocation="$(build.artifactStagingDirectory)\WebApp.zip" /p:DeployIisAppPath="Default Web Site"'
        platform: 'Any CPU'
        configuration: 'Release'

    - task: CopyFiles@2
      displayName: 'Copy scripts'
      inputs:
        contents: 'scripts/**'
        targetFolder: '$(Build.ArtifactStagingDirectory)'

    - publish: '$(Build.ArtifactStagingDirectory)/scripts'
      displayName: 'Publish script'
      artifact: drop

- stage: test
  dependsOn: build
  jobs:
  - job: run_test
    pool:
      vmImage: 'windows-latest'
    steps:
    - download: current
      artifact: drop
    - task: PowerShell@2
      inputs:
        filePath: '$(Pipeline.Workspace)\drop\test.ps1'

Screenshot che mostra l'output dell'attività di PowerShell

Eseguire la migrazione da elementi di compilazione

Gli artefatti della pipeline sono la generazione successiva di artefatti di compilazione e sono il modo consigliato per lavorare con gli artefatti. Gli artefatti pubblicati usando l'attività Pubblica artefatti di compilazione possono comunque essere scaricati usando Scarica artefatti di compilazione, ma è consigliabile usare l'attività Scarica artefatto pipeline più recente.

Durante la migrazione dagli artefatti di compilazione agli artefatti della pipeline:

  1. Per impostazione predefinita, l'attività Scarica elemento pipeline scarica i file in $(Pipeline.Workspace). Si tratta del percorso predefinito e consigliato per tutti i tipi di artefatti.

  2. È previsto che i criteri di corrispondenza dei file per l'attività Scarica artefatti di compilazione inizino con (o corrispondano) al nome dell'artefatto, indipendentemente dal fatto che sia stato specificato o meno un artefatto specifico. Nell'attività Scarica artefatto pipeline i modelli non devono includere il nome dell'artefatto quando è già stato specificato un nome di artefatto. Per altre informazioni, vedere Selezione di singoli artefatti.

Esempio

- task: PublishPipelineArtifact@1
  displayName: 'Publish pipeline artifact'
  inputs:
    targetPath: '$(Pipeline.Workspace)'
    ${{ if eq(variables['Build.SourceBranchName'], 'main') }}:
        artifact: 'prod'
    ${{ else }}:
        artifact: 'dev'
    publishLocation: 'pipeline'
  • targetPath: (Obbligatorio) Percorso del file o della directory da pubblicare. Può essere assoluto o relativo alla directory di lavoro predefinita. Può includere variabili, ma i caratteri jolly non sono supportati. Impostazione predefinita: $(Pipeline.Workspace).

  • publishLocation: (Obbligatorio) Percorso di pubblicazione degli artefatti. Scegliere se archiviare l'artefatto in Azure Pipelines o copiarlo in una condivisione file che deve essere accessibile dall'agente della pipeline. Opzioni: pipeline, filepath. Impostazione predefinita: pipeline.

  • artifact: (facoltativo) Nome dell'artefatto da pubblicare. Se non è impostato, per impostazione predefinita viene impostato un ID univoco con ambito per il processo.

Visualizzare gli artefatti pubblicati

Al termine dell'esecuzione della pipeline, seguire questa procedura per visualizzare o scaricare l'artefatto pubblicato:

  1. Accedere all'organizzazione di Azure DevOps e passare al progetto.

  2. Selezionare Pipeline, selezionare l'esecuzione della pipeline e quindi selezionare la scheda Riepilogo .

  3. Nella sezione correlata selezionare l'artefatto pubblicato.

    Screenshot che mostra come trovare gli artefatti pubblicati in un'esecuzione della pipeline.

  4. Espandere la cartella di rilascio per individuare l'artefatto. È quindi possibile scaricare l'artefatto ed esplorarne il contenuto.

    Screenshot che mostra il contenuto di un artefatto pubblicato.

Domande frequenti

D: Cosa sono gli artefatti di compilazione?

R: Gli artefatti di compilazione sono i file generati dalla compilazione. Per altre informazioni su come pubblicare e usare gli artefatti di compilazione, vedere Creare artefatti.

D: È possibile eliminare gli artefatti della pipeline quando si eseguono nuovamente processi non riusciti?

R: Gli artefatti della pipeline non sono eliminabili o sovrascrivibili. Se si desidera rigenerare gli artefatti quando si esegue nuovamente un processo non riuscito, è possibile includere l'ID processo nel nome dell'artefatto. $(system.JobId) è la variabile appropriata a questo scopo. Per altre informazioni sulle variabili predefinite, vedere Variabili di sistema .

D: Come è possibile accedere ai feed artifacts dietro un firewall?

R: Se l'organizzazione usa un firewall o un server proxy, assicurarsi di consentire GLI URL e gli indirizzi IP del dominio di Azure Artifacts.