我正在Azure中为.NetCore 3.1应用程序创建CI管道,并添加Docker“ buildandpush”任务。我有2种情况,如果我仅运行.Netcore任务(还原,生成,测试,发布),则生成成功没有任何错误,如果我在.NetCore任务上方禁用并且仅运行docker(buildAndpublish)任务,则生成成功并推送了映像到我的ACR中,但是如果我在.NetCore任务上方与Docker任务一起启用,则会抛出错误here。
谁能告诉我.netCore任务的Build定义,我在做正确的事情。
错误
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)
经过的时间00:00:01.34 命令“ cmd / S / C dotnet build“ RINMVC.csproj” -c Release -o / app / build“返回非零代码:1
我的docker文件是:
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"]
答案 0 :(得分:1)
您可以使用两个代理作业来运行管道。在代理作业上运行dotnet任务,在第二个作业上运行docker任务。
如果您使用的是经典视图构建管道。您可以点击管道上的(...)以添加代理作业。请检查下面的屏幕截图。
然后在代理作业2中运行docker任务,并将代理作业2配置为依赖于代理作业1的成功运行。请检查下面的屏幕截图。
如果您正在使用yaml管道。您可以定义多个作业。您可以检查here了解更多信息。
更新:
这里是在Microsoft中构建并推送到ACR的示例。您不需要使用dotnet任务来构建和发布项目,只需检查构建是否成功即可,因为您的ockfile只是重复相同的dotnet命令。您只能使用docker任务来构建停靠文件。
或者您可以修改dockerfile,使其仅具有最后一个复制步骤,以便从dotnet发布任务的输出文件夹中复制发布的文件(从dockerfile中删除dotnet还原,构建,发布步骤),对于您的dotnet任务,已经完成了retore的构建和发布任务。