Jenkins通过PowerShell发布dotnet项目缺失文件致API无法访问求助
问题根因排查与解决方案
- 先修正错误的执行命令:你第二条测试命令重复输入了
dotnet publish,属于语法错误,会导致命令执行异常,首先修正为合法命令:dotnet publish -c Release --self-contained -r win10-x64 --output "你的目标发布路径" - 清理构建缓存后执行全量发布:避免本地/服务器上的增量构建缓存导致文件漏发,统一使用以下发布脚本,不需要分开执行restore、build,publish命令会自动完成前置步骤:
dotnet clean -c Release dotnet publish -c Release --output "你的目标发布路径" --force --no-cache
- 核对运行环境差异:
分别在VS包管理器控制台和Jenkins执行的PowerShell脚本中加入dotnet --info命令,对比两者的SDK版本、运行时版本、NuGet源配置,版本不一致会直接导致发布逻辑差异,很多时候本地VS使用的是高版本SDK,而Jenkins服务器上安装的是低版本SDK,隐式文件匹配规则存在差异 - 核对权限与工作目录:
确认Jenkins运行Agent的账户对工作目录、NuGet全局缓存目录、项目依赖的所有文件路径有读写权限;同时确认Jenkins拉取代码时完整拉取了所有依赖项目、静态资源文件,没有因为gitignore规则或拉取不全导致源文件缺失 - 显式指定待发布文件规则:
不要依赖VS的隐式文件匹配逻辑,在项目.csproj文件中为所有确认缺失的文件显式添加发布复制配置,示例如下:<ItemGroup> <Content Update="Config/**/*.json"> <CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory> </Content> <None Update="Docs/**/*.md"> <CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory> </None> </ItemGroup> - 输出诊断日志定位问题:
在发布命令中添加-v diag参数输出全量诊断日志,对比VS发布日志和Jenkins发布日志中缺失文件的处理逻辑,可以直接定位到文件被排除、未找到的具体原因:dotnet publish -c Release --output "你的目标发布路径" -v diag
内容的提问来源于stack exchange,提问作者abos
相关产品推荐
相关产品推荐

