Search code examples
asp.net-coreazure-devopsazure-web-app-service

Replace tokens during release in Azure DevOps


I have a release pipeline to deploy an ASP.NET Core web app. This was created from a simple ASP.NET web deploy template on Azure DevOps. The web deploy step just points to the .zip file of the artifact drop folder and deploys the app.

I would like to replace tokens in my appSettings.Staging.json file for example: enter image description here

I am using Token Replace marketplace tool: https://github.com/qetza/vsts-replacetokens-task and setting it up in a pretty standard way as documented: enter image description here

and setting up my variables in devops: enter image description here

I would like the "DummyValue" to be replaced with "ActualValue".

Since the artifact is a zip file, I added the "File Extractor" task to unzip the the archive and then had Token Replace task target that folder. According to the logs, it seems like the Token Replace did end up replacing a value, but I can't access those resources directly to make sure.

Since I am now extracting files, I pointed the web deploy task to the new folder where the unarchived files reside, and it successfully deployed, but the resulting appsettings.Staging.json file still doesn't have the token replaced. In the logs of the deploy job I saw this:

2021-03-28T07:36:19.6554561Z Package deployment using ZIP Deploy initiated. 2021-03-28T07:38:08.8457706Z Successfully deployed web package to App Service.

Seems like it's still using ZIP deployment, and I am not sure where it's finding the zip file as there's nothing in the DevOps logs for that.

Just wondering if anybody else has experienced this and what the best way is to go with this.


Solution

  • It seems that you are using this extension: XDT Transform. After installing it in organization, there are 2 external tasks: XDT tranform task and Replace Tokens task in release pipeline.

    There is appSettings.Staging.json file in my repo and it will be published into zip artifact. enter image description here

    In my release pipeline, the path to this artifact is $(System.DefaultWorkingDirectory)/Drop/drop/aspnet-core-dotnet-core.zip. enter image description here

    If I want to replace the DummyValue token in appSettings.Staging.json file of this artifact, creating pipeline variable DummyValue and using the Extract Files task, Replace Tokens task, and Archive Files task, finally the release will archive the replaced folders to replace original zip artifact, so it is done. so it is done. The unnecessary PowerShell task is used to output the replaced file. enter image description here enter image description here