0

尝试在标准 CI/CD 流的容器中执行 dotnet 构建时,我遇到了一个非常烦人的问题。这些问题似乎是“随机”发生的(从 Jenkins 运行时,平均大约 4/10 的构建失败,而两者之间的代码或配置没有任何更改)。我遇到的问题(在下面的堆栈跟踪中出现的问题似乎有点随机):

  1. MSB4018:CreateAppHost 任务意外失败 - 最常发生
/opt/rh/rh-dotnet31/root/usr/lib64/dotnet/sdk/3.1.103/Sdks/Microsoft.NET.Sdk/targets/Microsoft.NET.Sdk.targets(393,5): error MSB4018: The "CreateAppHost" task failed unexpectedly. [/opt/app-root/<project_path>/<project_csproj>]
/opt/rh/rh-dotnet31/root/usr/lib64/dotnet/sdk/3.1.103/Sdks/Microsoft.NET.Sdk/targets/Microsoft.NET.Sdk.targets(393,5): error MSB4018: System.IO.IOException: The process cannot access the file '/opt/app-root/<project_path>/Pse.Spr.Reports.Web/obj/Release/netcoreapp3.1/Pse.Spr.Reports.Web' because it is being used by another process. [/opt/app-root/<project_path>/<project_csproj>]
/opt/rh/rh-dotnet31/root/usr/lib64/dotnet/sdk/3.1.103/Sdks/Microsoft.NET.Sdk/targets/Microsoft.NET.Sdk.targets(393,5): error MSB4018:    at System.IO.FileStream.Init(FileMode mode, FileShare share, String originalPath) in /_/src/System.Private.CoreLib/shared/System/IO/FileStream.Unix.cs:line 120 [/opt/app-root/<project_path>/<project_csproj>]
/opt/rh/rh-dotnet31/root/usr/lib64/dotnet/sdk/3.1.103/Sdks/Microsoft.NET.Sdk/targets/Microsoft.NET.Sdk.targets(393,5): error MSB4018:    at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options) in /_/src/System.Private.CoreLib/shared/System/IO/FileStream.cs:line 252 [/opt/app-root/<project_path>/<project_csproj>]
/opt/rh/rh-dotnet31/root/usr/lib64/dotnet/sdk/3.1.103/Sdks/Microsoft.NET.Sdk/targets/Microsoft.NET.Sdk.targets(393,5): error MSB4018:    at System.IO.FileSystem.CopyFile(String sourceFullPath, String destFullPath, Boolean overwrite) in /_/src/System.IO.FileSystem/src/System/IO/FileSystem.Unix.cs:line 29 [/opt/app-root/<project_path>/<project_csproj>]
/opt/rh/rh-dotnet31/root/usr/lib64/dotnet/sdk/3.1.103/Sdks/Microsoft.NET.Sdk/targets/Microsoft.NET.Sdk.targets(393,5): error MSB4018:    at Microsoft.NET.HostModel.AppHost.BinaryUtils.CopyFile(String sourcePath, String destinationPath) [/opt/app-root/<project_path>/<project_csproj>]
/opt/rh/rh-dotnet31/root/usr/lib64/dotnet/sdk/3.1.103/Sdks/Microsoft.NET.Sdk/targets/Microsoft.NET.Sdk.targets(393,5): error MSB4018:    at Microsoft.NET.HostModel.AppHost.HostWriter.CreateAppHost(String appHostSourceFilePath, String appHostDestinationFilePath, String appBinaryFilePath, Boolean windowsGraphicalUserInterface, String assemblyToCopyResorcesFrom) [/opt/app-root/<project_path>/<project_csproj>]
/opt/rh/rh-dotnet31/root/usr/lib64/dotnet/sdk/3.1.103/Sdks/Microsoft.NET.Sdk/targets/Microsoft.NET.Sdk.targets(393,5): error MSB4018:    at Microsoft.NET.Build.Tasks.CreateAppHost.ExecuteCore() [/opt/app-root/<project_path>/<project_csproj>]
/opt/rh/rh-dotnet31/root/usr/lib64/dotnet/sdk/3.1.103/Sdks/Microsoft.NET.Sdk/targets/Microsoft.NET.Sdk.targets(393,5): error MSB4018:    at Microsoft.NET.Build.Tasks.TaskBase.Execute() [/opt/app-root/<project_path>/<project_csproj>]
/opt/rh/rh-dotnet31/root/usr/lib64/dotnet/sdk/3.1.103/Sdks/Microsoft.NET.Sdk/targets/Microsoft.NET.Sdk.targets(393,5): error MSB4018:    at Microsoft.Build.BackEnd.TaskExecutionHost.Microsoft.Build.BackEnd.ITaskExecutionHost.Execute() [/opt/app-root/<project_path>/<project_csproj>]
/opt/rh/rh-dotnet31/root/usr/lib64/dotnet/sdk/3.1.103/Sdks/Microsoft.NET.Sdk/targets/Microsoft.NET.Sdk.targets(393,5): error MSB4018:    at Microsoft.Build.BackEnd.TaskBuilder.ExecuteInstantiatedTask(ITaskExecutionHost taskExecutionHost, TaskLoggingContext taskLoggingContext, TaskHost taskHost, ItemBucket bucket, TaskExecutionMode howToExecuteTask) [/opt/app-root/<project_path>/<project_csproj>]
  1. MSB4018:GenerateDepsFile 任务意外失败
/opt/rh/rh-dotnet31/root/usr/lib64/dotnet/sdk/3.1.103/Sdks/Microsoft.NET.Sdk/targets/Microsoft.NET.Sdk.targets(192,5): error MSB4018: The "GenerateDepsFile" task failed unexpectedly. [/opt/app-root/<project_path>/<project_csproj>]
/opt/rh/rh-dotnet31/root/usr/lib64/dotnet/sdk/3.1.103/Sdks/Microsoft.NET.Sdk/targets/Microsoft.NET.Sdk.targets(192,5): error MSB4018: System.IO.IOException: The process cannot access the file '/opt/app-root/<project_release_path><*.deps.json>' because it is being used by another process. [/opt/app-root/<project_path>/<project_csproj>]
/opt/rh/rh-dotnet31/root/usr/lib64/dotnet/sdk/3.1.103/Sdks/Microsoft.NET.Sdk/targets/Microsoft.NET.Sdk.targets(192,5): error MSB4018:    at System.IO.FileStream.Init(FileMode mode, FileShare share, String originalPath) in /_/src/System.Private.CoreLib/shared/System/IO/FileStream.Unix.cs:line 120 [/opt/app-root/<project_path>/<project_csproj>]
/opt/rh/rh-dotnet31/root/usr/lib64/dotnet/sdk/3.1.103/Sdks/Microsoft.NET.Sdk/targets/Microsoft.NET.Sdk.targets(192,5): error MSB4018:    at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options) in /_/src/System.Private.CoreLib/shared/System/IO/FileStream.cs:line 252 [/opt/app-root/<project_path>/<project_csproj>]
/opt/rh/rh-dotnet31/root/usr/lib64/dotnet/sdk/3.1.103/Sdks/Microsoft.NET.Sdk/targets/Microsoft.NET.Sdk.targets(192,5): error MSB4018:    at Microsoft.NET.Build.Tasks.GenerateDepsFile.WriteDepsFile(String depsFilePath) [/opt/app-root/<project_path>/<project_csproj>]
/opt/rh/rh-dotnet31/root/usr/lib64/dotnet/sdk/3.1.103/Sdks/Microsoft.NET.Sdk/targets/Microsoft.NET.Sdk.targets(192,5): error MSB4018:    at Microsoft.NET.Build.Tasks.TaskBase.Execute() [/opt/app-root/<project_path>/<project_csproj>]
/opt/rh/rh-dotnet31/root/usr/lib64/dotnet/sdk/3.1.103/Sdks/Microsoft.NET.Sdk/targets/Microsoft.NET.Sdk.targets(192,5): error MSB4018:    at Microsoft.Build.BackEnd.TaskExecutionHost.Microsoft.Build.BackEnd.ITaskExecutionHost.Execute() [/opt/app-root/<project_path>/<project_csproj>]
/opt/rh/rh-dotnet31/root/usr/lib64/dotnet/sdk/3.1.103/Sdks/Microsoft.NET.Sdk/targets/Microsoft.NET.Sdk.targets(192,5): error MSB4018:    at Microsoft.Build.BackEnd.TaskBuilder.ExecuteInstantiatedTask(ITaskExecutionHost taskExecutionHost, TaskLoggingContext taskLoggingContext, TaskHost taskHost, ItemBucket bucket, TaskExecutionMode howToExecuteTask)
  1. NETSDK1029:无法使用 .../apphost 作为应用程序主机可执行文件,因为它不包含预期的占位符字节序列 - 我个人最喜欢 :)
/usr/lib64/dotnet/sdk/3.1.117/Sdks/Microsoft.NET.Sdk/targets/Microsoft.NET.Sdk.targets(393,5): error NETSDK1029: Unable to use '/usr/lib64/dotnet/packs/Microsoft.NETCore.App.Host.rhel.8-x64/3.1.17/runtimes/rhel.8-x64/native/apphost' as application host executable as it does not contain the expected placeholder byte sequence '63-33-61-62-38-66-66-31-33-37-32-30-65-38-61-64-39-30-34-37-64-64-33-39-34-36-36-62-33-63-38-39-37-34-65-35-39-32-63-32-66-61-33-38-33-64-34-61-33-39-36-30-37-31-34-63-61-65-66-30-63-34-66-32' that would mark where the application name would be written. [/opt/app-root/<project_csproj>]

关于现在,我想我已经浏览了所有的搜索结果,但到目前为止没有一个答案有帮助 - 所以也许在这里我会很幸运(并希望在此过程中帮助某人)。

技术数据:

Jenkins 代理
在 RHEL 8.4 和 Podman v. 3.2.3 上运行

容器数据
操作系统 - RHEL7.9 和 RHEL8.4(我都尝试过)使用来自 Jenkins 代理的挂载卷运行(包含从存储库克隆的源代码的目录)。基本 Dockerfile 设置,我使用内部存储库中的 RHEL8 基本映像 - RHEL7 是通过安装 scl-utils 等进行修改的,但总体思路是相同的

ARG rhel_version=7.9
ARG build_version=1.0.0
 
FROM <baseRHELimage>
 
ENV HOME=/opt/app-root/ \
    DOTNET_APP_PATH=/opt/app-root/
    #DOTNET_RUNNING_IN_CONTAINER=true
 
# Don't download/extract docs for nuget packages
ENV NUGET_XMLDOC_MODE=skip
 
RUN <setup yum repos>
    dnf install -y dotnet-sdk-3.1 &&\
    dnf update -y; dnf clean all

.NET 数据
使用 dotnet core 3.1 SDK

当我尝试运行 dotnet 构建时会出现这些问题。Jenkinsfile 首先在第一阶段删除所有 bin/ 和 obj/ 目录,然后为应用程序调用构建。

我尝试过的最有希望的事情:

  • 有人建议需要完全删除文件夹 bin/ 和 obj/ - 这发生在运行前的第一阶段
  • 我尝试将 dotnet publish 命令拆分为:
    dotnet restore 
    dotnet build --no-restore
    dotnet publish --no-build

... 使用dotnet build直接在构建中随机抛出这 3 个错误之一

我尝试使用不同的标志调用 dotnet 构建,例如“不并行”,认为线程可能是某种根本原因(我收到很多“进程无法访问文件,因为它正被另一个进程使用”警告 - 但这些发生了对于成功的构建 - 默认的 dotnet 重试似乎正在处理那些

有人知道我可能会错过什么吗?CI/CD 管道之前直接在 RHEL7.7 代理上运行(不使用容器)。现在我们想使用新版本的 RedHat 迁移到容器化构建 - 但这些随机重复出现的问题阻碍了我,所以如果有人有任何建议 - 非常感谢;)

4

0 回答 0