0

我正在 Azure 中为 .NetCore 3.1 应用程序创建 CI 管道并添加 Docker“buildandpush”任务。我有 2 种情况,如果我只运行 .Netcore 任务(恢复、构建、测试、发布)我的构建成功没有任何错误,如果我禁用以上 .NetCore 任务并且只运行 docker(buildAndpublish) 任务我的构建成功和图像推送进入我的 ACR,但如果我启用上述 .NetCore 任务以及 Docker 任务,则会在此处引发错误。
谁能告诉我 .netCore 任务的构建定义,我在做正确的事情吗?

错误

C:\Program Files\dotnet\sdk\3.1.100\NuGet.targets(123,5): 错误:访问路径 'C:\src\RINWeb\obj\RINMVC.csproj.nuget.dgspec.json' 是否认。[C:\src\RINWeb\RINMVC.csproj]

构建失败。

C:\Program Files\dotnet\sdk\3.1.100\NuGet.targets(123,5): 错误:访问路径 'C:\src\RINWeb\obj\RINMVC.csproj.nuget.dgspec.json' 是否认。[C:\src\RINWeb\RINMVC.csproj]

0 Warning(s)
1 Error(s)

Time Elapsed 00:00:01.34 命令 'cmd /S /C dotnet build "RINMVC.csproj" -c Release -o /app/build' 返回一个非零代码:1

[错误]进程 'C:\Program Files\Docker\docker.exe' 失败,退出代码为 1

我的码头文件是:

FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-nanoserver-1809 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443
FROM mcr.microsoft.com/dotnet/core/sdk:3.1-nanoserver-1809 AS build

WORKDIR /src
#####COPY ["RINWeb/RINMVC.csproj", "RINWeb/"]
COPY ["RINMVC.csproj", "RINWeb/"]

RUN dotnet restore "RINWeb/RINMVC.csproj"
#####COPY . .
COPY . RINWeb/
WORKDIR "/src/RINWeb"
RUN dotnet build "RINMVC.csproj" -c Release -o /app/build

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

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

1 回答 1

1

您可以使用两个代理作业来运行您的管道。在代理作业上运行 dotnet 任务,第二个运行 docker 任务。

如果您使用的是经典视图构建管道。您可以单击管道上的 (...)添加代理作业。请检查下面的屏幕截图。

在此处输入图像描述

然后在 agent job2 中运行 docker tasks 并配置 agent job2 依赖 agent job1 的成功运行。请检查下面的屏幕截图。

在此处输入图像描述

如果您使用的是 yaml 管道。您可以定义多个作业。你可以在这里查看更多信息。

更新:

这是在 Microsoft 中构建和推送到 ACR 的示例。您不需要使用 dotnet 任务来构建和发布您的项目,只是为了检查构建是否成功,因为您的停靠文件只是重复相同的 dotnet 命令。您只能使用 docker 任务来构建停靠文件。

或者您可以修改您的 dockerfile 以仅使用最后一个复制步骤从 dotnet publish 任务的输出文件夹复制已发布的文件(从 dockerfile 中删除 dotnet restore、build、publish 步骤),因为您的 dotnet 任务已经完成了 rerere build 和发布任务。

于 2020-01-13T09:45:52.587 回答