Skip to content

项目实战

持续集成实战

学习体系

  • 掌握什么是持续集成,以及持续集成的价值
  • 掌握持续集成的基本流程
  • 掌握持续集成的工具的使用

知识模块

  • 持续集成持续交付 Devops L1
  • 持续集成持续交付 Devops L2
  • 持续集成持续交付 Devops L3

实战需求

  • 需要在 Jenkins 上集成单元测试工具
  • 需要在 Jenkins 上集成覆盖率工具

持续集成概念和方案

  1. Devops与CICD Devops与CICD
  2. 持续集成的方案 持续集成的方案

实战演练

实现思路

  1. 在 Jenkins 上安装单元测试工具
  2. 在 Jenkins 上配置单元测试工具
  3. 在 Jenkins 上安装覆盖率工具
  4. 使用 Jenkins 运行单元测试和覆盖测试

实战项目

  • 项目地址: https://gitee.com/ceshiren/continuous-integration-poc
  • 项目说明: 一个简单的 Python 项目,包含单元测试和覆盖率测试

实战步骤

  1. 在 Jenkins 安装git、ssh等插件
  2. 配置 Jenkins 的节点
  3. 配置 Jenkins 的job
  4. 在 Jenkins 上进行单元测试和覆盖率测试
  5. 在 Jenkins 上配置邮件告警
  6. dayly build

Jenkins的插件安装和节点配置

  1. Jenkins的插件安装
  2. Jenkins的节点配置

测试报告与邮件告警

  1. 测试报告配置 测试报告
  2. 邮件告警配置 邮件告警

选学内容

  1. hook触发构建 hook触发构建

需求说明

  1. 在研发提交 mr 的时候,通过 Pipeline 拉取研发的代码,对被测服务进行单元测试、覆盖率测试。其中某一个环境如果没有通过,则邮件通知对应的研发。
  2. 以上测试通过之后,编译 docker 镜像,并自动部署到开发环境中。
  3. 对开发环境进行自动化测试,通过之后自动部署到测试环境中。

uml diagram

实战思路

在流水线的实现过程中,其实主要就是在调试流水线的脚本。所以在这个过程中,最好是将每个子步骤调通后,再整合到一起。将问题先分解,逐个解决再融合。

uml diagram

整体框架流程

首先需要搭建好流水线的基本结构,相关知识点为 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'
    }
    
如果失败:
如果成功
  1. 环境准备: 源码部署的镜像需要有相关的依赖环境,比如 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
    
  2. 将源码进行编译打包:生成一个可部署的 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"]
    
  3. 部署测试环境,此次演示使用 Docker 启动服务:docker run -d -p [宿主机端口]:[容器内部端口] [镜像名称]

注意:如果是 Mac 本地部署的 jenkins,可能会碰到 docker: command not found 命令找不到的问题。对应解决方案为:

  1. 确保连接的 mac 节点有安装 docker,并且在命令行能够正常调用。
  2. 在 mac 直接输入echo $PATH,复制其返回的内容。
  3. 进入节点-> 配置 -> 环境变量,点击添加。键的地方输入PATH,值的地方输入$PATH:[第二步返回的内容]
    节点环境变量配置

注意:如果是 Linux 服务器,连接节点的时候使用的非root用户,可能会出现权限的问题,需要将该用户加入到 docker 用户组中。

  1. 将用户添加到 docker 组中 sudo usermod -aG docker $USER

自动化测试

  1. 测试环境部署成功之后开始做自动化测试。由于被测服务的源码地址和测试代码并不是一个仓库,所以需要进行多仓库的管理,对应片段生成器中的 checkout 指令。
  2. 执行所有的自动化测试用例,并生成对应的测试报告,发送邮件给测试人员,邮件中需要包含 allure 报告信息,对应片段生成器中的 allure 指令。

其他优化点

  1. 多分支流水线构建,相关资料参考多分支流水线
  2. 结合 WebHook 触发构建。