【问题标题】:How to setup CI in Azure DevOps to let it used different environment app settings?如何在 Azure DevOps 中设置 CI 以使其使用不同的环境应用程序设置?
【发布时间】:2020-12-24 12:55:08
【问题描述】:

我有一个封装为 Docker Image 的 API,并有 3 个不同的 appsettings 文件,它们是 appsettings.Development.jsonappsettings.QA.jsonappsettings.Production.json,每个都包含用于不同环境需求的连接字符串。还有一个主要的appsettings.json 用于其他常用凭据。

我使用 CI 中的环境变量替换了以下几行:

ENV ASPNETCORE_ENVIRONMENT #{environment-profile}#
...
ENTRYPOINT ["dotnet", "Api.dll", "--environment=#{environment-profile}#"]

environment-profile = 我当前 CI 的开发。

但是,我想让environment-profile 可以灵活一些吗?就像我想部署到另一个环境(如 QA)时一样。 environment-profile 不用在 CI 管道中手动更改就可以切换到 QA 吗?

有没有办法做我想做的事?或者人们在 CI/CD 管道中适应不同环境应用程序设置的正常方式是什么?

如果有人能提供帮助,谢谢!

【问题讨论】:

  • 让您的应用程序直接从环境变量中读取设置,并使用适当的环境变量集运行容器,或者将您的应用程序直接与 Azure 应用程序配置和 KeyVault 等外部配置管理存储集成。或者使用 --env ASPNETCORE_ENVIRONMENT =whatever 运行您的容器
  • @DanielMann,它直接从管道变量中读取Development,然后构建镜像,然后运行容器。
  • 就像我说的,你可以在运行容器时指定环境变量的值。

标签: azure-devops continuous-integration continuous-deployment


【解决方案1】:

如果ASPNETCORE_ENVIRONMENT 环境变量在您的 dockerfile 中定义如下。 ENTRYPOINT 中的 --environment=#{environment-profile}# 不是指 ASPNETCORE_ENVIRONMENT 环境变量。您刚刚将 --environment 分配给值 #{environment-profile}#

ENV ASPNETCORE_ENVIRONMENT #{environment-profile}#
...
ENTRYPOINT ["dotnet", "Api.dll", "--environment=#{environment-profile}#"]

我猜你在 CI 管道中正确使用了替换令牌任务,将 dockerfile 中的 #{environment-profile}# 替换为管道中定义的变量。

如果您不想更改 dockerfile,则使environment-profile 变得灵活。您可以继续使用上述方式使用替换令牌任务替换environment-profile。您需要做的就是制作您在管道中定义的变量Settabe at queue time。见下文:勾选Settabe at queue time使其可设置

然后,当您再次运行管道以部署到 QA 环境时。您只需单击变量即可将变量 environment-profile 更新为 QA

但我建议使用 ARG 而不是 ENV 并将 ARG 设置为 docker build 任务中的 Pipeline 变量:见下文:

首先,更改您的 dockerfile,如下所示:

ARG ASPNETCORE_ENVIRONMENT 
...
ENTRYPOINT ["dotnet", "Api.dll", "--environment=$ASPNETCORE_ENVIRONMENT"]

然后像下面这样添加Build Arguments,将管道变量environment-profile分配给ARG ASPNETCORE_ENVIRONMENT。

当您运行管道以部署到不同的环境时。您需要在Run Pipeline page 处相应地更新变量的值。

如果您使用的是 yaml 管道。您可以使用runtime parameters,这将使您能够在运行管道时选择环境。

parameters:
- name: Environment-Profile
  type: string
  values:
  - Development 
  - QA
  - Product

....

steps:
- task: Docker@0
  displayName: 'Build an image'
  inputs:
    containerregistrytype: 'Container Registry'
    dockerRegistryConnection: MyDoccker
    dockerFile: '**/dockerfile'
    buildArguments: 'ASPNETCORE_ENVIRONMENT="${{parameters.Environment-Profile}}"'
    defaultContext: false
    context: .

然后当您运行管道时。您可以在 UI 页面中选择要部署的环境:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-13
    • 2020-01-31
    • 2021-07-19
    • 2022-07-31
    • 2023-03-16
    相关资源
    最近更新 更多