M U*_*M U 5 caching gitlab .net-core
我有这样的 dockerfile:
FROM microsoft/aspnetcore-build:2.0 AS build-env WORKDIR /app
# Copy csproj and restore as distinct layers
COPY *.csproj ./
COPY *.config ./
RUN dotnet restore --configfile NuGet.config
# Copy everything else and build
COPY . ./ RUN dotnet publish -c Release -o out
# Build runtime image
FROM microsoft/aspnetcore:2.0
WORKDIR /app
COPY --from=build-env /app/out .
ENV ASPNETCORE_URLS http://+:5000
ENTRYPOINT ["dotnet", "AuthService.dll"]
Run Code Online (Sandbox Code Playgroud)
我无法在 Gitlab 构建上得到这个。
整个 Nuget 缓存位于build-env
下面~/.nuget/packages
,但 Gitlab 不知何故看不到这一点(我想它只检查最后一个容器。
知道如何解决吗?由于没有 NuGet 缓存,构建时间如此之长......
dotnet restore
默认情况下,将恢复的依赖项存储在.nuget/packages
用户主目录的目录中(/home/user1
在 Linux 或C:\Users\user1
Windows 上)。用户的主目录超出了 GitLab 缓存的范围。这就是为什么您将无法缓存存储在 NuGet 默认目录中的依赖项。
但!dotnet restore
附带一个--packages
选项,您可以使用该选项指定在还原操作期间将还原的包放置在何处。如果你跑
dotnet restore --configfile NuGet.config --packages .nuget
Run Code Online (Sandbox Code Playgroud)
.nuget
将在当前目录中创建一个目录,从而使其可用于缓存和复制操作。您甚至不需要担心告诉程序恢复的依赖项存储在哪里,因为该信息也会在恢复过程中保存。
我在代码审查上创建了一篇关于我遇到的相关问题的帖子。您很有可能会在那里找到有价值的东西。
我的问题是在 docker 容器中使用 Gitlab CI 时。因此,答案可能与您的预期略有不同。
通过尝试很多事情,我发现问题出在哪里。Gitlab CI 将该文件夹放在用户的(主)目录.nuget
下。~/
但是,当您启动 CI 时,您启动的文件夹不是该~/
文件夹,并且找不到.nuget
. 为了使其在 中工作.gitlab-ci.yml
,我做了以下工作:
# Some stuff before
build-dotnet:
image: microsoft/dotnet:2.0-sdk-jessie
stage: build
cache:
paths:
- nuget
script:
- (if [ -d ./nuget ]; then mv nuget ~/.nuget; else echo "No nuget cache available"; fi); # Fail on first attempt, but will work after.
- # etc.
- mv ~/.nuget nuget
# Some stuff after
Run Code Online (Sandbox Code Playgroud)
我希望它有帮助
归档时间: |
|
查看次数: |
7771 次 |
最近记录: |