R2019B 和 R2017B 之间的 Azure Devops 管道 Matlab 命令错误

Azure Devops Pipeline Matlab Command Bugs between R2019B and R2017B

我有一个工作的 Azure CI 管道使用 Matlab 2019 进行构建代码生成操作。Matlab 项目是为 Matlab 2017B 编写的。它还 builds/work 在本地使用 Matlab 2017b 或 2019b。

环境:

它是一台自托管的 windows 10 台计算机,连接到 Azure Pipelines,具有多个版本的 Matlab。 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[=11=].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

信息:

这是我的发现和尝试。

  1. 检查文件的访问权限

这是我访问 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)
  1. 将 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 年失败,因为它没有文件的访问权限?

  1. 尝试在本地复制 matlab 上的错误

我在本地打开了 Matlab GUI 和 matlab CLI,并尝试了上述有问题的行,没有任何问题。

addpath(pwd); 
  1. 正在尝试在线解决更新pathdef.m

我尝试执行这些步骤,没有任何变化:

  1. https://www.mathworks.com/matlabcentral/answers/102432-why-do-i-receive-a-warning-regarding-missing-pathdef-m-when-starting-matlab-7-14-r2012a

  2. https://www.mathworks.com/help/matlab/matlab_env/when-path-not-successfully-set-at-startup.html

  1. 我尝试了一位用户的建议(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 在行为上的区别?关于如何修复此错误的任何想法?

1st File get access denied, second print as regular.

通过self-hosted代理访问azure devops管道中的本地文件,它通过服务帐户而不是个人帐户访问文件,因此您可以从计算机本地运行命令,并获取azure devops 管道中的错误。

您需要检查文件中服务帐户的权限C:\Program Files\MATLAB\R2017b\toolbox\local\pathdef.m,然后重试。

更新1

您可以在文件C:\Program Files\MATLAB\R2019b\toolbox\local\pathdef.m中查看服务帐号的权限,并在C:\Program Files\MATLAB\R2017b\toolbox\local\pathdef.m.

中配置相同的权限

根据您分享的 link,您似乎需要 r+x 权限而不是 r

更新2

我们可以将代理服务帐号更改为您的所有者帐号。

步骤:在代理机上打开服务,搜索代理服务账号,如下图,将账号名和密码改成你自己的,然后就会使用这个账号进行操作。

嗯, 在使用另一个浮动许可证(而不是节点锁定许可证)安装第二个版本的 MATLAB2017B 后,我找到了一个修复程序。当 运行 它在 Azure 管道上时,我拥有所有访问权限。

cat "C:\Program Files\MATLAB\R2017b\toolbox\local\pathdef.m"
cat "C:\Program Files\MATLAB\R2017b2\toolbox\local\pathdef.m"
cat "C:\Program Files\MATLAB\R2019b\toolbox\local\pathdef.m"

第一个仍然被拒绝访问。 但是其他两个有效。 R2017B 和 R2019B。 因此,我的 MATLAB 项目像使用 MATLAB 2019b 版本一样打开和构建。

我不确定这是访问问题还是许可问题,请参阅下面的参考资料。但它有效。 ^^。任何人都可以随意加入,据我所知。

参考: https://unix.stackexchange.com/questions/411376/ls-is-giving-a-permission-denied-error-even-though-it-worked https://www.unix.com/unix-for-dummies-questions-and-answers/41487-got-basic-doubt-cat-file-permissions.html https://desk.zoho.com/portal/simlabsoftware/en/kb/articles/what-it-is-the-difference-between-standalone-and-floating-license#:~:text=Floating%20license%3A,the%20number%20of%20concurrent%20usershttp://kb.mit.edu/confluence/pages/viewpage.action?pageId=4273647