项目实战
Pipeline 实现持续集成
预习准备
课程目标
- 掌握 CICD 知识体系。
- 掌握 Jenkins Pipeline 常用语法。
- 结合 Jenkins Pipeline 实现 CICD 体系建设。
需求说明
- 在研发提交 mr 的时候,通过 Pipeline 拉取研发的代码,对被测服务进行单元测试、覆盖率测试。其中某一个环境如果没有通过,则邮件通知对应的研发。
- 以上测试通过之后,编译 docker 镜像,并自动部署到开发环境中。
- 对开发环境进行自动化测试,通过之后自动部署到测试环境中。
实战思路
在流水线的实现过程中,其实主要就是在调试流水线的脚本。所以在这个过程中,最好是将每个子步骤调通后,再整合到一起。将问题先分解,逐个解决再融合。
传统 Job 的实现方式
持续集成概念和方案
- Devops与CICD Devops与CICD
- 持续集成的方案 持续集成的方案
实现思路
- 在 Jenkins 上安装单元测试工具
- 在 Jenkins 上配置单元测试工具
- 在 Jenkins 上安装覆盖率工具
- 使用 Jenkins 运行单元测试和覆盖测试
实战项目
- 项目地址: https://gitee.com/ceshiren/continuous-integration-poc
- 项目说明: 一个简单的 Python 项目,包含单元测试和覆盖率测试
实战步骤
- 在 Jenkins 安装git、ssh等插件
- 配置 Jenkins 的节点
- 配置 Jenkins 的job
- 在 Jenkins 上进行单元测试和覆盖率测试
- 在 Jenkins 上配置邮件告警
- dayly build
Jenkins的插件安装和节点配置
测试报告与邮件告警
使用 Pipeline 整体框架流程
首先需要搭建好流水线的基本结构,相关知识点为 Pipeline 简介,流水线基本结构,流水线节点管理。
单元测试
-
执行单元测试相关的命令:
steps { echo '开始单元测试' sh 'python3 -m venv venv && source venv/bin/activate && pip install -r requirements.txt && pytest --cov=src tests --cov-report=html --cov-fail-under=90' }
如果失败:
如果成功
-
环境准备: 源码部署的镜像需要有相关的依赖环境,比如 Python ,以及一些基础的 linux 命令等(如果已经有相关的基础镜像可以跳过此步骤)。先打包环境依赖的基础镜像,需要使用命令:
docker build -f [Dockerfile文件路径] -t [镜像名称] .
:FROM python:3.9.16 RUN sed -i 's/deb.debian.org/mirrors.ustc.edu.cn/g' /etc/apt/sources.list RUN sed -i 's/security.debian.org/mirrors.ustc.edu.cn/g' /etc/apt/sources.list RUN apt-get update RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime RUN apt install -y vim wget curl iproute2 ntpdate telnet traceroute openssl libssl-dev libpcre3 libpcre3-dev ntpdate telnet traceroute gcc openssh-server ntpdate tcpdump telnet traceroute iotop unzip zip openjdk-11-jdk RUN mkdir /data /log; \ pip3 install setuptools -i https://pypi.tuna.tsinghua.edu.cn/simple ; \ pip3 install --upgrade pip -i https://pypi.tuna.tsinghua.edu.cn/simple; CMD /bin/bash
-
将源码进行编译打包:生成一个可部署的 Docker 镜像(或者 War 包、Jar 包)。以下为相关的 dockerfile,注意,在此次运行 docker 的 build 命令的时候,需要在源码项目根目录下执行。
# 注意,这个是私有hub FROM [镜像名] # 工作目录 WORKDIR /data # 复制本地主机的 . 下内容到镜像中的 . ,目标路径不存在时,会自动创建。 COPY . . # 执行shell 命令,安装环境 ENV PYTHONPATH src RUN pip3 install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple # 启动服务。 CMD ["python3", "./src/server.py"]
-
部署测试环境,此次演示使用 Docker 启动服务:
docker run -d -p [宿主机端口]:[容器内部端口] [镜像名称]
。
注意:如果是 Mac 本地部署的 jenkins,可能会碰到 docker: command not found
命令找不到的问题。对应解决方案为:
- 确保连接的 mac 节点有安装 docker,并且在命令行能够正常调用。
- 在 mac 直接输入
echo $PATH
,复制其返回的内容。 - 进入节点-> 配置 -> 环境变量,点击添加。键的地方输入
PATH
,值的地方输入$PATH:[第二步返回的内容]
注意:如果是 Linux 服务器,连接节点的时候使用的非root用户,可能会出现权限的问题,需要将该用户加入到 docker 用户组中。
- 将用户添加到 docker 组中
sudo usermod -aG docker $USER
自动化测试
- 测试环境部署成功之后开始做自动化测试。由于被测服务的源码地址和测试代码并不是一个仓库,所以需要进行多仓库的管理,对应片段生成器中的 checkout 指令。
- 执行所有的自动化测试用例,并生成对应的测试报告,发送邮件给测试人员,邮件中需要包含 allure 报告信息,对应片段生成器中的 allure 指令。
其他优化点
- 多分支流水线构建,相关资料参考多分支流水线。
- 结合 WebHook 触发构建。