web-dev-qa-db-fra.com

Comment publier une application ClickOnce avec Azure Devops Pipeline sur différents environnements?

J'essaie de plusieurs jours maintenant pour publier mon application ClickOnce avec Pipeline Azure Devops. Avant d'aller en détail Voici ce que j'aimerais faire de ma vue de libération:

enter image description here

J'ai commencé avec un artefact et 2 étapes de sortie modifiant le config.deploy Fichier avec des variables de mise en scène au cours de mon étage de mise en scène et de modifier le config.deploy Fichier avec des variables de production au cours de mon stade de production. Le déploiement fonctionnait bien mais l'installation de l'application ne fonctionnait pas en raison du système de contrôle de hachage.

J'ai donc décidé de créer 2 constructions avec 2 artefacts. J'ai renommé la chute classique par un drop_staging lors de ma première construction et drop_production Pour ma deuxième construction. J'espérais que le système de construction (Msbuild) a pu sélectionner le bon app.Debug.config alors app.Release.config Fichier pendant le processus de construction et de publication.

Voici ma définition de construction

Build definition

Voici mes arguments de construction

/target:publish 
/p:ApplicationVersion=$(Build.BuildNumber) 
/p:PublishURL=http://app-staging.example.com/   
/p:UpdateEnabled=true  
/p:UpdateMode=Foreground  
/p:ProductName="App Staging" 
/p:OutputPath="$(build.ArtifactStagingDirectory)\Publish\\"

La configuration est définie sur Stabling pour la première version, puis sur production pour la deuxième construction. Bien sûr, j'ai staging et production Définition de construction dans Visual Studio. J'ai un app.config avec app.Staging.config et app.Production.config Dans mon projet.

Je ne peux pas simplement ajouter une tâche pour transformer mon fichier de configuration après la construction car je ne respecterai pas le hachage. Je devrais trouver un moyen de dire à ma construction pour utiliser le fichier de configuration de la transformation XML correcte. Je ne vois aucune autre solution ni peut-être appliquer cette transformation avant la construction? Est-il possible? Quelles sont vos solutions?

6
Bastien Vandamme

enfin, je pourrais résoudre ceci en ajoutant une transformation de fichier avant ma construction.

enter image description here

Au cas où vous auriez besoin de plus d'aide, voici mes détails YAML pour la transformation

steps:

- task: FileTransform@1

  displayName: 'File Transform: '

  inputs:

    folderPath: App.Example

    enableXmlTransform: true

    xmlTransformationRules: '-transform **\*.Staging.config -xml **\*.config'

    fileType: xml

#Your build pipeline references the ‘BuildPlatform’ variable, which you’ve selected to be settable at queue time. Create or edit the build pipeline for this YAML file, define the variable on the Variables tab, and then select the option to make it settable at queue time. See https://go.Microsoft.com/fwlink/?linkid=865971



steps:

- task: VSBuild@1

  displayName: 'Build solution'

  inputs:

    solution: Example.sln

    msbuildArgs: '/target:publish /p:ApplicationVersion=$(Build.BuildNumber) /p:PublishURL=http://staging.example.com/   /p:UpdateEnabled=true  /p:UpdateMode=Foreground  /p:ProductName="App Staging" /p:OutputPath="$(build.ArtifactStagingDirectory)\Publish\\"'

    platform: '$(BuildPlatform)'

    configuration: Staging
1
Bastien Vandamme