Skip to content

【周末】Pipeline实战

Pipeline 实现持续集成

预习准备

课程目标

  1. 掌握 CICD 知识体系。
  2. 掌握 Jenkins Pipeline 常用语法。
  3. 结合 Jenkins Pipeline 实现 CICD 体系建设。

需求说明

  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:[第二步返回的内容]
    节点环境变量配置

自动化测试

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

其他优化点

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