Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件项目可以进行持续集成
Jenkins功能包括:
1、持续的软件版本发布/测试项目。
2、监控外部调用执行的工作。
CI(Continuous integration,中文意思是持续集成)是一种软件开发时间。持续集成强调开发人员提交了新代码之后,立刻进行构建、(单元)测试。根据测试结果,我们可以确定新代码和原有代码能否正确地集成在一起。借用网络图片对CI加以理解。
CD(Continuous Delivery, 中文意思持续交付)是在持续集成的基础上,将集成后的代码部署到更贴近真实运行环境(类生产环境)中。比如,我们完成单元测试后,可以把代码部署到连接数据库的Staging环境中更多的测试。如果代码没有问题,可以继续手动部署到生产环境。下图反应的是CI/CD 的大概工作模式。
转自作者:哥本哈根月光
软件下载地址(建议):https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat/
[root@server5 ~]# rpm -ivh jdk-11.0.15_linux-x64_bin.rpm
[root@server5 ~]# yum install -y fontconfig ##安装依赖性,否则Java启动有问题
[root@server5 ~]# rpm -ivh jenkins-2.395-1.1.noarch.rpm
启动服务
[root@server5 ~]# systemctl enable --now jenkins.service ##启动较慢,因为在更新
[root@server5 ~]# netstat -antlp|grep :8080
tcp6 0 0 :::8080 :::* LISTEN 9579/java
登录
http://192.168.56.15:8080/
初始密码
[root@server5 jenkins]# cat /var/lib/jenkins/secrets/initialAdminPassword
d7c142eba0244f60a8531fa5e5ab7bc3
登录成功后点击:安装推荐插件
注:加速方法:实验时安装插件速度还可以接受,两种方法均未用到
另外一种加速方法:
按照下图操作时,有错误,在jenkins主机上安装git工具,并上传公钥至gitlab
在jenkins主机上安装git工具
[root@server5 ~]# yum install -y git
创建密钥并上传gitlab
[root@server5 ~]# ssh-keygen
复制私钥
配置ssh
设置不做主机配置校验
[root@server5 ~]# vim /etc/ssh/ssh_config
Host *
StrictHostKeyChecking no
构建触发器
关闭轮询触发
系统管理-插件管理—安装gitlab插件
配置项目触发器
配置gitlab
令牌从配置项目触发器部分复制而来
测试推送
通过docker打包数据
新建虚拟机server6:需要有自己的解析
安装jdk和git
[root@server6 ~]# rpm -ivh jdk-11.0.15_linux-x64_bin.rpm
[root@server6 ~]# yum install -y git ##git用于拉取等
配置解析:需要有仓库的解析
[root@server6 ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.56.11 server1
192.168.56.12 server2
192.168.56.13 server3
192.168.56.14 server4
192.168.56.15 server5
192.168.56.16 server6
192.168.56.171 reg.westos.org
在节点管理中添加节点
配置从节点
server6 ssh认证
关闭master节点的构建任务数:
将master节点仅仅用于调度,不用于构建任务;节省master资源,提升调度的性能
系统管理-全局安全配置–关闭git主机校验
最后测试构建,构建任务会在docker1节点上运行
在server6上安装docker-ce
[root@server6 docker]# cd /etc/yum.repos.d/
[root@server6 yum.repos.d]# cat docker.repo
[docker]
name=docker-ce
baseurl=https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/7/x86_64/stable/
gpgcheck=0
[update]
name=centos
baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos/7/extras/x86_64/
gpgcheck=0
[root@server6 yum.repos.d]# yum install -y docker-ce
修改内核参数:让流量可以通过防火墙
[root@server6 ~]# vim /etc/sysctl.d/docker.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
[root@server6 ~]# sysctl --system
[root@server6 ~]# systemctl enable --now docker
配置docker默认仓库
[root@server6 ~]# vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://reg.westos.org"]
}
[root@server6 ~]# systemctl restart docker
拷贝仓库证书
[root@k8s1 harbor]# cd /etc/docker/
[root@k8s1 docker]# scp -r certs.d/ 192.168.56.16:/etc/docker/
[root@server6 ~]# ls /etc/docker/certs.d/reg.westos.org/ca.crt
/etc/docker/certs.d/reg.westos.org/ca.crt
测试
[root@server6 docker]# docker pull nginx
登录私有harbor仓库
[root@server6 test]# docker login reg.westos.org
安装CloudBees Docker Build and Publish插件
1.在本地构建镜像
2.构建好的镜像上传至harbor仓库
配置项目构建
docker默认走tls加密的,需要证书才可以连接;
使用远程docker主机,连接URL需要证书;本机不需要证书
下图按需调整即可
测试:在server1上提交Dockerfile
[root@server1 demo]# vim Dockerfile
FROM nginx
COPY index.html /usr/share/nginx/html
[root@server1 demo]# git status -s
?? Dockerfile
[root@server1 demo]# git add Dockerfile
[root@server1 demo]# git commit -m "add Dockerfile"
[main 8034141] add Dockerfile
1 file changed, 2 insertions(+)
create mode 100644 Dockerfile
[root@server1 demo]# git push -u origin main
Counting objects: 4, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 350 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To [email protected]:root/demo.git
85c9da3..8034141 main -> main
Branch main set up to track remote branch main from origin.
此时gitlab会主动触发jenkins构建任务,观察jenkins的任务输出
CICD流程:
user ->git push -> gitlab -> webhooks trigger -> jenkins ->docker plugins -> build image and push registy ->tigger docker_test -> ssh remote exec docker run
新建测试虚拟机server7:类生成环境,做测试
在server7上安装docker-ce
[root@server7 docker]# cd /etc/yum.repos.d/
[root@server7 yum.repos.d]# cat docker.repo
[docker]
name=docker-ce
baseurl=https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/7/x86_64/stable/
gpgcheck=0
[update]
name=centos
baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos/7/extras/x86_64/
gpgcheck=0
[root@server7 yum.repos.d]# yum install -y docker-ce
修改内核参数
[root@server7 ~]# vim /etc/sysctl.d/docker.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
[root@server7 ~]# sysctl --system
启动服务
[root@server7 ~]# systemctl enable --now docker
拷贝仓库证书
[root@k8s1 harbor]# cd /etc/docker/
[root@k8s1 docker]# scp -r certs.d/ 192.168.56.16:/etc/docker/
[root@server6 ~]# ls /etc/docker/certs.d/reg.westos.org/ca.crt
/etc/docker/certs.d/reg.westos.org/ca.crt
jenkins安装ssh插件
进入系统配置,添加ssh主机,交付至远程:
新建docker_test项目
当test项目成功运行后触发docker_test项目
docker ps -a 停止的也算