首页 > 解决方案 > 如何在 AzureDevops 中为 Dockerfile 设置环境变量(ASPNETCORE_ENVIRONMENT)?

问题描述

我计划使用 Azure Devops 为我的 dockerized .NET Core API 做 CI/CD。我的 API 现在有appsettings.jsonappsettings.Development.json.

下面是我的 Dockerfile:

FROM mcr.microsoft.com/dotnet/core/aspnet:3.1 AS base
WORKDIR /app
EXPOSE 80

ENV ASPNETCORE_ENVIRONMENT Development

FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build
WORKDIR /src
COPY ["Api/Api.csproj", "Api/"]
RUN dotnet restore "Api/Api.csproj"
COPY . .
WORKDIR "/src/Api"
RUN dotnet build "Api.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "Api.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "Api.dll", "--environment=Development"]

可以看出,我将环境设置ASPNETCORE_ENVIRONMENTENTRYPOINT ["dotnet", "Api.dll", "--environment=Development"]. 但是,如何使其在 Azure Devops 管道中变得灵活?

例如具有不同的环境,例如developmentproduction。所以假设我有另一个appsettings.Production.json,项目会自动选择这个文件,而不是appsettings.Development.json如果我将环境设置为Production.

无论如何要这样做还是我理解这整个流程是错误的?谢谢你。

标签: c#docker.net-coreazure-devopscontinuous-integration

解决方案


在这种情况下检查答案:Inject env variable into build stage of image

您可以设置一个ARG var_nameENV 并将其引用到 ARG 变量。然后你可以在 docker build 镜像时替换这些变量$ docker build --build-arg var_name=$(VARIABLE_NAME)

例如,在 dockerfile 中添加 ARG,并让 ENV 变量引用它:

ARG SECRET
ENV ASPNETCORE_ENVIRONMENT=$SECRET

您可以分别使用停靠构建任务和停靠推送任务,因为 buildandpush 命令不能接受参数。SECRET并在您的管道中设置一个变量。

在此处输入图像描述

设置 Build ArgumentsSECRET= $(SECRET)以替换 ARG SECRET

在此处输入图像描述


推荐阅读