六 jenkins
6.1 jenkins 简介

-
Jenkins是开源CI&CD软件领导者, 提供超过1000个插件来支持构建、部署、自动化, 满足任何项目的需要。
-
Jenkins用Java语言编写,可在Tomcat等流行的servlet容器中运行,也可独立运行
CI(Continuous integration持续集成)持续集成强调开发人员提交了新代码之后,立刻进行构建、(单元)测试。

CD(Continuous Delivery持续交付) 是在持续集成的基础上,将集成后的代码部署到更贴近真实运行环境(类生产环境)中

6.2 部署 jenkins
软件下载:Download and deploy

jenkins需要部署在新的虚拟机中
!WARNING
jenkins需要部署在新的虚拟机中,建议最少4G内存,4核心cpu
依然克隆
欣赏教科书的分类: 



bash
#安装依赖包
[root@jenkins ~]# dnf install fontconfig java-21-openjdk git -y
#安装jenkins
[root@jenkins ~]# dnf install jenkins-2.476-1.1.noarch.rpm
#启动jenkins
[root@jenkins ~]# systemctl enable --now jenkins.service
#查看原始密码
[root@jenkins ~]# cat /var/lib/jenkins/secrets/initialAdminPassword
b081aab333d24530a640e91579fdc6fc
部署插件





!NOTE
建议修改admin的密码,在admin的设置中修改即可

如果安装不下来: 



把对应的压缩包拉出来
展示重新安装:






6.3 jenkins 与gitlab的整合


这个错误的原因是因为本机没有gitlab上的sshkey
bash
[root@jenkins ~]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa
Your public key has been saved in /root/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:WYl62PK9yE5QWuWRr6IKT7BJwkYpvmn1lAQa7W2js5s root@jenkins.timinglee.org
The key's randomart image is:
+---[RSA 3072]----+
| ... o. |
| +.. +.o |
|.+. .. + +. |
|= ..+.B o . |
|.+o.ooB S . |
|.o+*o =... |
| ++ +. .o.. |
|. =. .o . . |
| E+. .+ . |
+----[SHA256]-----+
[root@jenkins ~]# cat /root/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDA1imI8HrTo8mc457kNDBPmGvSYSdEeXKE977DL1vTzG5KdICUn5Si3reddc1BUe6F+sKO1bKuh7f7QqZ79fbJVl2xOJjbf4d9XJKQQQs06aa72p2HfNVDdgA+u0vOPJ6NY2hmatmU98GtiBzAXbbq+qcK4hT28fS39GWNWjHhoKpvglxMMR+W6xWNQHMj/9aN9v7ggW9jRPmENXKbY+8k0j0sPOfapQvH2nqUbRBfl6Fv26ExerPLKeNzhWzNOSOWoz47OFF186W12z+NtV3RDBjxJK77hzkHCCT245kzfuY3ZN8f25aS5+RMr7eIfzWlmoaKHCVC3ltOz6LCRwV/ldKuBYSKwjN7HqYbhjCWIVA0pqQUdDGgYvCJiHA8zjzPYDMyNcCKhAlWbj3FwYhLfdkiO4UQXkNbosJtqLRVcKf04FoaeRKEQm1lYMaVvCn603g/H2srN5e/9Tf+ydPVGHMqrGHFyMiGrHGDEp6HxFP8L6mLylvnhZ0a9HVuDJ0= root@jenkins.timinglee.org
把此密钥添加到gitlab上即可
添加密钥凭据 


添加完成后报错依然存在,因为ssh首次连接主机是需要签名认证,需要手动输入yes
还有两台主机之间一定要做好解析
bash
方法1
[root@jenkins ~]# vim /etc/ssh/ssh_config
Host *
StrictHostKeyChecking no
方法2


完成此设定即可解决 

6.4.genkins 中gitlab触发器的部署与使用
在 Jenkins 中配置 GitLab 触发器可以实现代码提交或合并请求时自动触发 Jenkins 流水线
6.4.1 安装插件
如果需要使用gitlab触发器需要安装gitlab插件。目前使用官方源下载比较吃力,可以直接本地部署插件即可


6.4.2.部署自动触发
插件加载完毕后在jenkins中选择之前构建的项目并配置自动触发

在gitlab中设定







6.4.2 测试自动触发
bash
[root@gitlab .ssh]# cd /root/timinglee/
[root@gitlab timinglee]# echo hello test > testfile
[root@gitlab timinglee]# git add testfile
[root@gitlab timinglee]# git commit -m "testfile v1"
[main a32ab7f] testfile v1
1 file changed, 1 insertion(+)
create mode 100644 testfile
[root@gitlab timinglee]# git push -u origin main
枚举对象中: 4, 完成.
对象计数中: 100% (4/4), 完成.
使用 4 个线程进行压缩
压缩对象中: 100% (2/2), 完成.
写入对象中: 100% (3/3), 269 字节 | 269.00 KiB/s, 完成.
总共 3(差异 1),复用 0(差异 0),包复用 0
To 172.25.254.50:root/timinglee.git
dcc1c33..a32ab7f main -> main
分支 'main' 设置为跟踪 'origin/main'。
七.持续集成持续交付企业示例
打开harbor虚拟机;
建立docker虚拟机





排错发现docker版本有问题;
装这个版本:


为了让容器构建镜像可以持续集成并自动上传到harbor仓库,业务主机通过持续交付自动从仓库中下载镜像最近版本并实现业务更新

自动:一提交全部触发
项目架构图
7.1 在jenkins中添加registry-node
1.在业务节点中安装docker和java环境并配置其可以从仓库中下载镜像
bash
[root@docker-action ~]# vim /etc/yum.repos.d/docker.repo
[docker]
name = docker
baseurl = https://mirrors.aliyun.com/docker-ce/linux/rhel/9/x86_64/stable/
gpgcheck = 0
[root@docker-registry ~]# dnf install docker-ce-28.5.2 fontconfig java-21-openjdk git -y
#主机里都要安装;
#从harbor仓库中把认证文件复制到当前主机
[root@docker-action ~]# mkdir /etc/docker/certs.d/reg.timinglee.org/ -p
[root@docker-action ~]# scp root@172.25.254.200:/data/certs/timinglee.org.crt /etc/docker/certs.d/reg.timinglee.org/ca.crt
[root@docker-action ~]# vim /etc/docker/daemon.json
{
"registry-mirrors":[
"https://reg.timinglee.org"
]
}
[root@docker-action ~]# systemctl restart docker
2.部署jenkins节点






7.2 配置构建节点
1.在harbor仓库主机中安装java环境及git
bash
[root@harbor harbor]# dnf install fontconfig java-21-openjdk git -y
2.在jenkins中安装构建插件
3.设置jenkins的容器构建规则






7.3.测试镜像构建
在gitlab中建立Dockerfile和index.html
bash
[root@gitlab timinglee]# vim index.html
www.timinglee.org v1
[root@gitlab timinglee]# vim Dockerfile
FROM nginx
COPY index.html /usr/share/nginx/html
7.4.在业务节点自动运行
7.5 测试效果
bash
[root@gitlab timinglee]# vim index.html
www.timinglee.org v2
[root@gitlab timinglee]# git add Dockerfile index.html
[root@gitlab timinglee]# git commit -m "nginx v2"
[main 241491d] nginx v2
1 file changed, 1 insertion(+), 1 deletion(-)
[root@gitlab timinglee]# git push -u origin main
枚举对象中: 5, 完成.
对象计数中: 100% (5/5), 完成.
使用 4 个线程进行压缩
压缩对象中: 100% (2/2), 完成.
写入对象中: 100% (3/3), 269 字节 | 269.00 KiB/s, 完成.
总共 3(差异 1),复用 1(差异 0),包复用 0
To 172.25.254.50:root/timinglee.git
42d9243..241491d main -> main
分支 'main' 设置为跟踪 'origin/main'。