CICD是什么

    CI/CD 是指持续集成(Continuous Integration)和持续部署(Continuous Deployment)或持续交付(Continuous Delivery)

持续集成(Continuous Integration)

  持续集成是一种软件开发实践,团队成员频繁地将他们的工作集成到共享的代码仓库中。其主要特点包括:

    1. 频繁提交代码:开发人员可以每天多次提交代码,确保代码库始终保持最新状态。

    2. 自动化构建:每次提交后,自动触发构建过程,包括编译、测试、静态分析等。

    3. 快速反馈:如果构建失败或测试不通过,能够快速地向开发人员提供反馈,以便及时修复问题。

持续部署(Continuous Deployment)

持续部署是在持续集成基础上,将通过所有测试的代码自动部署到生产环境中。其特点如下:

    1. 自动化流程:从代码提交到生产环境的部署完全自动化,无需人工干预。

    2. 高频率部署:可以实现频繁的部署,使得新功能能够快速地提供给用户。

    3. 风险控制:需要有强大的测试和监控体系来确保部署的稳定性和可靠性。

持续交付(Continuous Delivery)

    持续交付与持续部署类似,但不一定自动部署到生产环境,而是随时可以部署。其重点在于确保软件随时处于可发布状态。

CI/CD 的好处包括:

    1. 提高开发效率:减少手动操作和等待时间,加快开发周期。

    2. 尽早发现问题:通过频繁的集成和测试,问题能够在早期被发现和解决。

    3. 降低风险:减少了大规模部署时可能出现的问题,提高了软件的质量和稳定性。

    4. 增强团队协作:促进团队成员之间的沟通和协作,提高团队的整体效率。

  常见的 CI/CD 工具包括 Jenkins、GitLab CI/CD、Travis CI 等。这些工具可以帮助团队实现自动化的构建、测试和部署流程。

git工具使用

git简介

特点:Git 是一个分布式版本控制系统,被广泛用于软件开发中,以管理代码的版本和变更。

  分布式

    - 每个开发者都有完整的代码仓库副本,这使得开发者可以在离线状态下进行工作,并且在网络出现问题时也不会影响开发。

    - 即使中央服务器出现故障,开发者仍然可以在本地进行开发和查看项目历史。

  高效的分支管理

    - Git 中的分支创建和切换非常快速和简单。开发人员可以轻松地创建新的分支来进行新功能的开发或修复 bug,而不会影响主分支。

    - 合并分支也相对容易,可以使用多种合并策略来满足不同的需求。

  快速的版本回退

    - 如果发现某个版本存在问题,可以快速回退到之前的版本。

    - 可以查看每个版本的详细变更记录,方便了解代码的演进过程。

  强大的提交管理

    - 每个提交都有一个唯一的标识符,可以方便地引用和查看特定的提交。

    - 提交可以包含详细的提交信息,描述本次提交的更改内容。

  支持协作开发

    - 开发者可以将自己的更改推送到远程仓库,供其他开发者拉取和合并。

    - 可以处理多个开发者同时对同一文件进行修改的情况,通过合并冲突解决机制来确保代码的完整性。

注意:Git必看秘籍

git 工作流程

Git 有三种状态:已提交(committed)、已修改(modified) 和 已暂存(staged)。

  - 已修改表示修改了文件,但还没保存到数据库中。

  - 已暂存表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。

  - 已提交表示数据已经安全地保存在本地数据库中。

这会让我们的 Git 项目拥有三个阶段:工作区、暂存区以及 Git 目录。

部署git

安装git配置

# dnf install git -y   【在rhel9的系统中默认自带git】

# echo "source /usr/share/bash-completion/completions/git" >> ~/.bashrc

# source ~/.bashrc

初始化

获取 Git 仓库通常有两种方式:

  - 将尚未进行版本控制的本地目录转换为 Git 仓库。

  - 从其它服务器克隆 一个已存在的 Git 仓库。比如: git clone

初始化版本库

# mkdir timinglee

# cd timinglee/

# git init

# ls -a

# ls .git/

# git config --global user.name "timinglee"

# git config --global user.email "timinglee@timinglee.org"

查看当前文件状态

# git status

# git status -s 【简化输出】

注意:.git目录是git跟踪管理版本库的,没事别瞎溜达,更不要随意修改删除

git的使用方法

常用方法

# echo timnglee > README.md

# git status 查看结果:

# git status -s

提交暂存区的数据

# git add README.md

# git status -s

# git commit -m "add README.md"

# git status -s 查看结果:

再次修改

# echo timnglee >> README.md

# git status -s 查看结果:

撤销修改

# git checkout -- README.md

# cat README.md

重新修改

# echo timinglee >> README.md

# git add README.md

# git status -s

从暂存区撤销

# git restore --staged README.md

# git status -s 查看结果:

# git add README.md  【可重新提交】

# git status -s 查看结果:

更新

# git commit -m "update v1"

# git status -s 查看结果:

更新文件

# echo timinglee >> README.md

# git add README.md

# echo timinglee >> README.md

# git status -s 查看结果:

如果现在提交只能提交在暂存区中的部分

# git commit -m "update v2"

# git status -s 查看结果:

查看已暂存和未暂存的修改变化

# echo timinglee >> README.md

# git diff 查看结果:

注意:跳过使用暂存区,只能在提交过的在版本库中存在的文件使用如果文件状态是“??”不能用此方法

# git commit -a -m "update v3"

撤销工作区中删除动作

# touch lee.txt

# git add lee.txt

# git commit -m "add lee.txt"

# rm -fr lee.txt

# git status -s 查看结果:

# git checkout -- lee.txt

# ls

从版本库中删除文件

# git rm lee.txt

# git status -s 查看结果:

# git commit -m "delete lee.txt"

# git status -s 查看结果:

恢复从版本库中被删除的文件

# git log 【查看操作日志】

# git reflog 【查看提交动作】

版本回退到删除之前

# git reset --hard e38e2f7

git对于文件如何忽略

在做软件开发时对源码编译会产生一些临时文件,我们在提交时需要忽略这些临时文件

# mkdir dir1/

# touch dir1/.file2

# git status -s 查看结果:

# echo .file1 > .gitignore

# git status -s 查看结果:

# echo ".*" > .gitignore

# git status -s 查看结果:

gitlab代码仓库

gitlab简介

  - GitLab 是一个用于仓库管理系统的开源项目,使用 Git 作为代码管理工具,并在此基础上搭建起来的 web 服务。

  - GitLab 具有很多功能,比如代码托管、持续集成和持续部署(CI/CD)、问题跟踪、合并请求管理等。它可以帮助开发团队更好地协作开发软件项目,提高开发效率和代码质量。

  中文站点: https://gitlab.cn/install/

gitlab 的部署实施

部署gitlab

注意:部署gitlab需要内存大于4G

  在安装包之前需配置好软件仓库来解决依赖性

# yum install -y curl policycoreutils-python-utils openssh-server perl

# dnf install gitlab-ce-17.1.6-ce.0.el9.x86_64.rpm -y

配置gitlab

修改配置文件

# ls /etc/gitlab/

# vim gitlab.rb

# gitlab-ctl reconfigure    【执行命令成功后会把所有组件全部启动起来】

登陆gitlab

    用户名默认为 `root` 。如果在安装过程中指定了初始密码,则用初始密码登录,如果未指定密码,则系统会随机生成一个密码并存储在 `/etc/gitlab/initial_root_password` 文件中, 查看随机密码并使用 `root` 用户名登录。

注意:出于安全原因,24 小时后,`/etc/gitlab/initial_root_password` 会被第一次 `gitlab-ctl reconfigure` 自动删除,因此若使用随机密码登录,建议安装成功初始登录成功之后,立即修改初始密码。

# cat /etc/gitlab/initial_root_password   【查看原始密码】

登陆

设置语言

设置密码

在gitlab中新建项目

生成sshd密钥

# cd ~

# ssh-keygen

# cat .ssh/id_rsa.pub

上传公钥到gitlab中

下载项目

# git clone git@172.25.254.50:root/timinglee.git

# ls -R 查看结果:

# cd timinglee/

# git remote -v 查看结果:

# git commit -m "add timinglee"

# git push -u origin main

jenkins

jenkins 简介

    Jenkins是开源CI&CD软件领导者, 提供超过1000个插件来支持构建、部署、自动化, 满足任何项目的需要。

    Jenkins用Java语言编写,可在Tomcat等流行的servlet容器中运行,也可独立运行

  CI(Continuous integration持续集成)持续集成强调开发人员提交了新代码之后,立刻进行构建、(单元)测试。

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

部署 jenkins

    jenkins需要部署在新的虚拟机中

    jenkins需要部署在新的虚拟机中,建议最少4G内存,4核心cpu

jenkins ~]# dnf install fontconfig java-21-openjdk -y  【安装依赖包】

# dnf install jenkins-2.516.2-1.1.noarch.rpm -y  【安装jenkins】

# systemctl enable --now jenkins.service    【启动jenkins】

# systemctl stop jenkins.service

# rm -fr /var/lib/jenkins/plugins

# tar zxf /root/jenkins/plugins.tar.gz -C /var/lib/jenkins/

# systemctl restart jenkins.service

# cat /var/lib/jenkins/secrets/initialAdminPassword   【查看原始密码】

# vim /etc/hosts

部署插件

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

jenkins 与gitlab的整合

如果出现错误,原因是因为本机没有gitlab上的sshkey

设置密钥

# ssh-keygen

# cat /root/.ssh/id_rsa.pub

把此密钥添加到gitlab上即可

添加密钥凭据

# cat /root/.ssh/id_rsa

# dnf install git -y

解决报错:

方法1

方法2

# vim /etc/ssh/ssh_config

genkins 中gitlab触发器的部署与使用

在 Jenkins 中配置 GitLab 触发器可以实现代码提交或合并请求时自动触发 Jenkins 流水线

安装插件

如果需要使用gitlab触发器需要安装gitlab插件。目前使用官方源下载比较吃力,可以直接本地部署插件即可

插件加载完毕后在jenkins中选择之前构建的项目

配置自动触发

在gitlab中设定

测试自动触发

getlab ~]# cd /root/timinglee/

# echo hello test > testfile

# git add testfile

# git commit -m "testfile v1"

# git push -u origin main

持续集成持续交付企业示例

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

在jenkins中添加registry-node

在业务节点中安装docker和java环境并配置其可以从仓库中下载镜像

docker 和 harbor ]# 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

# dnf install docker-ce fontconfig java-21-openjdk git -y

从harbor仓库中把认证文件复制到当前主机

docker ]# mkdir /etc/docker/certs.d/reg.timinglee.org/ -p

# scp root@172.25.254.200:/data/certs/timinglee.org.crt /etc/docker/certs.d/reg.timinglee.org/ca.crt

# vim /etc/docker/daemon.json

{

  "registry-mirrors":[

  "https://reg.timinglee.org"

  ]

}

# systemctl restart docker

部署jenkins节点

在jenkins中配置构建

设置jenkins的容器构建规则

测试镜像构建

在gitlab中建立Dockerfile和index.html

getlab timinglee]# echo "www.timinglee.org v1" > index.html

# vim Dockerfile

  FROM nginx

  COPY index.html /usr/share/nginx/html

# get add index.html Dockerfile

# git commit -m "webserver v1"

这个时候 # git push -u origin main 会失败

在业务节点自动运行

# git push -u origin main

持续部署

测试自动集成交付

getlab ]# curl 172.25.254.100 查看结果:

# echo "www.timinglee.org v2" > index.html

# git commit -m "webserver v2"

# git push -u origin main

# curl 172.25.254.100 查看结果:

Zabbix简介

官网:https://www.zabbix.com/

  Zabbix 是一款开源的企业级监控解决方案,主要用于实时监控网络、服务器、应用程序等 IT 基础设施的状态和性能,帮助管理员及时发现并解决问题,保障系统的稳定运行

    开发与发布:由拉脱维亚公司 Zabbix SIA 开发,首个版本于 2001 年发布,目前已更新至多个版本(截至 2024 年 5 月,最新稳定版为 Zabbix 6.4)

开源性质:基于 GPL v2 许可证开源,用户可免费使用、修改源代码,适合企业根据自身需求定制监控方案。

    跨平台支持:可运行在 Linux、Windows、Solaris 等主流操作系统上,能监控各类设备(服务器、路由器、交换机等)和应用(数据库、Web 服务、容器等)。

核心功能

全面监控能力

    硬件监控:CPU、内存、磁盘、网络接口等服务器 / 设备硬件指标。

    软件与应用监控:操作系统进程、服务状态(如 Apache、Nginx)、数据库性能(MySQL、PostgreSQL 等)、中间件(如 Tomcat)等。

    网络监控:网络带宽、延迟、丢包率,以及交换机、路由器等网络设备的端口状态。

    自定义监控:支持通过脚本、API 等方式监控特定业务指标(如订单量、用户在线数)。

告警机制

    当监控指标超过预设阈值(如 CPU 使用率过高、服务宕机)时,可通过邮件、短信、微信、Slack 等多种渠道发送告警。

    支持告警分级(严重、警告等)和升级策略(如多次告警未处理时通知上级)。

数据可视化与分析

    提供丰富的图表(折线图、柱状图、饼图等),实时展示监控数据趋势。

    支持自定义仪表盘,集中展示关键指标,方便管理员快速掌握系统状态。

    历史数据存储在数据库(如 MySQL、PostgreSQL)中,可用于趋势分析和容量规划。

自动发现

    能自动扫描网络中的设备和服务(如新增服务器、数据库实例),并自动添加监控项,减少手动配置工作量。

分布式监控

    支持通过 Proxy 节点实现分布式监控,适合跨机房、大规模部署的场景,减轻中心服务器压力,提高监控效率。

架构组成

Zabbix 架构主要包含以下组件:

  Zabbix Server:是核心组件,负责接收 Agent 发送的监控数据、处理告警、存储数据、管理配置等。

  Zabbix Agent:安装在被监控设备上,采集本地硬件和软件指标,发送给 Server 或 Proxy。

  Zabbix Proxy:可选组件用于分布式监控,代理 Server 收集数据并转发,减轻Server负载。

  Database:存储监控配置、历史数据、告警信息等(支持 MySQL、PostgreSQL、Oracle 等)。

  Web 界面:基于 PHP 开发,提供图形化操作界面,用于配置监控、查看数据和管理系统。

  Java Gateway:用于监控Java应用程序(如JVM性能),通过JMX协议与 Java 进程通信。

部署zabbix

通过官方网站下载zabbix资源

部署zabbix安装源

zabbix ~]# dnf install zabbix-server-mysql zabbix-web-mysql zabbix-apache-conf zabbix-sql-scripts zabbix-selinux-policy zabbix-agent        【安装官方源到系统中】

# ls /etc/yum.repos.d/      【查看信息】

安装zabbix服务端

# dnf install zabbix-agent.x86_64 zabbix-server-mysql.x86_64 -y

安装zabbix前端及客户端

# dnf install zabbix-web-mysql zabbix-nginx-conf zabbix-sql-scripts zabbix-agent  -y

安装数据库

解压mysql8软件包归档文件

# ls /mnt

# tar xf mysql-8.0.39-1.el9.x86_64.rpm-bundle.tar

安装mysql8

# dnf install mysql-community-client-8.0.39-1.el9.x86_64.rpm  \

mysql-community-client-plugins-8.0.39-1.el9.x86_64.rpm \

mysql-community-common-8.0.39-1.el9.x86_64.rpm \

mysql-community-icu-data-files-8.0.39-1.el9.x86_64.rpm \

mysql-community-server-8.0.39-1.el9.x86_64.rpm \

mysql-community-libs-8.0.39-1.el9.x86_64.rpm -y

启动数据库

# systemctl enable --now mysqld

查看数据库密码

# cat /var/log/mysqld.log

数据库安全初始化

# mysql_secure_installation

密码设置要求必须是高安全的:@Wb709123

剩下的可以全部回车

为zabbix建立数据库

建立zabbix所需用户并授权

# mysql -uroot -p@Wb709123

mysql> create database zabbix character set utf8mb4 collate utf8mb4_bin;

mysql> create user zabbix@localhost identified by '@Wb709123';

mysql> grant all privileges on zabbix.* to zabbix@localhost;

mysql> set global log_bin_trust_function_creators = 1;

mysql> quit;

向数据库中导入zabbix的数据

# zcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz | mysql --default-character-set=utf8mb4 -uroot -p'@Wb709123' zabbix

# mysql -uroot -p@Wb709123

mysql> set global log_bin_trust_function_creators = 0;

mysql> quit;

设置zabbix服务端配置

编辑主配置文件

# vim /etc/zabbix/zabbix_server.conf

# systemctl enable --now zabbix-server zabbix-agent httpd php-fpm     【开机启动程序】

检测登录

设置zabbix server

解决字体问题

# cd /usr/share/zabbix/assets/fonts/

# ll 查看:

# cp /mnt/zabbix-6/simkai.ttf .

# rm -rf graphfont.ttf

# ln -s /usr/share/zabbix/assets/fonts/simkai.ttf /usr/share/zabbix/assets/fonts/graphfont.ttf

# ll 查看:

zabbix agent 部署与使用

    Zabbix Agent 是 Zabbix 监控系统的重要组件,主要部署在被监控的目标设备(如服务器、虚拟机、网络设备等)上,负责收集本地系统的各类数据(如 CPU 使用率、内存占用、磁盘空间、进程状态等),并将数据发送给 Zabbix Server 或 Zabbix Proxy 进行处理和存储。

Zabbix Agent 的核心作用

  数据采集:主动或被动方式收集被监控设备的性能指标、系统状态、应用程序数据等。

  数据传输:将采集到的数据发送给 Zabbix Server/Proxy,确保监控数据的实时性和准确性。

  执行命令:接收并执行 Zabbix Server 下发的远程命令(如脚本执行、服务启停等),支持监控场景的自动化操作。

两种运行模式

1. 被动模式(默认)

    由 Zabbix Server 主动向 Agent 发起数据请求,Agent 被动响应并返回数据。

    优势:节省 Agent 端资源,适合监控大规模设备时降低客户端压力。

    劣势:Server 端请求压力可能较大,需合理配置超时时间和并发数。

2. 主动模式

    Agent 主动向 Server/Proxy 发送采集到的数据,无需 Server 发起请求。

    优势:减轻 Server 端请求压力,适合跨网段、广域网等网络条件复杂的场景。

    配置:需在 Agent 配置文件中指定 `ServerActive`(目标 Server/Proxy 地址),并在 Server 端将监控项类型设为 “主动式”。

被动模式如何添加监控节点

在要被监控节点中安装agent

所有主机 ]# vim /etc/hosts

zabbix ~]# cd /mnt/zabbix-6/

# scp zabbix-agent-6.0.41-release1.el9.x86_64.rpm root@172.25.254.10:/mnt

# scp zabbix-agent-6.0.41-release1.el9.x86_64.rpm root@172.25.254.20:/mnt

其他主机 ~]# dnf install /mnt/zabbix-agent-6.0.41-release1.el9.x86_64.rpm -y

# vim /etc/zabbix/zabbix_agentd.conf

启动agent

# systemctl enable --now zabbix-agent.service

# netstat -antlupe | grep zabbix

zabbix ~]# netstat -antlupe | grep zabbix

在zabbix的server端添加要被监控的主机

主动模式如何添加监控节点

serverb ~]# vim /etc/zabbix/zabbix_agentd.conf

# systemctl enable --now zabbix-agent.service

# netstat -antlupe | grep zabbix

配置自动发现动作

  当 Zabbix Server 通过自动发现规则发现新的设备(服务器、交换机等)或资源(如磁盘、端口等)时,自动发现动作会根据预设的条件和操作,自动完成以下任务:

    将新设备添加到 Zabbix 监控中

    为新设备关联对应的监控模板(如 Linux 模板、网络设备模板)

    加入指定的主机组

    发送发现通知(邮件、短信等)

    执行自定义脚本(如初始化监控配置)

zabbix ]# systemctl restart zabbix-server.service

自动注册

    在 Zabbix 中,自动注册(Auto-registration) 是一种让 Zabbix Agent 主动向 Zabbix Server 报到并请求被监控的机制。与 “自动发现”(Server 主动扫描)不同,自动注册是 Agent 主动发起注册请求,适用于动态环境(如容器、云服务器)中快速纳入新部署的设备。

核心原理

    当 Zabbix Agent 启动时,会根据配置文件中的 `ServerActive` 参数,向指定的 Zabbix Server/Proxy 发送注册请求(包含自身 Hostname、IP 等信息)。

    Zabbix Server 接收请求后,根据预设的 “自动注册动作” 判断是否接受该 Agent,并自动执行配置操作(如添加主机、关联模板等)。

注意:在做自动注册实验时确保自动发现动作已经全部停止

自动发现:Zabbix Serve服务端根据列表规则自动发现,自动注册。

自动注册:客户端发送请求,然后Zabbix Serve服务端自动注册。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐