(1/2)集成部署(CICD)· 使用篇

集成和部署(CICD)

我们需要做持续集成持续部署的工作首先我们需要了解他给我们带来什么
接下来我将使用Jenkins来做CICD的演示
下面先描述并列举一下持续集成持续部署的一些优点概念

优点

  1. 卓越的代码质量

  2. 减少变更和审核时间.

  3. 加速发布周期

  4. 故障检测和隔离

  5. 增强测试可靠性

  6. 减少任务堆积

  7. 改善平均解决时间

  8. 降低成本

  9. 增强透明度和责任制

  10. 简化沟通

  11. 频繁的更新和维护

  12. 提升客户满意度

  13. 增强的性能指标*

现在你已经了解实施CI/CD流水线的好处,我觉得是时候做出转变了。

只需记住几件事,你的CI/CD管道步骤越多,你将能获得越多的好处。它将自动提高你的发布速度和质量。请记住,这些好处并不局限于业务,还会影响项目方和最终用户,因为它们能降低成本和更好的投资回报率。

环境准备

系统:Centos7 64位
内核版本:5.0以上
内存大小:8G以上

初始化

这里我们需要执行一些初始化系统的指令

# 关闭防火墙systemctl stop firewalldsystemctl disable firewalld# 关闭selinux# 永久关闭selinux(重启后生效)sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config# 临时关闭selinux(不需要重启,立即生效)setenforce 0# 关闭swap# 永久关闭swap(重启后生效)sed -ri 's/.*swap.*/#&/' /etc/fstab # 临时关闭swap(不需要重启,立即生效)swapoff -a# 将桥接的IPv4流量传递到iptables的链cat > /etc/sysctl.d/kubernetes.conf << EOFnet.bridge.bridge-nf-call-ip6tables = 1net.bridge.bridge-nf-call-iptables = 1net.ipv4.ip_forward = 1EOF# 立即生效sysctl --system# 时间同步yum install ntpdate -yntpdate -u pool.ntp.org# 添加定时crontab  -l*/20 * * * * /sbin/ntpdate -u pool.ntp.org > /dev/null 2>&1

升级系统内核

首先我们查看系统内核版本

输入下面指令会出现如下列表

0 : CentOS Linux (3.10.0-1160.53.1.el7.x86_64) 7 (Core) 1 : CentOS Linux (3.10.0-1160.11.1.el7.x86_64) 7 (Core) 2 : CentOS Linux (3.10.0-1062.el7.x86_64) 7 (Core) 3 : CentOS Linux (0-rescue-ccae925869aa43f9b2868f73a0a778e7) 7 (Core)

会看到系统内核版本才3.10

所以这时候我们需要升级内核

awk -F\' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg或者rpm -qa kernel

接下来我们先导入内核源

rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org # 导入elrepo的签名rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-5.el7.elrepo.noarch.rpm # 升级elrepo源

导入软件yum源

这里使用的阿里巴巴的软件源

你也可以使用其他比如清华,163等等

wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo --no-check-certificateyum makecache

(1/2)集成部署(CICD)· 使用篇

查看系统可用版本,我们看可以看到两个大版本

kernel-lt 基于长期支持分支

kernel-ml 基于主线稳定分支

yum --disablerepo="*" --enablerepo="elrepo-kernel" list available

(1/2)集成部署(CICD)· 使用篇

这里我们使用ml主线稳定分支版本即可

执行安装指令

yum --enablerepo=elrepo-kernel install kernel-ml kernel-ml-devel -y

安装内核会等个几分钟

这里需要耐心等待

(1/2)集成部署(CICD)· 使用篇

安装完成后

再次查看内核

我们看到5.19内核已经安装成功了

awk -F\' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg

(1/2)集成部署(CICD)· 使用篇

设置最新内核为第一启动项

grub2-set-default 0

接着重启即可

查看内核是否升级成功

uname -a

(1/2)集成部署(CICD)· 使用篇

安装Docker

执行下面命令安装docker

#安装wgetyum install wget -y#下载docker-ce源wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo#查看可以安装的docker版本yum list docker-ce --showduplicates | sort -r#安装dockeryum install -y docker-ce-20.10.10 docker-ce-cli-20.10.10 containerd.io-1.4.12#查看docker版本docker -v#创建docker配置目录mkdir /etc/docker#配置docker源cat > /etc/docker/daemon.json << EOF{"registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"]}EOF#重载systemctl daemon-reload#设置开机启动systemctl enable docker#启动docker服务systemctl start docker#旧版docker迁移grep -rl 'docker-runc' /var/lib/docker/containers/ | xargs sed -i 's/docker-runc/runc/g'systemctl stop dockersystemctl start docker#查看dockerdocker -v

查看docker

出现版本号说明安装成功

docker -v

(1/2)集成部署(CICD)· 使用篇

自此系统环境准备完成

安装软件-Jenkins

gitlab

github

这里我们用到Jenkins作为集成部署工具

文档:https://hub.docker.com/_/jenkins

编写Dockerfile

首先我们来编写一个Jenkins的Dockerfile文件

cat > Dockerfile << EOFFROM jenkins/jenkins:ltsUSER root #指定容器的源RUN sed -i s@/archive.ubuntu.com/@/mirrors.aliyun.com/@g /etc/apt/sources.listRUN sed -i s@/security.ubuntu.com/@/mirrors.aliyun.com/@g /etc/apt/sources.listRUN apt clean#安装集成部署需要用到软件RUN apt-get updateRUN apt-get install -y wget RUN apt-get install -y iputils-ping#RUN apt-get install -y libltdl7 RUN apt-get install -y apt-transport-https#RUN apt-get install -y npm ENTRYPOINT ["/sbin/tini","--","/usr/local/bin/jenkins.sh"]EOF

执行完成后在当前目录下可以看到一个Dockerfile文件

此文件类似于一个安装清单

(1/2)集成部署(CICD)· 使用篇

编写执行脚本

接下来就是编写Jenkins的安装脚本并启动在Docker中

接下来就是创建一个执行脚本文件Jenkins.sh 来创建Jenkins软件

cat > Jenkins.sh << EOFecho 创建Jenkins数据目录mkdir jenkins_homeecho 停止容器中...docker stop jenkinsserverecho 删除容器中...docker rm jenkinsserver echo 删除镜像中...docker rmi myjenkins echo 构建镜像中...docker build -t myjenkins .echo 创建容器中...docker run --restart=always --name jenkinsserver \--env JAVA_OPTS="-server -Xms1024m -Xmx2048m -XX:PermSize=256m -XX:MaxPermSize=512m" \-e TZ=Asia/Shanghai \-p 8888:8080 -p 50000:50000 \-u 0 \-v /var/ans/jenkins/home:/var/jenkins_home \-v /var/run/docker.sock:/var/run/docker.sock \-v /usr/bin/docker:/usr/bin/docker \-d myjenkinsEOF

可以看到我们安装脚本创建成功了

(1/2)集成部署(CICD)· 使用篇

执行安装

bash Jenkins.sh

(1/2)集成部署(CICD)· 使用篇

当执行后等待几分钟

当看到一串字母就说明成功了

我们也可以执行Docker指令查看Jenkins运行状态

docker ps

访问Jenkins服务

这时候可以通过web服务访问Jenkins

这儿等待Jenkins初始化完成我们就可以进行登录

获取初始密码

初始化完成会出现获取初始化密码的界面

获取初始化登录密码
获取后输入到文本框然后继续
docker exec -u 0 jenkinsserver /bin/sh -c "cat /var/jenkins_home/secrets/initialAdminPassword"

等待初始化

接着让你选择默认设置还是自定义设置

这里就选择默认设置即可

接着就会出现安装界面

等待安装完成即可

登录系统

接着设置账号密码

配置访问的url

如果在外网访问就需要

这里默认即可

登录成功

安装svn组件

这里我们在Jenkins中安装svn代码获取组件

以便于我们在后面创建项目时可以选择svn仓库中的代码进行集成部署

安装svn组件成功后重启Jenkins服务

重启Jenkins服务后我们就开始创建Jenkins的CICD任务

集成部署任务

环境和软件都搭建好了

接下来创建一个集成部署任务测试一下

创建任务

点击创建任务

输入一个任务名称

然后选择构建一个自由风格的软件项目

(1/2)集成部署(CICD)· 使用篇

填写代码仓库地址

填写仓库地址

这里先用我自己gitlab做演示吧

当然你也可以用svn的地址或者github地址都是可以的

(1/2)集成部署(CICD)· 使用篇

编写构建部署脚本

编写构建脚本

echo 构建app中...docker build -t myapp .echo 创建容器中...docker run --restart=always --name myapp \-e TZ=Asia/Shanghai \-p 8080:80 \-d myappecho 构建并部署完成

查看日志

保存任务后我们手动执行CI/CD任务

此时我们打开任务控制台查看日志

可以看到任务是先拉取仓库代码

然后执行Docker构建任务

构建部署结果

可以看到Success的标志

说明构建部署任务已经完成

访问部署服务

此时我们尝试访问构建成功的一个web服务

上面用到的端口是 8080端口

可以看到我们访问web服务的一个接口成功返回了数据

(1/2)集成部署(CICD)· 使用篇

至此我们的CI/CD基础搞清楚了

最后

前面的构建部署在所有CI/CD项目中基本上都是大同小异这里这里只是演示了主动构建部署演示后续操作开发人员提交代码,系统触发CI/CD任务构建失败,给与响应,如果钉钉,微信公众号提醒部署失败,同上远程部署流水线工作部署构建测试等等