当前位置: 首页 > news >正文

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

一、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 EngineLoaded: 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:8080Jenkins 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
http://www.dtcms.com/a/338632.html

相关文章:

  • 应用缓存不止是Redis!——亿级流量系统架构设计系列
  • Ansible 角色管理
  • RabbitMQ处理流程详解
  • 基于NB-IOT的智慧路灯系统的设计与实现/基于stm32的太阳能路灯系统的设计与实现#单片机#物联网#嵌入式开发
  • 华金证券携手非凸科技,共话AI赋能交易新未来
  • BeanUtils拷贝大对决:Spring与Apache Commons的差异与妙用
  • 基于多级缓存架构的Redis集群与Caffeine本地缓存实战经验分享
  • Node.js完整安装配置指南(包含国内镜像配置)
  • 第5章 高级状态管理
  • webrtc弱网-GoogCcNetworkController类源码分析与算法原理
  • 关于Android webview协议混淆
  • v-model 入门教程
  • 构建现代化的Web UI自动化测试框架:从图片上传测试实践说起
  • 【网络运维】Ansible roles:角色管理
  • 前端多环境变量配置全攻略:开发 / 测试 / 生产自动切换实战
  • 时间差值工具Date.now()和performance.now()
  • 【实时Linux实战系列】实时大数据处理与分析
  • 【STM32】HAL库中的实现(五):ADC (模数转换)
  • 服务器经常宕机的原因及解决办法
  • Xftp8传输文件与 Linux 系统 Anaconda 安装
  • 腾讯混元3D系列开源模型:从工业级到移动端的本地部署
  • 游戏相机震动与武器后坐力实现指南
  • 禾赛激光雷达AT128P/海康相机(2):基于欧几里德聚类的激光雷达障碍物检测
  • VScode ROS文件相关配置
  • 知识篇 | 中间件会话保持和会话共享有啥区别?
  • 在Windows高效使用OpenCode的方案
  • Rust 入门 返回值和错误处理 (二十)
  • Docker 快速下载Neo4j 方法记录
  • 管道魔法再现:卡巴斯基发现与CVE-2025-29824漏洞利用相关的进化版后门程序
  • Rust学习笔记(七)|错误处理