gitlab-cicd常见问题
1.权限禁止
报错:warning:unable to access '/home/gitlab-runner/.config/git/attributes':Permission denied
权限问题,重新针对文件所在的最近一层文件夹赋予可执行权限
chmod -R 777 file
2. 流水线只能一个一个job去执行,不可并行打包的问题
主要是因为concurrent
设置了1,只能有1个job并行执行,把concurrent
参数改一下,比如改成6,就可以一次并行6个job了
vi /etc/gitlab-runner/config.toml
3. gitlab-runner 打包的直接地址在/home/gitlab-runner,是存放在系统盘,项目多的时候系统盘会爆,所有建议把数据放在数据盘;需要把打包目录改一下,修改方式如下:
3.1 全局修改方法
vi/etc/systemd/system/ gitlab-runner.service
把基础目录改成:/var/www/gitlab-runner-build-dir
重启runner
gitlab-runner restart
注意需要给gitlab-runner-build-dir
目录权限:chmod -R 777 gitlab-runner-build-dir
3.2 局部修改,针对每个runner修改
修改文件
vi /etc/gitlab-runner/config.toml
重置执行目录:/var/www/gitlab-runner-build-dir
重启runner
gitlab-runner restart
注意如果还没有赋予权限,需要给gitlab-runner-build-dir目录权限:chmod -R 777 gitlab-runner-build-dir
4. 环境打包报错:error: you need to resolve your current index first ,need merge
主要是版本回退的时候,打包会导致vm上的打包跟实际分支回退的代码不同步导致的合并冲突
例如下面打包testing_1.11.0_all
分支代码时,发现vm的cicd目录分支代码冲突了
进入到打包主机的打包目录中查看
cd /var/www/html/ecpdoc
git status
发现一堆修改的件
解决方法
4.1. 先把当前分支强制切换到其他正常的分支(比如:haha分支
)
git checkout -f haha
然后查看切换到haha
分支后是否还有文件修改,如果没有就跳过,执行第2步
发现强制切换haha
分支还是有修改冲突
再次切换到另外一个正常的分支(比如:lala分支
)
git checkout -f lala
然后查看切换到lala
分支后是否还有文件修改,如果没有修改,比如像下面这样,那么就可以执行第二步;如果还有就重复上一步直到强制切换到一个正常的分支为止
4.2. 当前分支正常后,需要清理有问题的分支缓存
比如上面有问题的分支是test_1.1.0_all
,执行命令
git branch -D testing_1.11.0_all
4.3. 再切换到需要打包的分支,testing_1.11.0_all
分支,查看分支修改状态发现内容恢复正常
git checkout testing_1.11.0_all
git status
注意:如果以上清缓存方式,还是不行的话,可以使用以下命令试试
git checkout . && git clean -xdf
4.4. 重新启动cicd打包,即可打包成功
5. 报错:fatal: reference is not a tree
需要检查.gitlab-ci.yml文件格式是否有误,很可能是没有加流水线
6. cicd操作报错:fatal:could not read Username for 'xxxx':No such device or address
主要是因为没有账号/用户名信息,无法进行操作
解决方式
(1) 用ssh的方式拉取代码,在vm上面设置ssh秘钥信息
(2) 如果用http的方式拉取代码的话,在.git/config文件路径写上账号名称+密码的信息,例如:http://用户名称:密码@yourgitlab.com/xxx
vi .git/config
7. cicd报错
报错:cannot create directory at 'src/assets/plugins/laydate':Permission denied
解决方式
进入到gitlab-runner-build-dir
,把对应的缓存文件删除即可 rm -f xxx
8.给gitlab设置root权限
ps aux|grep gitlab-runner
#查看当前runner用户
sudo gitlab-runner uninstall
#删除gitlab-runner
gitlab-runner install --working-directory /home/gitlab-runner --user root
#安装并设置--user(例如我想设置为root)
sudo service gitlab-runner restart
#重启gitlab-runner
ps aux|grep gitlab-runner
#再次执行会发现--user的用户名已经更换成root了
9.报错:Host key verification failed
主要是我使用了ssh的方式拉取代码而主机上面,gitlab-runner
用户下的ssh密钥失效或者没有设置,需要设置一下:
su gitlab-runner
git config --global user.name "xxx"
git config --global user.email "你的邮箱地址"
使用命令cd ~/.ssh
进入~/.ssh
文件夹,输入vi id_rsa.pub
打开id_rsa.pub
文件,复制其中所有内容。打开项目所在的网页,点击SSH公钥,公钥栏把你刚才复制的内容粘贴进去就OK了。
可以使用ssh -T git@xxxx
命令来测试连接是否畅通:
10.报错: insufficient permission for adding an object to repository database .git/objects
进入到项目目录/var/www/html/public-agent-project/public-agent,然后给.git/objects
添加权限
sudo chmod 777 -R .git/objects
11.gitlab-runner执行shell脚本时报错 sudo: no tty present and no askpass program specified
由于帐号并没有开启免密码导致的,假设当前帐号为aaa切换到root下
(1)打开sudoers
vi /etc/sudoers
(2) 在 sudoers 文件中添加免密码
aaa ALL = NOPASSWD: ALL
本次报错中是我的gitlab-runner
账号需开启免密码,因此需要添加如下设置
gitlab-runner ALL=(ALL) NOPASSWD: ALL
12.fatal: unable to auto-detect email address
一般情况下执行以下命令即可,其中email和name是设置ssh的时候使用的email和name
git config --global user.name "xxx"
git config --global user.email "你的邮箱地址"
由于是在gitlab-runner
的cicd
流水线执行中报错的,需要先切换到gitlab-runner
用户,再执行上面的2个命令
su gitlab-runner
git config --global user.name "xxx"
git config --global user.email "你的邮箱地址"