Je rencontre des problèmes pour déployer un Azure WebJob à l'aide de Visual Studio Team Services (VSTS).

Le WebJob semble être déployé avec succès, mais il brise le site Web Azure hébergé dans le même App Service! Je n'ai pas ce problème si je déploie à l'aide de VS2013.

Voici ma tâche de construction qui génère le package de déploiement WebJob:

Build task - generate Azure WebJob deployment package

Et voici ma tâche de déploiement:

Deploy WebJob task

Il n'y a aucune erreur lorsque je déploie Azure WebJob. Si je vais sur le portail Azure, je vois que le WebJob est là et qu'il s'exécute avec succès. Les fichiers WebJob sont copiés dans le dossier wwwroot\App_Data\jobs\triggered\RemoveExpiredDids comme prévu, mais le problème est que certains autres fichiers seront copiés dans le dossier wwwroot\App_Data\bin, ce qui cassera le site Web existant déjà déployé dans cet App Service! !!

J'ai donc décidé de découvrir pourquoi cela se produisait. Après avoir téléchargé et extrait le package de déploiement, j'ai vu qu'il y avait 2 dossiers (app_data et bin) et le fichier du planificateur (settings.job):

WebJob deployment package

Cela explique pourquoi certains assemblys sont copiés dans le wwwroot\App_Data\bin de l'App Service. La chose étrange est que cela ne se produit pas lors du déploiement à partir de VS2013 !!! J'ai jeté un coup d'œil dans le journal MSBuild et j'ai trouvé la ligne suivante:

L'objet dirPath ([nom du service d'application] \ bin) a été ignoré en raison de la directive de saut «SkipBinFolderOnDeploy».

En conclusion, le dossier bin est inclus lors du déploiement d'Azure WebJob à partir de VSTS mais est exclu lors du déploiement à partir de VS2013.

Ma question est donc la suivante: comment empêcher le déploiement du dossier bin lors de l'utilisation de VSTS? Existe-t-il un paramètre / indicateur MSBuild pour ce faire?

9
Rui Jarimba 15 août 2017 à 10:52

2 réponses

J'ai enfin pu le réparer, merci @ starain-MSFT de m'avoir pointé dans la bonne direction. J'ai dû faire quelques changements mineurs, cependant. Voici la tâche qui crée le package de déploiement:

Generate Azure WebJob deployment package

Arguments MSBuild:

/ p: DeployOnBuild = true / p: WebPublishMethod = FileSystem / p: DeployDefaultTarget = WebPublish / p: Configuration = $ (BuildConfiguration) / p: OutputPath =. \ bin \ /p:publishUrl="$(build.artifactstagingdirectory)\temp \ WebJob "

La différence ici par rapport à la réponse @ starain-MSFT est que j'ai dû ajouter le paramètre /p:OutputPath=, sinon j'obtiendrais l'erreur suivante:

La propriété OutputPath n'est pas définie pour le projet

Après avoir généré le package, je supprime le dossier bin et le zip (cela réduit le temps de construction).

Voici ma tâche de déploiement:

Deploy Azure WebJob using VSTS

Veuillez noter que $(DeploymentPackagePath) est le chemin d'accès au fichier zip qui contient le package de déploiement, comme mentionné précédemment. Peu importe si vous déployez le package sous forme de fichier zip ou si vous le décompressez et déployez le dossier, cela fonctionne dans les deux sens.

1
Rui Jarimba 19 oct. 2018 à 11:33

J'ai également eu un problème avec ce problème particulier.

La dernière méthode que j'ai trouvée utilise Paramètres d'opération de déploiement Web, -skip: Directory = (dans ce cas, il s'agirait de -skip: Directory = '\\ bin') lorsque vous créez votre tâche de déploiement azure dans la définition de version (arguments supplémentaires). J'ai vu que cela exclut en effet le dossier bin des actions de mise à jour (résultat).

Faites-moi savoir si cela vous aide de quelque manière que ce soit.

3
Vlad Apetre 9 oct. 2017 à 09:30