C# 如何在AzureDevops中为Dockerfile设置环境变量(ASPNETCORE_环境)?
我计划使用Azure Devops为我的Docked.NET核心API制作CI/CD。 我的API现在有C# 如何在AzureDevops中为Dockerfile设置环境变量(ASPNETCORE_环境)?,c#,docker,.net-core,azure-devops,continuous-integration,C#,Docker,.net Core,Azure Devops,Continuous Integration,我计划使用Azure Devops为我的Docked.NET核心API制作CI/CD。 我的API现在有appsettings.json和appsettings.Development.json 下面是我的Dockerfile: FROM mcr.microsoft.com/dotnet/core/aspnet:3.1 AS base WORKDIR /app EXPOSE 80 ENV ASPNETCORE_ENVIRONMENT Development FROM mcr.microsof
appsettings.json
和appsettings.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\u environment
,并将入口点[“dotnet”、“Api.dll”、“--environment=Development”]
。然而,如何在Azure Devops管道中使其灵活
例如,拥有不同的环境,如开发
和生产
。假设我有另一个appsettings.Production.json
,如果我将环境设置为Production
,项目将自动拾取此文件,而不是appsettings.Development.json
到底有没有这样做,或者我对整个流程的理解是错误的?
谢谢。在这种情况下检查答案: 您可以设置一个
ARG变量名并将ENV引用到ARG变量。然后,您可以在docker构建映像时替换这些变量$docker build--build arg var\u name=$(VARIABLE\u name)
例如,在dockerfile中添加ARG,并让ENV变量引用它:
ARG SECRET
ENV ASPNETCORE_ENVIRONMENT=$SECRET
您可以单独使用dock build任务和dock push任务,因为buildandpush命令不能接受参数。并在管道中设置变量SECRET
设置生成参数SECRET=$(SECRET)
以替换ARG SECRET
在这种情况下,请检查答案:
您可以设置一个ARG变量名并将ENV引用到ARG变量。然后,您可以在docker构建映像时替换这些变量$docker build--build arg var\u name=$(VARIABLE\u name)
例如,在dockerfile中添加ARG,并让ENV变量引用它:
ARG SECRET
ENV ASPNETCORE_ENVIRONMENT=$SECRET
您可以单独使用dock build任务和dock push任务,因为buildandpush命令不能接受参数。并在管道中设置变量SECRET
设置生成参数SECRET=$(SECRET)
以替换ARG SECRET
与入口点一起使用CMD。您将这个“--environment=Development”
放在CMD中。如果不传递任何内容,CMD就像一个默认占位符一样工作,否则将传递任何内容。您看过这篇文章吗?在那里,一切都描述得很好;)与ENTRYPOINT一起使用CMD。您将这个“--environment=Development”
放在CMD中。如果不传递任何内容,CMD就像一个默认占位符一样工作,否则将传递任何内容。您看过这篇文章吗?在那里,一切都描述得很好;)你查过我的答复了吗?有帮助吗?你查过我的回复了吗?有帮助吗?