从零搭建企业级 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'。
复制代码
相关推荐
tiancaijiben1 小时前
阿里云应用实时监控服务ARMS完全接入指南:从探针部署到全链路可观测
云计算
码云数智-大飞1 小时前
Go Channel 详解:并发通信的正确姿势
前端·数据库·git
糖果店的幽灵4 小时前
软件测试接口测试从入门到精通:接口测试CI_CD集成
软件测试·ci/cd·接口测试
OsDepK10 小时前
OSMDE手机AI编程,一键Git
git·ai编程
java_cj14 小时前
深入kubectl create源码:从YAML到Pod的完整链路拆解
运维·云原生·容器·kubernetes
xingyuzhisuan14 小时前
算力租赁平台 GPU 资源隔离方案:显存抢占问题深度排查与解决
大数据·云计算·gpu算力
步步为营DotNet15 小时前
基于.NET Aspire 实现云原生应用的高效监控与可观测性
云原生·.net·wpf
用什么都重名16 小时前
Git分支合并与远程服务器同步实战:保留关键配置文件
运维·服务器·git
得要找到一束光17 小时前
git详细命令
git·github