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
信息:
这是我的发现和尝试。
- 检查文件的访问权限
这是我访问 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 在行为上的区别?关于如何修复此错误的任何想法?
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%20users。
http://kb.mit.edu/confluence/pages/viewpage.action?pageId=4273647
我有一个工作的 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
信息:
这是我的发现和尝试。
- 检查文件的访问权限
这是我访问 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 在行为上的区别?关于如何修复此错误的任何想法?
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%20users。 http://kb.mit.edu/confluence/pages/viewpage.action?pageId=4273647