2017-10-09 2 views
2

Dans ma définition de génération TFS 2017, j'essaie de copier un dossier avec un nom spécifique (Package) vers mon répertoire Artifacts. Je suis seulement intéressé par le dossier spécifique lui-même, pas dans ses dossiers parents. Est-ce que quelqu'un peut m'éclairer sur la façon dont je devrais faire ce travail?TFS 2017 Build Copie des fichiers sans structure de dossiers?

configuration actuelle pour la tâche Copier les fichiers: Source: $ (agent.builddirectory) Contenu: ** \ Package *** Dossier cible: $ (build.artifactstagingdirectory) \ MyArtifact

Il en résulte la folderstructure suivante alors que mon seul intérêt est le dossier du package: \ MyArtifact \ FolderX \ s \ folderY \ folderZ \ dossierA \ package

Répondre

3

Avec TFS2017update1 et au-dessus, VSTS, vous pouvez simplement vérifier Aplatir les dossiers sous l'option Avancé dans Copy Files Task. La solution la plus simple pour l'instant.

enter image description here

Cela aplatir la structure du dossier et copiez tous les fichiers dans le dossier cible spécifié .

Je ne sais pas si vous travaillez 2017 version, et il n'y a pas Aplatir dossiers Option. Vous devez spécifier la racine de copie si vous souhaitez copier des fichiers uniquement sans structure de dossier. Vous pouvez utiliser $(Build.StagingDirectory) comme cible pour cela. Ensuite, utilisez la tâche Publier la tâche avec $(Build.StagingDirectory) en tant que racine de la copie et publiez tout de cette racine à la liste.

étape Détail et capture d'écran s'il vous plaît jeter un oeil à la réponse de Eddie dans cette question: Copy one file in target directory on deploy from visual studio team services

+0

Merci pour vos conseils Patrick. J'ai la mise à jour 1 mais je ne veux pas aplatir les dossiers car mon dossier 'Package' contient la sortie d'un projet WCF: certains .svc au niveau supérieur et un dossier bin avec dll.Je voudrais conserver pour garder cette structure ... –

+0

@BenThaens Si oui, vous pouvez utiliser l'option 2, il suffit de copier les fichiers avec structure et certains sans structure vers un chemin moyen comme 'Build.StagingDirectory' au lieu d'utiliser directement 'builddirectory' –

0

Si le chemin par rapport à « package » ne change pas, vous pouvez spécifier le chemin détaillé dans « Source » pour atteindre la fonctionnalité que vous voulez.

Par exemple, configurer la copie des fichiers Tâche:

Source Dossier à: $(agent.builddirectory)\folderY\folderZ\folderA\Package

Contenu à: **

Dossier cible à: $(build.artifactstagingdirectory)\MyArtifact\Package

Vous obtiendrez la structure du dossier vouloir.

0

Bien que toutes les réponses étaient correctes, ce n'était pas ce que je voulais atteindre. Je fini par créer mon propre script PowerShell pour copier le dossier du package et il est contenu dans le répertoire Mise en scène:

$BasePath = [System.IO.Path]::GetDirectoryName("$(SolutionPath)") 
$Search = "PackageTmp" 
$Destination = "$(Build.StagingDirectory)" 

Get-ChildItem -Path $BasePath -Filter $Search -Directory -Recurse | Copy-Item -Destination {Join-Path $Destination $(ArtifactName)} -Recurse -Force