【发布时间】:2017-12-14 20:26:42
【问题描述】:
通过设置环境变量DOTNET_SKIP_FIRST_TIME_EXPERIENCE=true,似乎apparent that you can save some time doing .NET Core builds。我发现 CentOS 7 和 Debian Jessie Linux 发行版并非如此。
我有一个 Jenkins 从属 Docker 镜像,Jenkins 使用它来构建 .NET Core 服务,我的镜像标签是 jenkins.slave.dotnet.image。
Jenkins Docker 插件使用jenkins.slave.dotnet.image 在触发构建时启动从属容器。 Jenkins Docker 插件可以访问jenkins.slave.dotnet.image 所在的 Docker 主机。
在我的jenkins.slave.dotnet.image 的 Dockerfile 中,我像这样设置环境变量:
ENV NUGET_XMLDOC_MODE skip
ENV DOTNET_SKIP_FIRST_TIME_EXPERIENCE true
一切正常,除了dotnet 命令忽略了那些环境变量,请参阅 .NET Core 服务的 Jenkins 构建的输出,如果环境变量 DOTNET_SKIP_FIRST_TIME_EXPERIENCE=true,您不应该在图像中看到带圆圈的文本正在被dotnet cmds 检查:
连接 (docker exec -it jenkins.slave.dotnet.container bash) 到使用 jenkins.slave.dotnet.image 的容器,您可以看到 DOTNET_SKIP_FIRST_TIME_EXPERIENCE 正确设置为“true”:
dotnet --info 的输出:
这是我的 Jenkins 从属 Docker 映像 (jenkins.slave.dotnet.image) 的 Dockerfile,我的 Jenkins 主机运行容器来执行 .NET Core 构建(这是执行 dotnet publish -c Debug -v m 的环境 ):
FROM tsl.devops.jenkins.slave.basic.docker.image
MAINTAINER Brian Ogden
#############################################
# .NET Core SDK
#############################################
RUN yum install -y \
libunwind \
libicu
RUN curl -sSL -o dotnet.tar.gz https://go.microsoft.com/fwlink/?linkid=848821
RUN mkdir -p /opt/dotnet && tar zxf dotnet.tar.gz -C /opt/dotnet
RUN ln -s /opt/dotnet/dotnet /usr/local/bin
#add Trade Service Nuget Server
RUN mkdir -p /home/jenkins/.nuget/NuGet
COPY /files/NuGet.Config /home/jenkins/.nuget/NuGet/NuGet.Config
RUN chown -R jenkins /home/jenkins/.nuget
RUN chgrp -R jenkins /home/jenkins/.nuget
RUN chmod 600 /home/jenkins/.nuget/NuGet/NuGet.Config
RUN chmod 700 /home/jenkins/.nuget/NuGet
#speed up dotnet core builds
ENV NUGET_XMLDOC_MODE skip
ENV DOTNET_SKIP_FIRST_TIME_EXPERIENCE true
#############################################
这里是一个 .NET Core 微服务构建工件的示例,它构建在我刚刚在上面分享的 Jenkins Slave Docker 环境中:
FROM tsl.devops.dotnetcore.base.image
MAINTAINER Brian Ogden
#############################################
# .NET Service setup
#############################################
ARG ASPNETCORE_ENVIRONMENT
WORKDIR /app
COPY ./src/TSL.Bom.Service/bin/Debug/netcoreapp1.1/publish .
ENV ASPNETCORE_URLS http://+:5001
ENV ASPNETCORE_ENVIRONMENT $ASPNETCORE_ENVIRONMENT
EXPOSE 5001
ENTRYPOINT ["dotnet", "TSL.Bom.Service.dll"]
#############################################
【问题讨论】:
-
1) 哪个
dotnetCLI 命令导致它构建 NuGet 哨兵缓存?来源让我认为这无关紧要,但有助于开始故障排除... 2) 你特别提到了 CentOS,你是在暗示它只在 CentOS 中发生,还是你只是在观察CentOS 中的行为? -
哦,
dotnet --info的输出是什么? -
@vcsjones 我更新了我的答案,当我的 Docker Slave OS 也是 Debian:Jessie 时发生了这种情况。我怀疑我的消息来源会影响这一点......我想这是可能的,但我目前不知道如何。关于 dotnet --info 输出,我将在明天发布,谢谢。
-
@vcsjones 我将 dotnet --info 的输出添加到我的问题中
-
你能分享你的 Dockerfile 吗?
标签: c# .net linux jenkins .net-core