在azure devops中:在将docker容器部署到azure时,如何将管道变量作为appsettings注入?

在azure devops中:在将docker容器部署到azure时,如何将管道变量作为appsettings注入?,azure,docker,.net-core,azure-devops,dockerfile,Azure,Docker,.net Core,Azure Devops,Dockerfile,我在azure上部署的docker容器中设置appsettings时遇到问题 我的设置: 我有一个.NET核心应用程序 我的构建管道构建一个docker映像,并将其推送到azure上的我的容器注册表 我的发布管道根据标签提取图像并将其部署到azure web应用程序 我需要将映像部署到多个环境。每个环境都有不同的应用程序设置。我在管道“变量选项卡”中定义了变量: 我需要将它们发送到我的azure以便可以使用。 当我手动添加它们时,它可以工作,但我想从变量中提取它们,所以我只需要添加一次。(

我在azure上部署的docker容器中设置appsettings时遇到问题

我的设置:

  • 我有一个.NET核心应用程序
  • 我的构建管道构建一个docker映像,并将其推送到azure上的我的容器注册表
  • 我的发布管道根据标签提取图像并将其部署到azure web应用程序
我需要将映像部署到多个环境。每个环境都有不同的应用程序设置。我在管道“变量选项卡”中定义了变量: 我需要将它们发送到我的azure以便可以使用。

当我手动添加它们时,它可以工作,但我想从变量中提取它们,所以我只需要添加一次。(见截图1) 编辑:上面的屏幕截图有效。但这不是我要找的。因为每次添加或删除新的appsettings时,我都必须编辑appsettings管道。此外,我认为在此处删除应用程序设置只会将其留在已部署的环境中。

我正在部署现有docker映像,因此无法编辑appsetting.json文件。我也不会为每个环境创建不同的docker文件


有没有办法做到这一点?如何提取/列出管道中定义为docker变量或appsettings的变量?

您可以在管道中定义管道变量,并将其附加到特定的范围(读取阶段)或发布范围(应用于所有阶段)

例如,我有一个定义为
Environment ConnectionString
的变量,它在两个范围内定义:

  • 范围测试:“环境连接字符串=服务器=测试数据库;…”
  • 范围QA:“环境连接字符串=服务器=QA db;…”
  • 分数发布:“日志记录标志=已启用”
然后您可以在“应用程序和配置设置”中进行设置,如

请注意使用这些变量的$(变量名)语法


当管道的不同阶段运行时,它们会自动拾取特定于该阶段的值并应用于azure应用程序设置。

您可以为不同阶段设置不同的变量组。这些变量组应具有定义为不同值的相同变量

例如:
Dev
变量组和
Release
组都有变量
Port
RequestTimeout
。。。
开发
中的
端口
为4999,而
发布
中的
端口
可能为5000。我们可以将这些组链接到特定的阶段范围,
Dev
阶段的变量组和
Release
阶段的
group

[![在此处输入图像描述][1][1]

确保所有的阶段都有相同的设置,然后用不同范围的对应值替换具有的变量

更新:

管道中的每个阶段都是独立的,它们代表不同的环境。因此,我们必须逐个定义阶段设置或阶段内任务的设置。我们必须逐个定义
appsettings
输入。
[1] :

您不应该将配置文件烘焙到容器中。让应用程序从环境变量中读取应用程序设置,并在Azure应用程序设置中定义适当的环境变量。或者使用Azure应用程序配置并在Azure中管理这些值。您所说的“将它们烘焙到容器中”是什么意思。我的问题是如何在发布过程中设置它们,因此我不需要为每个环境设置appsetting-production.json appesting-acceptance.json等。配置值应在Azure web应用中设置并作为环境变量加载,或者,您的应用程序可以配置为直接与Azure Key Vault和Azure App Configuration集成,后者提供了加载和使用应用程序配置的替代方法。您的连续交付管道不是管理应用程序配置的合适位置。那么您建议如何为不同的环境设置应用程序设置?您有多个Azure Web应用程序,对吗?还是临时插槽?您在适当的作用域上设置了应用程序设置,或者维护了多个KeyVault或Azure应用程序配置实例。谢谢,但是是否有其他方法可以自动列出配置设置中定义的所有变量?我不想在每个环境中编辑该列表(参见我的第三个屏幕截图),如果您愿意切换到yaml管道,当然可以。是的,但是我仍然需要定义“应用程序设置”部分中的每个设置和每个变量,对吗?我的问题是,是否有一种方法可以自动提取所有变量。@Enrico希望我的更新能够解决您的难题。如果我能帮上什么忙,请随时告诉我。恐怕我正在寻找更自动化的解决方案。一个接一个地列出所有变量并将它们逐个传递给容器不是我想要的。(参见我的黑十字截图)很抱歉,我的解决方案无法工作,但正如我所知,在devops服务中,没有可用的功能可以直接从我的变量中提取它们。。。也许你可以在我们的用户语音论坛上谈论你想要什么。
- ConnectionString $(EnvironmentConnectionString)
- Logging $(logging_flag)