Publicación y descarga de artefactos de canalización

Azure DevOps Services

Con Azure Pipelines, puede descargar artefactos de fases anteriores en la canalización o de otra canalización. También puede publicar el artefacto en un recurso compartido de archivos o hacer que esté disponible como artefacto de canalización.

Publicación de artefactos

Puede publicar los artefactos mediante YAML, el editor clásico o la CLI de Azure:

Nota

No se admite la publicación de artefactos de canalización en canalizaciones de versión.

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

Nota

La palabra clave publish es un acceso directo para la tarea Publicar artefacto de canalización.

Aunque el nombre del artefacto es opcional, es recomendable especificar un nombre que refleje con precisión el contenido del artefacto. Si tiene previsto consumir el artefacto desde un trabajo que se ejecuta en otro sistema operativo, debe asegurarse de que todas las rutas de acceso de archivo sean válidas en el entorno de destino. Por ejemplo, un nombre de archivo que contenga el carácter \ o * no se descargará en Windows.

Se requiere la ruta de acceso del archivo o carpeta que quiere publicar. Puede ser una ruta de acceso absoluta o relativa a $(System.DefaultWorkingDirectory).

Los paquetes de Azure Artifacts son inmutables. Una vez que publica un paquete, su versión se reservará permanentemente. Si se ha publicado el paquete, se producirá un error al volver a ejecutar los trabajos con errores. Una buena manera de abordar esta situación si quiere poder volver a ejecutar trabajos con errores sin recibir el error el paquete ya existe, es usar condiciones para que se ejecuten solo si el trabajo anterior se realizó correctamente.

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

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

Nota

No se le facturará por almacenar artefactos de canalización. El almacenamiento en caché de canalizaciones también está exento de la facturación del almacenamiento. Consulte ¿Qué artefactos se incluyen en el almacenamiento facturado total?

Precaución

Al eliminar una ejecución de canalización, se eliminarán todos los artefactos asociados a esa ejecución.

Uso de .artifactignore

.artifactignore usa una sintaxis similar a .gitignore (con pocas limitaciones) para especificar qué archivos se deben omitir al publicar artefactos. Asegúrese de que el archivo .artifactignore se encuentra en el directorio especificado por el argumento targetPath de la tarea Publicar artefactos de canalización.

Nota

El carácter de signo más (+) no se admite en las rutas de dirección URL y en algunos metadatos de compilaciones para tipos de paquete, como Maven.

Ejemplo: omita todos los archivos excepto los archivos .exe:

**/*
!*.exe

Importante

Azure Artifacts omite automáticamente la ruta de acceso de la carpeta .git cuando no hay un archivo .artifactignore. Para omitirla, cree un archivo .artifactignore vacío.

Descarga de artefactos

Puede descargar artefactos mediante YAML, el editor clásico o la CLI de Azure.

steps:
- download: current
  artifact: WebApp
  • actual: se descargan los artefactos generados por la ejecución de la canalización actual. Opciones: current, specific.

Nota

La lista de artefactos publicados solo estará disponible en los siguientes trabajos dependientes. Por lo tanto, use la opción current solo en trabajos independientes que dependan de trabajos con tareas de publicación de artefactos.

Sugerencia

Puede usar recursos de canalización para definir el origen en un solo lugar y usarlo en cualquier parte de la canalización.

Nota:

La palabra clave download descarga artefactos. Para obtener más información, consulte steps.download.

Para descargar un artefacto de canalización de un proyecto diferente dentro de la organización, asegúrese de que tiene los permisos adecuados configurados para el proyecto de bajada y la canalización de bajada. De forma predeterminada, los archivos se descargan en $(Pipeline.Workspace). Si no se especificó un nombre de artefacto, se crea un subdirectorio para cada artefacto descargado. Puede usar patrones de coincidencia para limitar los archivos que se descargan. Consulte Patrones de coincidencia de archivos para más información.

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

Selección de artefactos

Un solo paso de descarga puede descargar uno o varios artefactos. Para descargar varios artefactos, deje vacío el campo Nombre del artefacto y use patrones de coincidencia de archivos para limitar los archivos que se descargan. ** es el patrón de coincidencia de archivos predeterminado (todos los archivos de todos los artefactos).

Un solo artefacto

Cuando se especifica un nombre de artefacto:

  1. Solo se descargan los archivos de ese artefacto específico. Si el artefacto no existe, se producirá un error en la tarea.

  2. Los patrones de coincidencia de archivos se evalúan en relación con la raíz del artefacto. Por ejemplo, el patrón *.jar coincide con todos los archivos con una extensión .jar en la raíz del artefacto.

En el ejemplo siguiente se muestra cómo descargar todos los archivos *.js desde un artefacto WebApp:

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

Varios artefactos

Cuando no se especifica ningún nombre de artefacto:

  1. Se pueden descargar varios artefactos y la tarea no produce un error si no se encuentra ningún archivo.

  2. Se crea un subdirectorio para cada artefacto.

  3. Los patrones de coincidencia de archivos deben suponer que el primer segmento del patrón es (o coincide con) un nombre de artefacto. Por ejemplo, WebApp/** coincide con todos los archivos del artefacto WebApp. El patrón */*.dll coincide con todos los archivos con una extensión .dll en la raíz de cada artefacto.

En el ejemplo siguiente se muestra cómo descargar todos los archivos de todos los archivos .zip de todos los artefactos:

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

Artefactos en trabajos de versión e implementación

Los artefactos solo se descargan automáticamente en los trabajos de implementación. De forma predeterminada, los artefactos se descargan en $(Pipeline.Workspace). La tarea de descarga de artefactos se insertará automáticamente solo cuando se use el enlace de ciclo de vida deploy en la implementación. Para impedir que los artefactos se descarguen automáticamente, agregue un paso download y establezca su valor en ninguno. En un trabajo de compilación normal, debe usar explícitamente la palabra clave de paso download o la tarea Descargar artefacto de canalización. Consulte los enlaces de ciclo de vida para más información sobre los otros tipos de enlaces.

steps:
- download: none

Uso de artefactos entre fases

Si desea poder acceder al artefacto a través de diferentes fases de la canalización, ahora puede publicar el artefacto en una fase y descargarlo en la siguiente aprovechando las dependencias. Consulte Dependencias de fase en fase para obtener más detalles.

Ejemplo

En el ejemplo siguiente, copiaremos y publicaremos una carpeta de script de nuestro repositorio en $(Build.ArtifactStagingDirectory). En la segunda fase, descargaremos y ejecutaremos nuestro 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

Migración desde artefactos de compilación

Los artefactos de canalización son la próxima generación de artefactos de compilación y son la manera recomendada de trabajar con artefactos. Los artefactos publicados mediante la tarea Publicar artefactos de compilación todavía se pueden descargar mediante Descargar artefactos de compilación, pero se recomienda usar en su lugar la tarea Descargar artefactos de canalización, más reciente.

Al migrar desde artefactos de compilación a artefactos de canalización:

  1. De forma predeterminada, la tarea Descargar artefacto de canalización descarga archivos en $(Pipeline.Workspace). Esta es la ruta de acceso predeterminada y recomendada para todos los tipos de artefactos.

  2. Se espera que los patrones de coincidencia de archivos de la tarea Descargar artefactos de compilación empiecen por (o coincidan con) el nombre del artefacto, independientemente de si se especificó o no un artefacto concreto. En la tarea Descargar artefacto de canalización, los patrones no deben incluir el nombre del artefacto cuando ya se ha especificado uno. Para más información, consulte Selección de un artefacto.

Ejemplo

- 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: (obligatorio) ruta de acceso del archivo o directorio que se va a publicar. Puede ser absoluta o relativa al directorio de trabajo predeterminado. Puede incluir variables, pero no se admiten caracteres comodín. Valor predeterminado: $(Pipeline.Workspace).

  • publishLocation: (obligatorio) ubicación de publicación de artefactos. Elija si quiere almacenar el artefacto en Azure Pipelines o copiarlo en un recurso compartido de archivos al que se debe acceder desde el agente de canalización. Opciones: pipeline, filepath. Valor predeterminado: canalización.

  • artefacto: (opcional) nombre del artefacto que se va a publicar. Si no se establece, se adopta como predeterminado un identificador único con ámbito para el trabajo.

Preguntas más frecuentes

P: ¿Qué son los artefactos de compilación?

R: Los artefactos de compilación son los archivos generados por la compilación. Consulte Artefactos de compilación para más información sobre cómo publicar y consumir los artefactos de compilación.

P: ¿Puedo eliminar artefactos de canalización al volver a ejecutar trabajos con errores?

R: Los artefactos de canalización no se pueden eliminar ni sobrescribir. Si quiere volver a generar artefactos al ejecutar de nuevo un trabajo con errores, puede incluir el identificador del trabajo en el nombre del artefacto. $(system.JobId) es la variable adecuada para este propósito. Consulte Variables del sistema para más información sobre las variables predefinidas.

P: ¿Cómo puedo acceder a las fuentes de artefactos detrás de un firewall?

R: Si su organización usa un firewall o un servidor proxy, asegúrese de permitir direcciones IP y direcciones URL de dominio de Azure Artifacts.