Publicar e baixar artefatos de pipeline

Azure DevOps Services

Usando o Azure Pipelines, você pode baixar artefatos nas fases iniciais no seu pipeline ou em outro pipeline. Você também pode publicar seu artefato em um compartilhamento de arquivos ou disponibilizá-lo como um artefato de pipeline.

Publicar artefatos

Você pode publicar seus artefatos usando o YAML, o editor clássico ou a CLI do Azure:

Observação

Não há suporte para artefatos de pipeline de publicação em pipelines de lançamento.

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

Observação

A palavra-chave publish é um atalho para a tarefa Publicar Artefato de Pipeline.

Embora o nome do artefato seja opcional, é uma boa prática especificar um nome que reflita com precisão o conteúdo do artefato. Se você planeja consumir o artefato de um trabalho em execução em um sistema operacional diferente, deve garantir que todos os caminhos de arquivo sejam válidos para o ambiente de destino. Por exemplo, um nome de arquivo que contém o caractere \ ou * não será baixado no Windows.

O caminho do arquivo/pasta que você deseja publicar é necessário. Esse caminho pode ser absoluto ou relativo para $(System.DefaultWorkingDirectory).

Os pacotes no Azure Artifacts são imutáveis. Depois de publicar um pacote, sua versão será permanentemente reservada. A nova execução de trabalhos com falha falhará, se o pacote tiver sido publicado. Uma boa maneira de abordar isso, se você quiser executar novamente os trabalhos com falha, sem encontrar o erro o pacote já existe, é usar Condições para executar somente se o trabalho anterior tiver sido bem-sucedido.

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

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

Observação

Você não será cobrado pelo armazenamento de Artefatos de Pipeline. O cache de pipeline também é isento da cobrança de armazenamento. Confira Quais artefatos contam para o total do meu armazenamento cobrado.

Cuidado

A exclusão de uma execução de pipeline resultará na exclusão de todos os Artefatos associados a essa execução.

Usar .artifactignore

.artifactignore usa uma sintaxe semelhante a .gitignore (com poucas limitações) para especificar quais arquivos devem ser ignorados ao publicar artefatos. Verifique se o arquivo .artifactignore está localizado no diretório especificado pelo argumento targetPath da tarefa Publicar Artefato de Pipeline.

Observação

Não há suporte para o caractere de sinal de adição + em caminhos de URL e alguns metadados de builds para tipos de pacote, como o Maven.

Exemplo: ignorar todos os arquivos, exceto arquivos.exe:

**/*
!*.exe

Importante

O Azure Artifacts ignora automaticamente o caminho da pasta .git, quando você não tem um arquivo .artifactignore. Você pode ignorar isso criando um arquivo .artifactignore vazio.

Baixar artefatos

Você pode baixar seus artefatos usando o YAML, o editor clássico ou a CLI do Azure.

steps:
- download: current
  artifact: WebApp
  • current: baixe artefatos produzidos pela execução atual do pipeline. Opções: atual, específico.

Observação

A lista de artefatos publicados estará disponível somente nos seguintes trabalhos dependentes. Portanto, use a opção current somente em trabalhos separados, que têm dependência de trabalhos com tarefas de artefatos de publicação.

Dica

Você pode usar os recursos de pipeline para definir sua origem em um só lugar e usá-la em qualquer lugar no seu pipeline.

Observação

A palavra-chave download baixa artefatos. Para obter mais informações, confira steps.download.

Para baixar um artefato de pipeline de um projeto diferente dentro da sua organização, verifique se você tem as permissões apropriadas configuradas tanto para o projeto downstream quanto para o pipeline downstream. Por padrão, os arquivos são baixados em $(Pipeline.Workspace). Se um nome de artefato não tiver sido especificado, um subdiretório será criado para cada artefato baixado. Você pode usar padrões de correspondência para limitar quais arquivos são baixados. Confira Padrões de correspondência de arquivos para obter mais detalhes.

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

Seleção de artefatos

Uma única etapa de download pode baixar um ou mais artefatos. Para baixar vários artefatos, deixe o campo nome do artefato vazio e use padrões de correspondência de arquivos para limitar quais arquivos serão baixados. ** é o padrão de correspondência de arquivo (todos os arquivos em todos os artefatos).

Artefato único

Quando um nome de artefato é especificado:

  1. Somente os arquivos para esse artefato específico serão baixados. Se o artefato não existir, a tarefa falhará.

  2. Os padrões de correspondência de arquivos são avaliados em relação à raiz do artefato. Por exemplo, o padrão *.jar corresponde a todos os arquivos com uma extensão .jar na raiz do artefato.

O exemplo a seguir ilustra como baixar tudo *.js de um artefato WebApp:

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

Vários artefatos

Quando nenhum nome de artefato é especificado:

  1. Vários artefatos podem ser baixados e a tarefa não falhará, se nenhum arquivo for encontrado.

  2. Um subdiretório é criado para cada artefato.

  3. Os padrões de correspondência de arquivos devem supor que o primeiro segmento do padrão é (ou corresponde a) um nome de artefato. Por exemplo, WebApp/** corresponde a todos os arquivos do artefato WebApp. O padrão */*.dll corresponde a todos os arquivos com uma extensão .dll na raiz de cada artefato.

O exemplo a seguir ilustra como baixar todos os arquivos .zip de todos os artefato:

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

Artefatos em trabalhos de lançamento e implantação

Os artefatos só serão baixados automaticamente em trabalhos de implantação. Por padrão, os artefatos são baixados em $(Pipeline.Workspace). A tarefa de download do artefato será injetada automaticamente somente ao usar o gancho de ciclo de vida deploy na sua implantação. Para impedir que os artefatos sejam baixados automaticamente, adicione uma etapa download e defina seu valor como nenhum. Em um trabalho de build regular, você precisa usar explicitamente a palavra-chave de etapa download ou a tarefa Baixar Artefato de Pipeline. Confira ganchos de ciclo de vida para saber mais sobre os outros tipos de ganchos.

steps:
- download: none

Usar artefatos entre fases

Se você deseja acessar seu artefato em diferentes estágios no seu pipeline, agora poderá publicar seu artefato em um estágio e baixá-lo no próximo estágio, aproveitando as dependências. Confira Dependências entre estágios para obter mais detalhes.

Exemplo

No exemplo a seguir, copiaremos e publicaremos uma pasta de script do nosso repositório para o $(Build.ArtifactStagingDirectory). Na segunda fase, baixaremos e executaremos nosso 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 showing the PowerShell task output

Migrar de artefatos de compilação

Os artefatos de pipeline são a próxima geração de artefatos de compilação e são a maneira recomendada de trabalhar com artefatos. Artefatos publicados usando a tarefa Publicar Artefato de Compilação ainda podem ser baixados usando Baixar Artefato de Compilação, mas recomendamos usar a tarefa Baixar Artefato de Pipeline mais recente.

Ao migrar de artefatos de compilação para artefatos de pipeline:

  1. Por padrão, a tarefa Baixar Artefato de Pipeline baixa arquivos em $(Pipeline.Workspace). Esse é o caminho padrão e recomendado para todos os tipos de artefatos.

  2. Espera-se que os padrões de correspondência de arquivos para a tarefa Baixar Artefatos de Compilação comecem com (ou correspondam) o nome do artefato, independentemente de um artefato específico ter sido especificado. Na tarefa Baixar Artefato de Pipeline, os padrões não devem incluir o nome do artefato quando um nome de artefato já tiver sido especificado. Para obter mais informações, confira seleção de artefato único.

Exemplo

- 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: (obrigatório) o caminho do arquivo ou diretório a ser publicado. Pode ser absoluto ou relativo para o diretório de trabalho padrão. Pode incluir variáveis, mas curingas não são suportados. Padrão: $(Pipeline.Workspace).

  • publishLocation: (obrigatório) local de publicação de artefatos. Escolha se deseja armazenar o artefato no Azure Pipelines ou copiá-lo para um compartilhamento de arquivos que deve ser acessível a partir do agente de pipeline. Opções: pipeline, filepath. Padrão: pipeline.

  • artefato: (opcional) nome do artefato a ser publicado Se não for definido, o padrão será uma ID exclusiva com escopo para o trabalho.

Perguntas frequentes

P: o que são artefatos de compilação?

R: os artefatos de compilação são os arquivos gerados pelo seu build. Confira Compilar artefatos para saber mais sobre como publicar e consumir seus artefatos de compilação.

P: posso excluir artefatos de pipeline ao executar novamente os trabalhos com falha?

R: os artefatos de pipeline não são deletáveis ou substituíveis. Se você quiser regenerar artefatos ao executar novamente um trabalho com falha, poderá incluir a ID do trabalho no nome do artefato. $(system.JobId) é a variável apropriada para essa finalidade. Confira Variáveis do sistema para saber mais sobre variáveis predefinidas.

P: como posso acessar os feeds do Artifacts protegidos por um firewall?

R: se sua organização estiver usando um firewall ou um servidor proxy, certifique-se de permitir URLs de domínio e endereços IP do Azure Artifacts.