写在前面
很久以前买了台云服务器,因为一直有事没去折腾,最近有时间了把自己做的东西部署了上去。为了后续维护方便,打算装个jenkins在服务器,这一装不要紧,直接把我几个晚上的空闲时间给献祭了,写这篇文章也是为了避免大家踩我的坑。
我部署的是一个web应用,我是干前端的,自然用到了node,要在linux安装node,问题就出在这,我会在下方详细展开
正文
首先简单过一遍在Linux安装Jenkins的步骤吧,我刚开始也是和大家一样网上到处找攻略,后面发现其实去官网是最好的
https://www.jenkins.io/download/
进入这个页面,就可以看到官方其实已经把很多安装方法都写好了
两边都可以,找到自己需要的,直接点进去就行了,像我是Ubuntu系统,我肯定选Ubuntu的教程
可恶,居然这么详细,之前找教程帖子的我宛若一个小丑🤡(别忘了装Jenkins之前本地要有Java环境)
需要提一下的是,照官方的步骤来可能装不上,原因基本上都是超时,可以反复装几次试试,实在不行可以用docker挂镜像用docker装,这个基本是没问题的
多的就不提了,接下来进入正题,我们前端部署代码到Jenkins上,肯定要在Linux装node,而现在装node基本都会用nvm去管理,就是先得装nvm,一般都会直接克隆nvm的代码到本地,但是直接克隆的话会克隆到当前用户的.nvm文件夹下面,后面配权限的时候会比较麻烦,这里建议在克隆的时候后面跟一个公用的文件夹
克隆完之后我们进入nvm的文件夹
然后依次执行两个文件
. install.sh
. nvm.sh
第一个是安装,第二个是配置nvm的命令
好了,问题就出在这,即便更改了nvm克隆的文件夹,nvm的环境变量依旧是设置的当前用户下的.nvm文件夹,我们可以执行命令查看
echo $NVM_DIR
-> /root/.nvm (我当前是root角色)
会有什么问题?我们打开install.sh看一眼就知道了
vim install.sh
也就是说,我们执行install后,nvm会被安装在当前用户下的.nvm文件夹中,而我们上面提到了,为了方便,我们把nvm克隆到了公用的文件夹内,所以这就乱了套了。这还不要紧,即便我们之后给nvm被安装的那个文件夹授予777权限,jenkins依旧无法执行对应的权限,比如yarn,或者npm。也可能是因为我用的是root角色,但是我估计大部分人登自己的私人服务器一般也会直接用root
解决办法
改一下NVM_DIR就行了
export NVM_DIR="你要配置的文件位置,推荐与我们克隆的位置保持一致"
执行完后再去执行install.sh,如果哪里配置错了,可以直接删除nvm的文件夹重新安装就行了,不需要执行apt remove
还没结束,这样只是理清了文件关系,我们还没有配置权限,jenkins依旧无法执行yarn && npm,接下来需要去配置权限,我们使用nvm安装指定的node版本,然后nvm文件夹下会多一个文件夹
进入version/node就能看到我们安装的版本了,可以直接给整个目录设置权限,也可以进去给bin执行命令配置权限,这个自己决定,添加一个用户组,把jenkins用户(jenkins安装成功后就会有这个角色)添加进去
groupadd 组名 -g 组ID
gpasswd -a 角色名 组名
然后,设置文件夹所有者
chown -R jenkins:组名 node文件夹
添加权限
chmod -R 700 node文件夹
完成,这样jenkins就可以执行yarn或者npm的命令了
提一嘴,我们前端一般打包完可能会将打包后的文件移到指定的文件夹内,让代码在web上生效,所以,我们通常会在jenkins的shell里加几行命令
cp -r dist/* /usr/share/nginx/html/
rm -rf dist
第一个是拷贝命令,第二个是删除命令。我们执行第一条命令的时候很可能也会报错没有权限,这时候有两种情况
1. 没有执行cp命令的权限
2. 没有在nginx目录的权限,无法在nginx创建或者更改文件
如果是第一种情况,就需要给jenkins配置cp命令的权限,印象里cp命令好像在/usr/bin下面,可以自己找一下。如果是第二个,其实完全可以按照我们上面的配置权限的流程来做(注意别让nginx自己没了权限就行)
其实说到底,遇到这个坑还是因为对Linux不够熟悉,Linux是程序员的基本功,我还需要多多学习啊