Tarea Copiar archivos
| Argumento | Descripción |
|---|---|
SourceFolderCarpeta 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. |
ContentsContenido |
(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:
|
TargetFolderCarpeta de destino |
(Obligatorio) Los archivos de carpeta de destino o ruta de acceso UNC se copiarán en . Puede usar variables. Ejemplo: $(build.artifactstagingdirectory) |
CleanTargetFolderLimpiar carpeta de destino |
(Opcional) Eliminación de todos los archivos existentes en la carpeta de destino antes de la copia Valor predeterminado: false |
OverWriteSobrescribir |
(Opcional) Reemplazo de archivos existentes en la carpeta de destino Valor predeterminado: false |
flattenFoldersAplanar carpetas |
(Opcional) Aplanar la estructura de carpetas y copiar todos los archivos en la carpeta de destino especificada Valor predeterminado: false |
preserveTimestampConservar marca de tiempo de destino |
(Opcional) Con el archivo de origen original, conserve la marca de tiempo del archivo de destino. Valor predeterminado: false |
retryCountRecuento 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 |
ignoreMakeDirErrorsOmitir 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:
- Edite la canalización y seleccione Variables.
- Agregar una nueva variable con el nombre
System.Debugy el valortrue - 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
Utilidad: Copiar archivos