使安装包在转换后可供下载。

问题描述 投票:0回答:1

我在 Azure Devops 中有一个发布管道。它有3个阶段。

我的构建创建了一个带有 Web 部署包的工件。

在第 1 阶段,它在运行 Azure Agent 的本地机器上进行部署到 IIS。这很好用。我还对连接字符串进行了变量转换。

下一阶段是部署到Pre Prod。但是这台机器对我来说是不可用的,所以实际的部署是通过emailFTP把安装包发给客户来完成的。所以我需要的是运行一个变换,并使WebDeploy.zip文件可供我下载。

换句话说。我希望能够下载两个带有正确转换设置的包: PreProd.zip 和 Prod.zip

阶段3和阶段2一样,但有Prod变量。

azure-devops azure-pipelines-release-pipeline
1个回答
0
投票

我不知道你的应用程序和appsettings.json是怎样的。但你可以一次为所有的env准备一个包。使用检查部分JSON配置提供者 此处. 那么你只需要设置(或要求设置)。ASPNETCORE_ENVIRONMENT envrioment变量。

所以你需要三个文件。

  • appsettings.dev.json
  • appsettings.preprod.json)。
  • appsettings.prod.json

我不知道你是如何解决转换问题的,但你可以使用例如 代币 为此,你的预生产配置可能是这样的:

你的prod前配置可能是这样的:

{
  "ConnectionStrings": {
    "BloggingDatabase": "#{Preprod.ConnectionString}#"
  },
}

而你的prod文件

{
  "ConnectionStrings": {
    "BloggingDatabase": "#{Prod.ConnectionString}#"
  },
}

现在如果你添加 PreprodConnectionStringProd.ConnectionString 在你的管道中的变量,你会得到变量值的令牌替换,这样你就可以在所有环境中重用同一个包。这样一来,你就可以在所有环境中重复使用同一个包。

EDIT:

你也可以考虑使用 安全文件. 还请检查 DownloadSecureFile任务。

编辑

另一种选择是 JSON变量替换 它就像token替换一样,但在部署前完成,所以含有秘密的文件不会作为工件存储。


0
投票

对于Web部署包,有一个xx.SetParameters.xml文件存储了必要的值,所以你可以在这些阶段更新这个文件,然后通过FTPSSHEmail等发送必要的文件到目标服务器。

配置Web包部署的参数

另一方面,对于ASP.NET核心项目来说,设置文件每到环境变量是比较好的简单方法。(Krzysztof的回答)

更新1:

有一些扩展可以用于transform。https:/marketplace.visualstudio.comsearch?term=transform&target=AzureDevOps&category=All%20categories&sortBy=Relevance。

如。XDT Transform

© www.soinside.com 2019 - 2024. All rights reserved.