c# - 如何在 AzureDevops 中为 Dockerfile 设置环境变量(ASPNETCORE_ENVIRONMENT)?
问题描述
我计划使用 Azure Devops 为我的 dockerized .NET Core 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.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_ENVIRONMENT
为ENTRYPOINT ["dotnet", "Api.dll", "--environment=Development"]
. 但是,如何使其在 Azure Devops 管道中变得灵活?
例如具有不同的环境,例如development
和production
。所以假设我有另一个appsettings.Production.json
,项目会自动选择这个文件,而不是appsettings.Development.json
如果我将环境设置为Production
.
无论如何要这样做还是我理解这整个流程是错误的?谢谢你。
解决方案
在这种情况下检查答案:Inject env variable into build stage of image
您可以设置一个ARG var_name
ENV 并将其引用到 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
推荐阅读
- batch-file - 第二选择的BATCH问题
- r - 在 R 中使用 timevis 创建嵌套子组
- r - 使用 biomaRt 从基因列表中获取 Entrez 基因 ID
- php - 棘轮推送服务器教程问题
- intellij-idea - 从 IntelliJ IDEA 2018.2.5 x64 将 ear 文件部署到 weblogic 12.1.3
- r - 使用管道将多个文件读入单个列表
- terminal - VSCode 无法打开终端
- r - R如何决定向量的模式?
- botframework - 如何使用 SDK4.0 在机器人中添加对话框
- apache-zeppelin - 如何在不同的主机上运行 zeppelin 0.8.0 解释器?