Tarea Copiar archivos

Argumento Descripción
SourceFolder
Carpeta de origen
(Opcional) Carpeta que contiene los archivos que desea copiar. Si lo deja vacío, la copia se realiza desde la carpeta raíz del repositorio (igual que si hubiera especificado $(Build.SourcesDirectory) ).
Si la compilación genera artefactos fuera del directorio sources, especifique para copiar $(Agent.BuildDirectory) los archivos del directorio creado para la canalización.
Contents
Contenido
(Obligatorio) Rutas de acceso de archivo que se incluirán como parte de la copia. Admite varias líneas de patrones de coincidencia.
Por ejemplo:
  • * copia todos los archivos de la carpeta de origen especificada
  • ** copia todos los archivos de la carpeta de origen especificada y todos los archivos de todas las subcarpetas.
  • **\bin\** copia todos los archivos de forma recursiva desde cualquier carpeta bin

    El patrón se usa para coincidir solo con las rutas de acceso de archivo, no con las rutas de acceso de carpeta. Por lo tanto, debe especificar patrones como **\bin\** en lugar de **\bin.
    Debe usar el separador de ruta de acceso que coincida con el tipo de agente de compilación. Por ejemplo, / debe usarse para los agentes de Linux. A continuación se muestran más ejemplos.
    Valor predeterminado: **
TargetFolder
Carpeta de destino
(Obligatorio) Los archivos de carpeta de destino o ruta de acceso UNC se copiarán en . Puede usar variables.
Ejemplo: $(build.artifactstagingdirectory)
CleanTargetFolder
Limpiar carpeta de destino
(Opcional) Eliminación de todos los archivos existentes en la carpeta de destino antes de la copia
Valor predeterminado: false
OverWrite
Sobrescribir
(Opcional) Reemplazo de archivos existentes en la carpeta de destino
Valor predeterminado: false
flattenFolders
Aplanar carpetas
(Opcional) Aplanar la estructura de carpetas y copiar todos los archivos en la carpeta de destino especificada
Valor predeterminado: false
preserveTimestamp
Conservar marca de tiempo de destino
(Opcional) Con el archivo de origen original, conserve la marca de tiempo del archivo de destino.
Valor predeterminado: false
retryCount
Recuento de reintentos para copiar el archivo
(Opcional) Especifique el número de reintentos para copiar el archivo. Puede ayudar a resolver problemas intermitentes, por ejemplo, con las rutas de acceso de destino UNC en un host remoto.
Valor predeterminado: 0
ignoreMakeDirErrors
Omitir errores durante la creación de la carpeta de destino
(Opcional) Esto podría ser útil para evitar problemas con la ejecución en paralelo de tareas por parte de varios agentes con una carpeta de destino.
Valor predeterminado: false

Notas

Si no se coincide con ningún archivo, la tarea seguirá informando de que se ha hecho correctamente. Si ya existe un archivo coincidente en el destino, la tarea notificará un error a menos que Overwrite esté establecido en true.

Ejemplo

steps:
- task: CopyFiles@2
  inputs:
    contents: '_buildOutput/**'
    targetFolder: $(Build.ArtifactStagingDirectory)
- task: PublishBuildArtifacts@1
  inputs:
    pathToPublish: $(Build.ArtifactStagingDirectory)
    artifactName: MyBuildOutputs

Ejemplos

Copiar archivos ejecutables y un archivo Léame

Objetivo

Quiere copiar solo el archivo Léame y los archivos necesarios para ejecutar esta aplicación de consola de C#:

`-- ConsoleApplication1
    |-- ConsoleApplication1.sln
    |-- readme.txt
    `-- ClassLibrary1
        |-- ClassLibrary1.csproj
    `-- ClassLibrary2
        |-- ClassLibrary2.csproj
    `-- ConsoleApplication1
        |-- ConsoleApplication1.csproj

Nota

ConsoleApplication1.sln contiene una carpeta bin con .dll y .exe archivos, consulte los resultados siguientes para ver lo que se mueve.

En la pestaña Variables, $(BuildConfiguration) se establece en release .

Ejemplo con varios patrones de coincidencia:

steps:
- task: CopyFiles@2
  displayName: 'Copy Files to: $(Build.ArtifactStagingDirectory)'
  inputs:
    Contents: |
      ConsoleApplication1\ConsoleApplication1\bin\**\*.exe
      ConsoleApplication1\ConsoleApplication1\bin\**\*.dll
      ConsoleApplication1\readme.txt
    TargetFolder: '$(Build.ArtifactStagingDirectory)'

Ejemplo con la condición OR:

steps:
- task: CopyFiles@2
  displayName: 'Copy Files to: $(Build.ArtifactStagingDirectory)'
  inputs:
    Contents: |
      ConsoleApplication1\ConsoleApplication1\bin\**\?(*.exe|*.dll)
      ConsoleApplication1\readme.txt
    TargetFolder: '$(Build.ArtifactStagingDirectory)'

Ejemplo con la condición NOT:

steps:
- task: CopyFiles@2
  displayName: 'Copy Files to: $(Build.ArtifactStagingDirectory)'
  inputs:
    Contents: |
      ConsoleApplication1\**\bin\**\!(*.pdb|*.config)
      !ConsoleApplication1\**\ClassLibrary*\**
      ConsoleApplication1\readme.txt
    TargetFolder: '$(Build.ArtifactStagingDirectory)'

Ejemplo con variables en la sección de contenido

- task: CopyFiles@2
  inputs:
    Contents: '$(Build.Repository.LocalPath)/**' 
    TargetFolder: '$(Build.ArtifactStagingDirectory)'

Las compilaciones de YAML aún no están disponibles en TFS.

Results

Estos archivos se copian en el directorio de ensayo:

`-- ConsoleApplication1
    |-- readme.txt
    `-- ConsoleApplication1
        `-- bin
            `-- Release
                | -- ClassLibrary1.dll
                | -- ClassLibrary2.dll
                | -- ConsoleApplication1.exe

Copie todo el contenido del directorio de origen, excepto la carpeta .git.

Ejemplo con varios patrones de coincidencia:

steps:
- task: CopyFiles@2
  displayName: 'Copy Files to: $(Build.ArtifactStagingDirectory)'
  inputs:
    SourceFolder: '$(Build.SourcesDirectory)'
    Contents: |
      **/*
      !.git/**/*
    TargetFolder: '$(Build.ArtifactStagingDirectory)'

Las compilaciones de YAML aún no están disponibles en TFS.

Código Abierto

Esta tarea es de código abierto en GitHub. Los comentarios y las contribuciones son bienvenidos.

Preguntas más frecuentes

¿Dónde puedo obtener más información sobre los patrones de coincidencia de archivos?

Referencia de patrones de coincidencia de archivos

Cómo usar esta tarea para publicar artefactos?

Vea Artifacts en Azure Pipelines.

P: Tengo problemas con la publicación de mis artefactos. ¿Cómo puedo ver los registros detallados?

Para habilitar registros detallados para la canalización:

  1. Edite la canalización y seleccione Variables.
  2. Agregar una nueva variable con el nombre System.Debug y el valor true
  3. Guardar

P: ¿Qué variables están disponibles para mí?

A: $(Build.SourcesDirectory) y son solo algunas de las variables que puede usar en la $(Agent.BuildDirectory) canalización. Las variables están disponibles como expresiones o scripts.

Consulte Definición de variables,variables predefinidasy variables de versión clásica y artefactos para obtener información sobre los diferentes tipos de variables.

P: La tarea me permite publicar artefactos en el trabajo de implementación en la canalización yaml, pero no puedo usarlos en la canalización de nivel inferior.

A. Los trabajos de implementación no tienen el contexto de las ramas de origen y, por lo tanto, no son adecuados para publicar artefactos. Se han diseñado principalmente para consumir artefactos. Una solución alternativa sería aislar esa lógica en un trabajo independiente (con dependencias en los trabajos de implementación).

¿Necesito un agente?

Necesita al menos un agente para ejecutar la compilación o versión.

Tengo problemas. ¿Cómo puedo solucionarlos?

Vea Solución de problemas de compilación y versión.

No se puede seleccionar un grupo de agentes predeterminado y no se puede poner en cola la compilación o versión. ¿Cómo puedo corregirlo?

Vea Grupos de agentes.

La tarea de envío de cambios de NuGet genera el error siguiente: "Error: no se puede obtener el certificado del emisor local". ¿Cómo lo puedo corregir?

Esto se puede corregir si se añade un certificado raíz de confianza. Puede agregar la variable de entorno NODE_EXTRA_CA_CERTS=file al agente de compilación, o bien la variable de tarea NODE.EXTRA.CA.CERTS=file en la canalización. Vea la documentación de Node.js para obtener más detalles sobre esta variable. Consulte Establecimiento de variables en una canalización para obtener instrucciones sobre cómo establecer una variable en la canalización.

Utilizo TFS en el entorno local y no veo algunas de estas características. ¿Por qué no?

Algunas de estas características solo están disponibles en Azure Pipelines y todavía no lo están en el entorno local. Algunas características están disponibles en el entorno local si ha actualizado a la versión más reciente de TFS.

Azure Pipelines | Azure DevOps Server 2020 | Azure DevOps Server 2019 | TFS 2018- TFS 2015.3

Use esta tarea para copiar archivos de una carpeta de origen a una carpeta de destino mediante patrones de coincidencia.

Nota

En Microsoft Team Foundation Server (TFS) 2018 y versiones anteriores, las canalizaciones de compilación y versión se denominan definiciones, las ejecuciones se denominan compilaciones, las conexiones de servicio se denominan puntos de conexión de servicio, las fases se denominan entornos y los trabajos se denominan fases.

Peticiones

None

Fragmento de código YAML

# Copy files
# Copy files from a source folder to a target folder using patterns matching file paths (not folder paths)
- task: CopyFiles@2
  inputs:
    #sourceFolder: # Optional
    #contents: '**' 
    targetFolder: 
    #cleanTargetFolder: false # Optional
    #overWrite: false # Optional
    #flattenFolders: false # Optional
    #preserveTimestamp: false # Optional
    #retryCount: 0 # Optional
    #ignoreMakeDirErrors: false # Optional

Argumentos