Bitbucket自托管Windows Runner报MSB1009错误求助
Bitbucket自托管Windows Runner流水线问题排查与解决
问题描述
1. MSBuild找不到解决方案文件
流水线配置文件bitbucket-pipeline.yml内容:
pipelines: default: - step: name: Build and test runs-on: - "windows" script: - nuget.exe restore .\MyProject.sln -source "https://api.nuget.org/v3/index.json;http://nuget.mycompany.com/nuget" - msbuild .\MyProject.sln
执行时抛出错误:
MSBUILD : error MSB1009: Project file does not exist. Switch: .\MyProject.sln
已通过ls命令确认解决方案文件存在,尝试绝对路径后问题依旧。
2. 代码克隆环节GitCredentialManager异常
克隆代码时出现未处理异常:
Cloning into 'C:\Windows\system32\a\bin\..\t\3adbb782-beda-5972-b527-6102602fdbb8\1684652729856\build'... Unhandled Exception: System.ComponentModel.Win32Exception: The directory name is invalid at System.Diagnostics.Process.StartWithCreateProcess(ProcessStartInfo startInfo) at System.Diagnostics.Process.Start() at GitCredentialManager.GitProcess.get_Version() at GitCredentialManager.GitProcessConfiguration.GetCanonicalizeTypeArg(GitConfigurationType type) at GitCredentialManager.GitProcessConfiguration.TryGet(GitConfigurationLevel level, GitConfigurationType type, String name, String& value) at GitCredentialManager.GitConfigurationExtensions.TryGet(IGitConfiguration config, String name, Boolean isPath, String& value) at GitCredentialManager.Settings.<GetSettingValues>d__5.MoveNext() at System.Linq.Enumerable.FirstOrDefault[TSource](IEnumerable`1 source) at GitCredentialManager.Settings.TryGetSetting(String envarName, String section, String property, String& value) at GitCredentialManager.Settings.GetTrace2Settings() at GitCredentialManager.CommandContext..ctor(String[] argv)
解决方案
针对GitCredentialManager克隆异常
修改Runner工作目录
自托管Runner默认工作目录在C:\Windows\system32,该目录权限限制较多,容易引发路径异常。修改为非系统目录:- 打开Runner安装目录下的
config.toml配置文件 - 修改
workdir字段为自定义路径(如D:\BitbucketRunner\Workspaces) - 保存配置后重启Bitbucket Runner服务
- 打开Runner安装目录下的
更新Git Credential Manager
卸载当前版本的Git Credential Manager,安装最新稳定版,确保与Runner使用的Git版本兼容。检查Git环境变量
确认git.exe所在路径已添加到系统PATH环境变量,且Runner服务的运行用户有权限访问该路径。
针对MSBuild找不到解决方案文件问题
强制切换到代码克隆目录
在脚本开头添加目录切换命令,确保后续操作在正确的仓库目录执行:script: - cd $BITBUCKET_CLONE_DIR - nuget.exe restore .\MyProject.sln -source "https://api.nuget.org/v3/index.json;http://nuget.mycompany.com/nuget" - msbuild .\MyProject.sln使用环境变量拼接绝对路径
用Bitbucket内置环境变量生成解决方案文件的绝对路径,避免相对路径解析问题:script: - nuget.exe restore "$BITBUCKET_CLONE_DIR\MyProject.sln" -source "https://api.nuget.org/v3/index.json;http://nuget.mycompany.com/nuget" - msbuild "$BITBUCKET_CLONE_DIR\MyProject.sln"指定MSBuild完整路径
若系统中存在多个MSBuild版本,直接指定对应.NET Framework版本的MSBuild路径:script: - cd $BITBUCKET_CLONE_DIR - nuget.exe restore .\MyProject.sln -source "https://api.nuget.org/v3/index.json;http://nuget.mycompany.com/nuget" - & "C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\MSBuild\Current\Bin\msbuild.exe" .\MyProject.sln
内容的提问来源于stack exchange,提问作者Zahid Cakici
相关产品推荐
相关产品推荐

