【发布时间】:2025-12-25 02:50:11
【问题描述】:
我有一个可用的 Azure CI 管道,使用 Matlab 2019 构建代码生成操作。Matlab 项目是为 Matlab 2017B 编写的。它还可以使用 Matlab 2017b 或 2019b 在本地构建/工作。
环境:
这是一台自托管的 Windows 10 计算机,使用多个版本的 Matlab 连接到 Azure Pipelines。 Matlab 2017B 是一个节点锁定许可证。 Matlab2019B 是浮动许可证。
动作:
我将脚本使用的 Matlab 版本更改为 2017B 并运行我的脚本以匹配生产服务器规范。
steps:
- powershell: Write-Host '##vso[task.prependpath]C:\Program Files\MATLAB\R2017B\bin'
- task: RunMATLABCommand@0
inputs:
command: myscript
预期:
它运行没有问题。或者,脚本中有 1-2 个兼容性问题,我可以随时调试。
结果:
它甚至不能在初始化时设置 Matlab 路径。 (这是打开 matlab 的第 1 步,甚至不是我的脚本的一部分),因此它无法访问标准的 Matlab 函数,并且一切都中断了..
C:\WINDOWS\system32\cmd.exe /D /S /C "C:\agentS\_work\_tasks\RunMATLABCommand_28fdff80-51b4-4b6e-83e1-cfcf3f3b25a6\0.2.6\bin\run_matlab_command.bat "cd('C:\agentS\_work\_temp'); command_1ae12f20_c2aa_4b55_9c6c_6da1d64c4a30""
C:\Program Files\MATLAB\R2017b\toolbox\local\pathdef.m: Cannot open file: permission denied.
[Warning: MATLAB did not appear to successfully set the search path. To recover for this session of MATLAB,
type "restoredefaultpath;matlabrc". To find out how to avoid this warning the next time you start MATLAB,
...
Undefined function or variable 'pwd'.
Error in buildSequence (line 1)
addpath(pwd);
Error in command_1ae12f20_c2aa_4b55_9c6c_6da1d64c4a30 (line 2)
buildSequence
ERROR: MATLAB error (starter line:1202) Exit Status: 0x00000001
信息:
这是我的发现和尝试。
- 检查文件的访问权限
这是我对 matlab 2019、2017 的 2 个文件的访问权限。
-rw-r--r-- 1 NARCISS Administrators 39652 Aug 17 13:35 pathdef.m (2017B Matlab)
-rw-r--r-- 1 NARCISS Administrators 45073 Sep 14 17:11 pathdef.m (2019B Matlab)
- 将 Azure 和本地访问权限与文件进行比较
我知道从 从我的计算机本地运行,从非管理员模式的终端:
cat "C:\Program Files\MATLAB\R2017b\toolbox\local\pathdef.m"
cat "C:\Program Files\MATLAB\R2019b\toolbox\local\pathdef.m"
这两个文件都打印到终端。
并且 从带有自托管 Windows 计算机(与本地计算机相同)的 Azure Pipeline 运行此程序,从非管理员模式的终端:
cat "C:\Program Files\MATLAB\R2017b\toolbox\local\pathdef.m"
cat "C:\Program Files\MATLAB\R2019b\toolbox\local\pathdef.m"
第一个文件被拒绝访问,第二个打印正常。
所以这可以解释为什么脚本在 2019 年运行良好, 但在 2017 年失败,因为它无权访问该文件?
- 尝试在本地复制 matlab 上的错误
我在本地打开了 Matlab GUI 和 matlab CLI,并尝试了所说的有问题的行,没有任何问题。
addpath(pwd);
- 尝试在线解决方案更新 pathdef.m
我尝试执行这些步骤,没有任何变化:
- 我尝试了一个用户建议(thx),但我不明白为什么 ls 可以打印文件,同时又无法访问它。文件有读权限,文件夹有可执行权限?
2020-10-02T14:02:11.6188893Z "-------------------------------------------------------"
2020-10-02T14:02:11.6473143Z ls: C:\Program Files\MATLAB\R2017b\toolbox\local\pathdef.m: Permission denied
2020-10-02T14:02:11.6486563Z 885076267 -rwxr-xr-x 1 AI*****$ Administrators 39330 Oct 1 14:10 C:\Program Files\MATLAB\R2017b\toolbox\local\pathdef.m
2020-10-02T14:02:11.6511012Z "-------------------------------------------------------"
2020-10-02T14:02:11.6702428Z 1671000 -rw-r--r-- 1 AI****$ Administrators 45073 Sep 14 17:11 C:\Program Files\MATLAB\R2019b\toolbox\local\pathdef.m
2020-10-02T14:02:11.6722373Z "-------------------------------------------------------"
问题:
我有点卡住了。我不明白本地 CLI 和 Azure 管道 CLI 的行为差异?关于如何修复此错误的任何想法?
【问题讨论】:
标签: matlab azure-devops continuous-integration command-line-interface azure-pipelines