持续构建与发布是我们日常工作中必不可少的一个步骤,目前大多公司都采用 Jenkins 集群来搭建符合需求的 CI/CD 流程,然而传统的 Jenkins Slave 一主多从方式会存在一些痛点,比如:主 Master 发生单点故障时,整个流程都不可用了;每个 Slave 的配置环境不一样,来完成不同语言的编译打包等操作,但是这些差异化的配置导致管理起来非常不方便,维护起来也是比较费劲;资源分配不均衡,有的 Slave 要运行的 job 出现排队等待,而有的 Slave 处于空闲状态;最后资源有浪费,每台 Slave 可能是实体机或者 VM,当 Slave 处于空闲状态时,也不会完全释放掉资源。
工作流程大致为:当 Jenkins Master 接受到 Build 请求时,会根据配置的 Label 动态创建一个运行在 Docker Container 中的 Jenkins Slave 并注册到 Master 上,当运行完 Job 后,这个 Slave 会被注销并且 Docker Container 也会自动删除,恢复到最初状态。
好处:
yum -y install nfs-utils
mkdir -p /data/nfs
vi /etc/exports
/data/nfs 192.168.1.0/24(insecure,rw,sync,all_squash)
systemctl enable rpcbind
systemctl start rpcbind
systemctl enable nfs-server
systemctl start nfs-server
# systemctl status nfs-server.service
# systemctl daemon-reload
# service nfs restart
showmount -e or exportfs
权限问题(all_squash将任何用户都压缩为nfsnobody用户权限)
ll -d /data/nfs
chmod 777 /data/nfs
# 在服务端将该共享目录用户组与用户都设置为:nfsnobody
chown -R nfsnobody:nfsnobody /data/nfs
其它机器:
yum -y install nfs-utils
# showmount -e 192.168.110.213 查看
mkdir -p /data/nfs
mount -t nfs 192.168.110.213:/data/nfs /data/nfs
mount 重启失效
永久挂载https://www.cnblogs.com/wqs-Time/p/11687237.html
上面文章说/etc/fstab 最好不要挂载网络文件系统,可以挂载本地文件系统,实现永久挂载。
vi /etc/rc.local
/usr/bin/mount -t nfs 192.168.110.213:/data/nfs /data/nfs
or
vi /etc/fstab
192.168.110.213:/data/nfs /data/nfs nfs defaults 0 0
可以做任何机器上的/data/nfs创建文件,去其它机器上查看
https://github.com/jenkinsci/kubernetes-plugin
kubectl apply -f jenkins.yml
查看密码 kubectl logs jenkins-0 # b2eced072aeb462f971b24826d7c0ddf
访问:ip:30088
kubectl exec -it jenkins-0 sh
cd /var/jenkins_home/updates/default.json
or
cat /data/nfs/jenkins/updates/default.json
该文件为jenkins下载插件的源地址,改地址默认jenkins默认为:https://updates.jenkins.io/update-center.json,就是因为https的问题,此处我们将其改为http即可,之后重启jenkins服务即可。
其他国内备用地址(也可以选择使用):
https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
http://mirror.esuni.jp/jenkins/updates/update-center.json
http://updates.jenkins.io/update-center.json。 然后在服务列表中关闭jenkins,再启动,这样就能正常联网了
实测以上 3 步没用(有),只需要第一步第二步就好了
Docker kubernetes Pipeline Subversion git等
JUnit msbuild npm golang python 语言相关的选择安装
SonarScanner for Jenkins
https://jenkins.io/doc/book/pipeline/
语法: https://jenkins.io/doc/book/pipeline/syntax/
填写Kubernetes插件配置。
打开Jenkins UI并导航到
管理Jenkins -> Configure System配置系统->Cloud云-> Kubernetes,
(Cloud云 迁移到http://192.168.110.213:30088/configureClouds/)
并适当地输入Kubernetes URL和Jenkins URL,除非Jenkins在Kubernetes中运行,否则默认情况下是有效的。
基于 Jenkins 和 Kubernetes 的持续集成测试
Jenkins在k8s集群的安装、slave节点在k8s内自动创建销毁,通过pipeline实现java项目的持续集成发布。