web-dev-qa-db-fra.com

Azure Pipeline Publish: tâche DotNetCoreCLI avec dossier ou projet spécifique

Je rencontre un problème (comportement indésirable) lors de l'exécution d'un pipeline de build Azure avec la structure de projet/dossier suivante.

Le dossier racine de mon référentiel a deux dossiers principaux:

  • frontend (ASP.Net Core 2.x & Angular 7)
  • backend (ASP.Net Core 2.x)

J'essaie de créer deux pipelines Azure distincts, l'un pour le backend et l'autre pour le frontend, donc j'utilise le projects: paramètre pour spécifier le chemin correct.

Les commandes build et test fonctionnent correctement et ne font que restaurer/construire/tester le dossier backend, mais la commande publish s'exécute pour les deux dossiers: backend & frontend.

Voici mon fichier yaml:

 #build backend project
 task: DotNetCoreCLI@2
   displayName: dotnet build --configuration $(buildConfiguration)
   name: BuildBackendProject
   inputs:
     command: build
     projects: '**/backend/**/*.csproj'
     arguments: '--configuration $(buildConfiguration)'

 ... #run some tests

 #publish backend project
 task: DotNetCoreCLI@2
   displayName: dotnet publish backend --configuration $(buildConfiguration)
   name: PublishBackendProject
   inputs:
     command: publish
     projects: '**/backend/**/*.csproj'
     publishWebProjects: True
     arguments: '--configuration $(BuildConfiguration) --output 
     $(Build.ArtifactStagingDirectory)/backend'
     zipAfterPublish: True

J'ai essayé différents chemins de dossier, mais il exécute toujours deux commandes de publication.

Si je cours localement dans CMD dotnet publish backend (à partir du dossier racine du référentiel), cela fonctionne bien, mais apparemment, cela ne fonctionne pas avec le pipeline Azure.

Toutes les idées ou corrections grandement appréciées.

11
Federico Rodriguez

L'astuce consiste à utiliser les propriétés publishWebProjects/projects. Ce sont en fait mutuellement exclusifs. Si le publishWebProjects est utilisé, la valeur de la propriété projects est ignorée.

De la documentation :

Publier des projets Web *: si vrai, la tâche essaiera de trouver les projets Web dans le référentiel et exécutera la commande de publication sur eux. Les projets Web sont identifiés par la présence d'un fichier web.config ou d'un dossier wwwroot dans le répertoire.

Vous pouvez donc essayer le code suivant pour la publication:

task: DotNetCoreCLI@2
  displayName: dotnet publish backend --configuration $(buildConfiguration)
  name: PublishBackendProject
  inputs:
    command: publish
    projects: '**/backend/**/*.csproj'
    publishWebProjects: false
    arguments: '--configuration $(BuildConfiguration) --output $(Build.ArtifactStagingDirectory)/backend'
    zipAfterPublish: true
15
Herman Cordes