接口自动化测试持续集成CI/CD(Jenkins)

发布于:2025-08-20 ⋅ 阅读:(20) ⋅ 点赞:(0)

一、Linux( Debian 12)操作系统部署docker

1. 更新系统并安装依赖

更新 apt 包索引

sudo apt update
sudo apt upgrade -y

# 安装必要的工具

sudo apt install -y ca-certificates curl gnupg lsb-release

2. 添加 Docker 官方 GPG 密钥

# 创建 keyrings 目录
sudo mkdir -p /etc/apt/keyrings

# 下载并导入 Docker GPG 密钥
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

ps:错误提示:gpg: no valid OpenPGP data found.(使用手机热点)


3. 添加 Docker APT 源

# 设置 Docker 官方仓库
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# 更新 apt 包索引
sudo apt update

4. 安装 Docker Engine

# 安装 Docker(包括 Docker Engine、CLI、Containerd)
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin

5. 启动 Docker 并设置开机自启

# 启动 Docker 服务
sudo systemctl enable --now docker

# 检查 Docker 状态
sudo systemctl status docker

预期输出

● docker.service - Docker Application Container Engine
     Loaded: loaded (/lib/systemd/system/docker.service; enabled; preset: enabled)
     Active: active (running) since ...

6. 验证 Docker 是否正常工作

# 运行测试容器
sudo docker run hello-worldw

预期输出

Hello from Docker!
This message shows that your installation appears to be working correctly.

7. 编辑 daemon.json 文件


如遇到网络问题,修改 /etc/docker/daemon.json 文件

{
  "registry-mirrors": [
    "https://registry.cn-hangzhou.aliyuncs.com",
    "https://dockerproxy.com",
    "https://hub-mirror.c.163.com",
    "https://docker.m.daocloud.io",
    "https://dockerhub.icu",
    "https://docker.mirrors.ustc.edu.cn"
  ]
}
 

然后重启 Docker:

sudo systemctl daemon-reload
sudo systemctl restart docker

最后再验证下docker是否正常工作

二、测试环境部署jenkins

1、创建网络

docker network create jenkins

2、下载并运行jenkins镜像

docker pull jenkins/jenkins

3、启动自己的jenkins镜像

docker run --name myjenkins --restart=on-failure --detach --network jenkins --env DOCKER_CERT_PATH=/certs/client --env DOCKER_TLS_VERIFY=1 --volume jenkins-data:/var/jenkins_home --volume jenkins-docker-certs:/certs/client:ro -v /etc/localtime:/etc/localtime -e TZ=Asia/Shanghai --publish 8080:8080 --publish 50000:50000 jenkins/jenkins:latest

4、运行后查看容器执行日志

docker logs -f myjenkins

复制保存密钥,后面会用到

在浏览器访问http://ip:8080 ip要替换成你服务器的ip需要等待大概10分钟的样子,才能进入到初始
安装页面

5、重启下Jenkins然后就可以登录Jenkins了:

docker restart myjenkins

三、Jenkins配置

1、安装Allure插件(其他需要的插件)

1、系统管理》插件管理》下载Allure插件

2、配置git和Allure,

1、系统管理》全局工具配置》

3、邮件发送配置

系统管理》凭据管理》

系统配置

调试下邮件是否能发送

4、邮件模板

5、全局安全配置

全局安全配置》

6、节点配置

系统管理》节点和云管理

7、docker部署slave_api_auto节点以及连接

1、创建Dockerfile文件

FROM jenkins/inbound-agent
USER root
WORKDIR /home/jenkins
RUN apt-get update && \
    apt-get install -y python3 python3-pip

2、创建镜像

docker build -t autotest1:latest .

3、创建容器

docker run -itd \
  --network jenkins \
  --name slave_api_auto \
  autotest1 \
  -url http://192.168.1.126:8080 \
  -secret a9c77fddbdcb27e8e229c3615280d5696c326afc6c933c03d61d4eee3aa030d9 \
  -name slave_api_auto

参数 作用 示例/说明
-itd 启动容器并分配伪终端(交互式后台运行) -i 交互式,-t 分配终端,-d 后台运行
--network jenkins 指定容器使用的网络 连接到名为 jenkins 的 Docker 网络
--name slave_api_auto 设置容器名称 Jenkins节点名称
autotest1 使用的镜像名称 基于之前构建的 autotest1:latest 镜像
-url http://192.168.0.188:8080 Jenkins Agent 参数 指定 Jenkins 的 URL
374c182a0091... Jenkins Agent 的 Secret Token 用于连接 Jenkins 的认证密钥,查看节点详情

4、验证是否连接成功

四、自动化任务配置

1、创建流水线任务

2、 流水线环境切换配置(暂时不用)

3、构建触发器(工程触发后,构建流水线)

4、构建触发器(定时触发)

每周一到周五,晚上12点开始执行

5、流水线脚本配置

使用 Personal Access Token (PAT) 连接 Jenkins 和 GitHub 的完整步骤
1. 在 GitHub 生成 Personal Access Token
  1. 登录 GitHub 账户

    • 打开 github.com,点击右上角头像 → Settings

  2. 进入开发者设置

    • 左侧菜单 → Developer settings → Personal access tokens → Tokens (classic)

  3. 生成新 Token

    • 点击 Generate new token → 选择 Classic token

    • 在 Note 填写描述(如 Jenkins-CI

    • Expiration:建议选择 No expiration(否则需定期更新)

    • 勾选权限

      • repo(必选):访问代码仓库

      • admin:repo_hook(可选):管理 Webhook

      • workflow(可选):如果涉及 GitHub Actions

    • 点击 Generate token

  4. 复制 Token

    • 重要! Token 只显示一次,立即复制保存到安全位置(如密码管理器)。

    • 如果丢失,必须重新生成。


2. 在 Jenkins 配置 Token 凭据
  1. 进入 Jenkins 管理界面

    • 登录 Jenkins → 点击左侧 Manage Jenkins → Manage Credentials

  2. 选择凭据存储范围

    • 点击 全局凭据 (Global credentials) → Add Credentials

  3. 填写凭据信息

    • Kind:选择 Username with password

    • Scope:保持 Global

    • Username

      • 可填写任意名称(如 github-pat),GitHub 实际只校验 Token

    • Password:粘贴刚才复制的 Personal Access Token

    • ID:建议填写 github-pat(后续任务中方便选择)

    • Description:可选描述(如 GitHub Token for Jenkins

  4. 保存凭据

    • 点击 Create


3. 在 Jenkins 任务中配置 Git 仓库
  1. 创建或修改任务

    • 新建任务:点击 New Item → 输入任务名 → 选择 Freestyle project

    • 或编辑现有任务:点击任务名 → Configure

  2. 配置源码管理

    • 在 Source Code Management 部分 → 选择 Git

    • Repository URL:填写 HTTPS 地址

      https://github.com/wangkaidashuaige/learn_python_data.git
    • Credentials:选择刚刚添加的 github-pat

    • Branches to build:指定分支(如 */main

  3. 测试连接

    • 点击 Apply → Save

    • 手动触发一次构建,观察日志是否成功拉取代码。

示例:(其中字段需要手动替换成自己的参数)

pipeline {
    // 指定在标签为'slave_api_auto'的节点上运行
    agent {
        label 'slave_api_auto'
    }
    stages {
        // 阶段1:拉取代码
        stage("拉取自动化代码") {
            steps {
                    git(
                        url: 'https://github.com/wangkaidashuaige/shixun_api_project.git',
                        credentialsId: 'github-pat',
                        branch: 'master',
                        poll: false
                    )
                }
        }
        
        // 阶段2:执行测试
        stage("执行自动化测试") {
            steps {
                // 安装Python依赖
                sh 'pip install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple --break-system-packages'
                // 执行测试脚本,传入环境变量,如果命令行需要选定环境,使用 ${env_name}变量
                sh 'python3 run.py'
                
                /* Windows节点备用命令,环境变量使用%env_name%
                bat 'pip install -r requirements.txt'
                bat 'python run.py'
                */
            }
        }
        // 阶段3:生成报告
        stage("生成测试报告") {
            steps {
                // 使用Allure生成测试报告
                allure includeProperties: false, 
                      jdk: '', 
                      results: [[path: 'temp']]  // Allure报告数据目录
            }
        }
        
        // 阶段4:邮件通知
        stage("邮件结果通知") {
            steps {
                emailext(
                    // 邮件主题
                    subject: '$PROJECT_NAME - 执行 #$BUILD_NUMBER - $BUILD_STATUS!',
                    // 收件人列表,多个用逗号分隔
                    to: '2421110201@qq.com',
                    // 邮件正文(美化后的HTML)
                    body: '''<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>$PROJECT_NAME - 第$BUILD_NUMBER次构建日志</title>
    <style>
        body {
            font-family: Arial, sans-serif;
            line-height: 1.6;
            margin: 20px;
            color: #333;
        }
        .container {
            max-width: 800px;
            margin: 0 auto;
            padding: 20px;
            border: 1px solid #ddd;
            border-radius: 5px;
            background-color: #f9f9f9;
        }
        h2 {
            color: #2c3e50;
            border-bottom: 1px solid #eee;
            padding-bottom: 10px;
        }
        ul {
            padding-left: 20px;
        }
        a {
            color: #3498db;
            text-decoration: none;
        }
        a:hover {
            text-decoration: underline;
        }
        .success {
            color: #27ae60;
        }
        .failure {
            color: #e74c3c;
        }
    </style>
</head>
<body>
    <div class="container">
        <h2>构建信息</h2>
        <ul>
            <li><strong>项目名称:</strong>$PROJECT_NAME</li>
            <li><strong>构建状态:</strong><span class="$BUILD_STATUS.toLowerCase()">$BUILD_STATUS</span></li>
            <li><strong>构建编号:</strong>#$BUILD_NUMBER</li>
            <li><strong>详细测试日志:</strong> <a href="${BUILD_URL}console" target="_blank">查看控制台输出</a></li>
            <li><strong>详细测试报告:</strong> <a href="${JOB_URL}allure" target="_blank">查看Allure报告</a></li>
            <li><strong>触发原因:</strong> ${CAUSE}</li>
            <li><strong>项目地址:</strong> <a href="${BUILD_URL}" target="_blank">访问构建详情</a></li>
        </ul>
    </div>
</body>
</html>'''
                )
            }
        }
    }
}

五、手动执行脚本

六、遇到的问题

1、Jenkins流水线提示无法访问域名

        解决方案:python脚本中,域名替换成IP地址(要先确认项目用IP地址可以访问)

2、ERROR: Error fetching remote repo 'origin'

        无法连接远程仓库,如果之前的配置做好后有这样的问题一般是DNS配置问题

        (1)检查 systemd-resolved 的真实 DNS 配置

        运行以下命令查看实际使用的 DNS 服务器:resolvectl status

        输出示例:Global DNS Servers: 8.8.8.8 # 应确保这里是可用的公共 DNS

        如果输出中没有有效的公共 DNS(如 8.8.8.8),需修改配置。

        (2) 修改 systemd-resolved 的 DNS 配置:sudo nano /etc/systemd/resolved.conf

        取消注释并添加:

        [Resolve]

                DNS=8.8.8.8 223.5.5.5 # Google 和阿里 DNS

                FallbackDNS=1.1.1.1

                Domains=~

        重启服务:sudo systemctl restart systemd-resolved

        (3) 验证 DNS 解析
        ping github.com
        nslookup github.com

网站公告

今日签到

点亮在社区的每一天
去签到