Publicar e baixar artefatos de pipeline

Serviços de DevOps do Azure

Usando o Azure Pipelines, você pode baixar artefatos de estágios anteriores em seu pipeline ou de 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 YAML, o editor clássico ou a CLI do Azure:

Nota

Não há suporte para a publicação de artefatos de pipeline em pipelines de versão.

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

Nota

A publish palavra-chave é um atalho para a tarefa Publish Pipeline Artifact .

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, você 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 é obrigatório. Este pode ser um caminho absoluto ou relativo para .$(System.DefaultWorkingDirectory)

Os pacotes nos Artefatos do Azure são imutáveis. Depois de publicar um pacote, sua versão será permanentemente reservada. A reexecução de trabalhos com falha falhará se o pacote tiver sido publicado. Uma boa maneira de abordar isso se você quiser ser capaz de executar novamente trabalhos com falha sem enfrentar um pacote de erro já existente, é usar Condições para executar somente se o trabalho anterior foi bem-sucedido.

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

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

Nota

Você não será cobrado pelo armazenamento de artefatos de pipeline. O Pipeline Caching também está isento de cobrança de armazenamento. Consulte Quais artefatos contam para o meu armazenamento total faturado.

Atenção

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 Artefatos de Pipeline.

Nota

O caractere + de sinal de adição não é suportado em caminhos de URL e alguns criam metadados para tipos de pacote, como Maven.

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

**/*
!*.exe

Importante

Os Artefatos do Azure ignoram 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 artefatos usando YAML, o editor clássico ou a CLI do Azure.

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

Nota

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

Gorjeta

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

Nota

A download palavra-chave descarrega artefactos. Para obter mais informações, consulte steps.download.

Para baixar um artefato de pipeline de um projeto diferente em sua organização, certifique-se de ter as permissões apropriadas configuradas para seu projeto downstream e pipeline downstream. Por padrão, os arquivos são baixados para $(Pipeline.Workspace). Se um nome de artefato não foi 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. Consulte 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 de nome do artefato vazio e use padrões de correspondência de arquivos para limitar quais arquivos serão baixados. ** é o padrão padrão de correspondência de arquivos (todos os arquivos em todos os artefatos).

Artefato único

Quando um nome de artefato é especificado:

  1. Somente arquivos para esse artefato específico sã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 .jar extensão 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 falha se nenhum arquivo for encontrado.

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

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

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

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

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

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

steps:
- download: none

Usar artefatos entre estágios

Se quiser aceder ao artefacto nas diferentes fases no pipeline, poderá agora publicar o artefacto numa fase e, em seguida, transferi-lo na fase seguinte, ao tirar partido das dependências. Veja Dependências fase a fase 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 etapa, 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 a partir de artefatos de compilação

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

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

  1. Por padrão, a tarefa Baixar Artefato de Pipeline baixa arquivos para $(Pipeline.Workspace). Este é 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 Construir Artefatos comecem com (ou correspondam) ao nome do artefato, independentemente de um artefato específico ter sido especificado ou não. 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, consulte 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 ao diretório de trabalho padrão. Pode incluir variáveis, mas não há suporte para curingas. Padrão: $(Pipeline.Workspace).

  • publishLocation: (Obrigatório) Artefatos publicam local. 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 estiver definido, o padrão será um ID exclusivo com escopo para o trabalho.

FAQ

P: O que são artefatos de construção?

R: Os artefatos de construção são os arquivos gerados pela sua compilação. Consulte Criar artefatos para saber mais sobre como publicar e consumir seus artefatos de compilação.

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

R: Os artefatos de pipeline não são excluíveis ou sobregraváveis. Se quiser regenerar artefatos ao executar novamente um trabalho com falha, você pode incluir a ID do trabalho no nome do artefato. $(system.JobId) é a variável adequada para este efeito. Consulte Variáveis do sistema para saber mais sobre variáveis predefinidas.

P: Como posso acessar feeds de artefatos atrás de um firewall?

R: Se a sua organização estiver a utilizar uma firewall ou um servidor proxy, certifique-se de que permite URLs e endereços IP do Domínio de Artefactos do Azure.