这部分主要开始围绕CI/CD的排错进行.
0x00.gogs相关问题
1.gogs初始化到/data目录时Permission denied (安装harbor后)
如图,尝试过给chmod 777 的权限了,还是不行,而且手动在/data下创建文件夹 是完全没问题的. 创建之后仍然报一样的错. 说明是哪里设置了阻碍. 搞清楚映射关系之后才发现之前想的方向错了…. 过程就不多说了
更新:
导致原因是cent7的selinux ,参考 . 因为自己测试的虚拟机是新的…忘记关selinux了.真是坑爹.setenforce 0.永久关参考k8
2.gogs关机之后不会自动启动.
这个照理说是不应该的,参考的办法都比较老旧. 还是得参考一下官方github的issue. 这样比较稳妥. 待后续更新
0x01.docker相关问题
1.docker17.x版本安装
cent下默认yum install -y docker 的版本是1.12 (最近遇到有些jenkins插件不支持docker-daemon <1.25的) 加之17.6版本已经很稳定了.所以提供一波更新方法. (k8也不用去改cgroups这鬼了) 参考官方 ,这是最快最稳的,
1 | #0.删除老旧的 |
2.docker0网卡172.17.0.1冲突
这种情况应该说很少见…因为经过测试发现需要同时满足两个情况 : (2需要继续确认)
- 安装docker前,主机ip不是172.17.x.x 网段. (这样docker0会默认选择
172.17.0.1作为ip) - 安装docker后,主机ip被人为改成了172.17.x.x网段…并且172.17 ip段的网关正好是
171.17.0.1.
那么一般网关是不会给你改的..就需要手动修改docker0的地址. 但是这个并不是直接修改个ip这么简单.需要做以下工作: (参考blog cent7.4为例)
ip link set dev docker0 down停止docker0, 然后reboot重启机器 ,注意这里非常坑,网上都没有提到,或者说重启网络或者docker就行了,实际是无效的.. 重启后docker0才会消失yum -y install bridge-utils安装网桥工具. 这个地方有个很坑的是,如果docker0跟网关冲突,那你如果不先停掉docker0,重启网络服务只能获得大概5s左右的网. 也就没法安装,所以有了 第0步..删除网桥(如果有第0步可以跳过),查看
1
2$ brctl delbr docker0
$ brctl show #检验是否为空创建新网桥,设置网桥ip,启动
1
2
3$ brctl addbr bridge0
$ ip addr add 172.18.0.1/16 dev bridge0 #ip可以自行修改,注意/后正确
$ ip link set dev bridge0 up #启动然后修改docker启动配置,重新启动docker (启动配置不同OS不一样,不要乱参考.改错地方是不能生效的)
1
2
3
4
5
6
7$ vi /usr/lib/systemd/system/docker.service
#修改启动这行为
#ExecStart=/usr/bin/dockerd-current -b bridge0 \
#重新启动.报错注意\后不能有空格
$ systemctl daemon-reload
$ systemctl restart docker
(*.重装) 如果上面的方法你觉得不妥,选择重装docker亦可. (镜像&容器默认会保存下来,这个不用担心.)
1 | $ yum list installed | grep docker |
你会发现,原本默认选择172.17.0.1的docker0,如果识别到你的主机ip是172.17.x.x ,会自动避开. 推断2得以验证 (确定需要看源码.)
0x02.jenkins相关问题
1.docker中同一主机无法访问gogs仓库
进入jenkins容器内部查看发现本质是因为jenkins无法curl到映射到外网的端口,比如gogs的UI页面是ip:10080 ,jenkins是无法curl ip:10080成功的. 会提示Host unreachable . 原因不明,估计是docker内容器通信的问题.不能直接使用这种方法?
暂时的解决方案是分开jenkins和gogs. 因为gogs+harbor是不在k8上的目前. 所以jenkins整合进k8即可.
2.docker中jenkins不会开机自动重启
首先推荐jenkins构建在k8中,这样就不会存在这种烦恼. 其次注意jenkins启动时间比较长….(因为java虚拟机).所以重启后不要急着访问,等个1分钟左右才会完全加载好. 所以最好k8中放置1个以上的jenkins-master.以免出现长时间服务中断.
3.maven打包构建时速度巨慢,掉线 (*)
这个非常重要,而且不解决极其坑爹….我这边虚拟机性能网络弱的时候直接会把docker都卡死. 首先千万不要下坑爹的maven:slim 镜像,官方实例多用的这,这是用的精简Linux+没任何依赖的库. 全都是构建的时候再去下. 去maven官方库下时间.可能会让你崩溃 通用. maven-slim 也悠着用,虽然生产中应该是这个最好,因为需要什么下什么,但是一定需要先配下载源… 天朝还是用普通maven:3.5.2-jdk-8 类似这种完整版吧. (自带常见包.大小700Mb+)
4.gogs webhook+pipeline时丢失pom文件
这个问题也非常之坑,折腾了好久. 长话短说…. 首先不要随便使用pipeline的deleteDir() 命令. 这会清空workspace 目录. (这个目录实际是maven镜像里面的 /var/jenkins_home/workspace) 目录. 下面放了你创建的各种jenkins job 的文件如图.
这里可以看到, workspace下面的项目都是空的了. 就会报这样的错.
分析原因可能如下:
jenkins的gogs插件之所以可以不需要设置其他参数就能直接简单实现webhook本质还是依赖git-hook本身.只不过这里当你设置webhook地址为http://192.168.157.92:8080/gogs-webhook/?job=java1 的时候,它会自动去帮你在对应的maven容器的/var/jenkins_home/workspace/java1/.git/ 下创建git钩子. 所以当你删除了workspace,那么就把git钩子也删除了,那么虽然gogs每次会触发自动推送,但是就再也找不到你对应目录的触发器了. 也就无法完成构建.




