一、Jenkins通过ssh远程linux权限问题
-
背景
要实现项目的自动化测试环境搭建,本地测试已通过,需要部署到Jenkins上,实现自动集成构建测试
-
问题描述
Jenkins通过ssh已经成功连接到linux系统,做好配置后进行集成构建,出现以下报错,提示Squish没有认证,无法使用,可实际上安装的时候已经通过密钥进行认证,而且本地可正常使用
错误一:
Squish license is missing or malformed: Couldn't find a license file in '/home/wondfo/'.
****************************************************************
* This is an UNLICENSED version of Squish. Please install your *
* license key provided by froglogic. For assistance, please *
****************************************************************
错误二
./runner.sh: line 13: /home/squish-for-qt-6.7.1/bin/squishrunner: Permission denied
错误三
bash: line 2: ./runner.sh: Permission denied
等等...........
-
考虑原因
在本地上搭建环境(安装软件,创建文件夹、脚本文件、写用例等)一直用的root权限,但Jenkins的ssh远程权限只能添加普通用户权限,导致通过Jenkins执行脚本出现权限不足的问题,因为远程执行的脚本中调用了Tomcat、squish等程序,所有权限不足的问题逐步出现,挨个解决,最后索性将所有用到程序、文件、文件夹都修改权限,问题算是完全解决了
-
解决问题
对调用的程序、执行的文件、文件夹 均做修改权限的操作
1.通过命令 ls -ld filename 查看当前文件或程序的所有权
![](https://img-blog.csdnimg.cn/direct/d138f19f8f054bdfb5e8b602263e8776.png)
2.,对于脚本 可以使用 命令sudo chown username filename 将filename的用户权限修改为username
![](https://img-blog.csdnimg.cn/direct/e8d7e97600de400e9a30e317486ea433.png)
3.对于脚本 可以使用 命令sudo chgrp username filename 将filename的用户组权限修改为username
![](https://img-blog.csdnimg.cn/direct/05fe307d18aa4acfb60870d3eb0bee97.png)
4.对于文件夹,将文件夹下所有文件的用户/用户组权限均修改,可以使用-R参数来遍历文件夹,sudo chown -R username filen/sudo chgrp -R username file
二、Jenkins通过ssh远程win10权限&环境变量问题
-
背景
win10 环境下的编译环境,本地使用脚本编译已通过,需要部署到Jenkins上,实现自动集成编译
-
问题描述
Jenkins通过ssh已经成功连接到win10系统,做好配置后进行集成构建,出现编译失败
错误一:
error: call of overloaded 'push_back(uchar)' is ambiguous
param.push_back((uchar)WfTrack::EOperateTracks_Pause);
![](https://img-blog.csdnimg.cn/direct/8486a652b1c44c84bb3475ba5a7cf66c.png)
错误二
mingw32-make : E:\\src\modules\nng\lib/libnng.dll: file not recognized: File format not recognized
![](https://img-blog.csdnimg.cn/direct/8c58cb9990c14f31ac0436876b047c87.png)
-
考虑原因
本地编译成功,通过远程编译失败,考虑原因
1、环境变量问题,win10下搭建环境时,会将QT相关的环境变量添加至path,但是远程可能因为权限问题无法获取到要使用的环境变量,所以需要将环境变量直接添加在编译脚本
2、权限问题,Jenkins的ssh远程权限只能添加普通用户权限,本地的一些文件或文件夹对于远程的用户没有读写修改的权限,导致编译失败,可尝试将远程用户添加至过程文件访问权限中
-
解决问题
1.将环境变量直接添加在编译脚本中,powershell格式
$env:PATH = "$env:PATH;E:\Qt\Qt5.12.8\5.12.8\mingw73_64\bin"
$env:PATH = "$env:PATH;E:\Qt\Qt5.12.8\Tools\mingw730_64\bin\"
$env:PATH = "$env:PATH;E:\Qt\Qt5.12.8\Tools\mingw730_64\bin\"
![](https://img-blog.csdnimg.cn/direct/9ce43c6e32774bb5bba2cad3901d19e0.png)
设置环境变量后,上面错误二,没有再包,再次编译又报错误一。
2.将编译的过程文件/文件夹都增加远程用户角色,按照以下引导,对所有要添加用户权限的文件进行修改
![](https://img-blog.csdnimg.cn/direct/298fad51dc984939b20ae6af8233c721.png)
![](https://img-blog.csdnimg.cn/direct/5170f28e22d94b65a67d1cc1b1e629c2.png)
![](https://img-blog.csdnimg.cn/direct/6748ffdb9b564938b422d0ad222cda1d.png)
![](https://img-blog.csdnimg.cn/direct/72e38706910c49b89a883fd5d995aa32.png)
修改完之后再在Jenkins上进行远程编译,可以编译-打包通过