从零搭建企业级 CI/CD(下):Jenkins+GitLab+Harbor 全链路实战指南

六 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'。
复制代码
​
相关推荐
鹿邑妈糊2 小时前
kvm-clock时钟虚拟化原理
云计算
AI Data 搭子8 小时前
阿里云发布 Agentic Storage 全矩阵产品:面向 AI 到 Agent 负载的全栈演进
人工智能·阿里云·云计算
分布式存储与RustFS8 小时前
升级 RustFS 二进制不停机:一条一条换,留一条退路
运维·云原生·开源·对象存储·分布式存储·s3·性能基准
xiaoligangting10 小时前
太原防火岗亭
云原生
键盘鼓手苏苏13 小时前
ESLint 规则渐进式升级:从 0 警告到全面开启的迁移策略(续篇)
云原生·kubernetes·k8
码上上班13 小时前
k8s知识点总结
云原生·容器·kubernetes
Zhou14113613 小时前
CICD_01_持续集成与Jenkins入门
运维·ci/cd·jenkins
ZhangJun9515 小时前
Linux常用命令笔记,中高级运维高频指令,并附上vim常见操作
linux·运维·centos·云计算·vim
逐流人15 小时前
Ceph对象存储与文件系统存储管理:从RADOS网关、S3与Swift到CephFS快照同步
linux·运维·ceph·云原生·云计算·swift·rados
分布式存储与RustFS15 小时前
日志目录的预算是 2 GiB:轮转、保留和压缩这三件事
运维·云原生·开源·对象存储·分布式存储·s3·性能基准