一、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://hub-mirror.c.163.com",
"https://docker.m.daocloud.io",
"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
-
登录 GitHub 账户
- 打开 github.com,点击右上角头像 → Settings
-
进入开发者设置
- 左侧菜单 → Developer settings → Personal access tokens → Tokens (classic)
-
生成新 Token
-
点击 Generate new token → 选择 Classic token
-
在 Note 填写描述(如
Jenkins-CI
) -
Expiration :建议选择
No expiration
(否则需定期更新) -
勾选权限:
-
repo
(必选):访问代码仓库 -
admin:repo_hook
(可选):管理 Webhook -
workflow
(可选):如果涉及 GitHub Actions
-
-
点击 Generate token
-
-
复制 Token
-
重要! Token 只显示一次,立即复制保存到安全位置(如密码管理器)。
-
如果丢失,必须重新生成。
-
2. 在 Jenkins 配置 Token 凭据
-
进入 Jenkins 管理界面
- 登录 Jenkins → 点击左侧 Manage Jenkins → Manage Credentials
-
选择凭据存储范围
- 点击 全局凭据 (Global credentials) → Add Credentials
-
填写凭据信息
-
Kind :选择
Username with password
-
Scope :保持
Global
-
Username:
- 可填写任意名称(如
github-pat
),GitHub 实际只校验 Token
- 可填写任意名称(如
-
Password:粘贴刚才复制的 Personal Access Token
-
ID :建议填写
github-pat
(后续任务中方便选择) -
Description :可选描述(如
GitHub Token for Jenkins
)
-
-
保存凭据
- 点击 Create
3. 在 Jenkins 任务中配置 Git 仓库
-
创建或修改任务
-
新建任务:点击 New Item → 输入任务名 → 选择 Freestyle project
-
或编辑现有任务:点击任务名 → Configure
-
-
配置源码管理
-
在 Source Code Management 部分 → 选择 Git
-
Repository URL:填写 HTTPS 地址
https://github.com/wangkaidashuaige/learn_python_data.git
-
Credentials :选择刚刚添加的
github-pat
-
Branches to build :指定分支(如
*/main
)
-
-
测试连接
-
点击 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