手册
1. 禅道介绍
1.1 关于禅道项目管理软件
1.2 如何获得支持
1.3 各版本功能差异
1.4 关注我们
2. 安装禅道
2.1. 环境搭建
2.1.1 搭建Ubuntu环境安装禅道
2.1.2 搭建Centos环境安装禅道
2.1.3 安装PHP的ioncube扩展
2.2. 安装禅道新版本
2.2.1 选择适合您的安装方法
2.2.2 新版本禅道的安装升级
2.2.3 Windows一键安装包(新版)
2.2.4 Windows一键安装包(旧版)
2.2.5 linux用一键安装包(推荐)
2.2.6 使用源码包安装(各系统通用)
2.2.7 使用源码包安装(MAC系统)
2.2.8 基于禅道当前的一键安装包(Windows和Linux)如何源码安装旗舰版禅道
2.2.9 渠成命令行安装禅道
2.2.10 Docker和Kubernetes方式部署禅道
2.3. 安装12开源版
2.3.1 选择适合您的安装方法
2.3.2 使用云禅道在线项目管理服务
2.3.3 (推荐)windows用一键安装包安装
2.3.4 (推荐)Linux用一键安装包
2.3.5 linux下用lampp集成包安装
2.3.6 使用源码包安装(MAC系统)
2.3.7 MAC下用XAMPP安装禅道
2.3.8 MAC下用XAMPP-VM安装禅道
2.3.9 使用源码包安装(各系统通用)
2.3.10 宝塔面板安装禅道
2.3.11 华芸NAS在线安装
2.3.12 Centos7.4系统下安装httpd,mariadb,php7.2环境运行禅道
2.3.13 Centos8系统下安装httpd,mariadb,php7.2环境运行禅道
2.3.14 安装ioncube扩展
2.3.15 安装swoole扩展
2.3.16 Docker方式部署禅道
2.4. 安装12企业版
2.4.1 禅道企业版安装包安装方式(各系统通用)
2.4.2 (推荐)Windows一键安装包安装
2.4.3 (推荐)Linux一键安装包安装
2.4.4 centos 7.x 源码安装禅道企业版
2.5 安装PHP的LDAP扩展
2.6 在线安装云禅道
3. 升级禅道
3.1. 升级12开源版
3.1.1 选择和自己环境对应的升级方式
3.1.2 通过源代码方式升级(通用)
3.1.3 windows一键安装包的升级
3.1.4 linux一键安装包升级
3.2. 升级12企业版
3.2.1 安装包方式升级
3.2.2 开源版升级到企业版
3.3. 升级禅道新版本
3.3.1 选择和自己环境对应的升级方式
3.3.2 通过源代码方式升级(通用)
3.3.3 windows一键安装包的升级
3.3.4 linux一键安装包升级
3.3.5 docker安装禅道-升级禅道
3.3.6 旧版Docker镜像升级说明
3.3.7 通过Roadrunner管理定时任务
3.4 如何安装ioncube扩展
4. 维护配置
4.1. 维护禅道
4.1.1 初始化管理脚本
4.1.2 备份禅道
4.1.3 恢复删除的资源
4.1.4 如何更新燃尽图
4.1.5 一键安装包如何实现mysql异机连接
4.1.6 linux一键安装包配置https
4.2. 配置禅道
4.2.1 设置是否允许匿名访问
4.2.2 如何配置email发信
4.2.3 如何成为超级管理员
4.2.4 配置禅道系统为静态访问
4.2.5 去掉禅道访问地址中的zentao
4.2.6 linux一键安装包去掉禅道访问地址中的zentao
4.2.7 集成禅道和svn
4.2.8 集成禅道和git
4.2.9 在第三方应用中集成禅道
4.2.10 第三方应用配置免密登录禅道
4.2.11 第三方应用集成禅道客户端进行消息通知
4.2.12 集成webhook
4.2.13 集成ZDOO
4.2.14 客户端集成
4.2.15 禅道的翻译功能
4.2.16 浏览器通知的设置
4.2.17 集成钉钉工作消息通知
4.2.18 集成企业微信应用消息通知
4.2.19 集成飞书群机器人
4.2.20 集成飞书消息通知
4.2.21 集成版本库、集成Jenkins,并进行构建
4.2.22 解决一键安装包密码口令弱的问题
4.3. 性能优化
4.3.1 nginx反向代理禅道502或504bad gateway错误
4.3.2 linux系统中配置session使用redis
5. 快速入门
5.1. 12版本快速入门
5.1.1 禅道使用的基本流程和产品、研发、测试之间的三权分立
5.1.2 禅道的新手教程
5.1.3 创建第一个产品
5.1.4 添加第一个需求
5.1.5 开始第一个项目
5.1.6 确定项目要完成的需求列表
5.1.7 为需求分解任务
5.1.8 提交bug
5.1.9 禅道的自定义功能
5.1.10 文档管理
5.1.11 如何排查产品、项目是否有访问权限
5.1.12 年度总结,工作内容统计一览表说明
5.2. 12版创建分组和用户
5.2.1 建立部门结构
5.2.2 添加一个用户帐号
5.2.3 批量维护帐号
5.2.4 设置分组,建立权限体系
5.3. 12版本最简使用
5.3.1 使用禅道来进行项目任务管理
5.3.2 只使用禅道来做bug管理
5.3.3 只使用禅道来进行产品管理
5.3.4 个人使用禅道来做事务跟踪管理
5.4. 12版本基本使用
5.4.1 敏捷开发及scrum简介
5.4.2 禅道和scrum的对应关系
5.4.3 视频教程:第一个演示项目
5.4.4 维护联系人
5.4.5 导入excel、csv参考文档
5.4.6 工作方式的切换
5.4.7 操作获取积分功能
5.4.8 自定义必填项功能
5.5. 12版本进阶使用
5.5.1. 使用流程
5.5.1.1 禅道使用流程图解
5.5.2. 个人管理
5.5.2.1 使用待办进行个人事务管理
5.5.2.2 关注需要自己处理的任务、需求、bug
5.5.2.3 通过我的档案查看或者修改个人信息
5.5.2.4 视频教程:禅道使用之个人篇
5.5.3. 产品经理篇
5.5.3.1 维护产品
5.5.3.2 维护产品线
5.5.3.3 创建和评审需求
5.5.3.4 变更和评审需求
5.5.3.5 需求的状态和研发阶段
5.5.3.6 需求的注意事项
5.5.3.7 维护产品模块
5.5.3.8 建立发布计划
5.5.3.9 建立发布
5.5.3.10 路线图
5.5.3.11 文档管理
5.5.3.12 主持产品会议
5.5.3.13 参与项目管理、演示和总结
5.5.3.14 需求的基本统计报表
5.5.3.15 视频教程:禅道使用之产品经理篇
5.5.4. 项目经理篇
5.5.4.1 建立项目
5.5.4.2 组建项目团队
5.5.4.3 确定项目要完成的需求列表
5.5.4.4 组织进行任务分解
5.5.4.5 召开每天的站立会议
5.5.4.6 通过燃尽图了解项目的进展
5.5.4.7 通过各种列表的各种功能了解项目进展
5.5.4.8 召开演示会议和总结会议
5.5.4.9 项目任务基本的报表统计
5.5.4.10 视频教程:禅道使用之项目经理篇
5.5.5. 开发团队篇
5.5.5.1 参加项目计划会议,分解任务
5.5.5.2 领取任务,并每天更新任务
5.5.5.3 通过看板和树状图查看任务
5.5.5.4 创建版本
5.5.5.5 申请测试
5.5.5.6 解决bug
5.5.5.7 文档管理
5.5.5.8 确认bug
5.5.5.9 视频教程:禅道使用之开发团队篇
5.5.6. 测试团队篇
5.5.6.1 维护bug视图模块
5.5.6.2 提交bug
5.5.6.3 验证bug,关闭
5.5.6.4 激活bug
5.5.6.5 找到自己需要的bug
5.5.6.6 维护测试用例视图
5.5.6.7 创建测试用例
5.5.6.8 测试套件、报告和公共用例库的维护
5.5.6.9 管理测试版本
5.5.6.10 执行用例,提交Bug
5.5.6.11 查看报表统计
5.5.6.12 视频教程:禅道使用之测试团队篇
5.6. 12版本企业版使用
5.6.1 开源版功能
5.6.2 添加用户和权限维护
5.6.3 甘特图功能简介
5.6.4 工作日志管理功能简介
5.6.5 代码库(SVN GIT)及代码评审
5.6.6 日历功能简介
5.6.7 Excel导入导出功能简介
5.6.8 短信通知功能简介
5.6.9 运维管理
5.6.10 导出为Word功能简介
5.6.11 水晶报表(自定义报表)功能简介
5.6.12 LDAP用户验证功能简介
5.6.13 反馈管理
5.6.14 统计视图功能简介
5.6.15 文档管理
5.6.16 报表导出功能简介
5.6.17. 办公管理
5.6.17.1 考勤
5.6.17.2 请假
5.6.17.3 补班
5.6.17.4 加班
5.6.17.5 调休
5.6.17.6 节假日
5.6.18. 工作流
5.6.18.1 工作流内置流程
5.6.18.2 工作流功能简介
5.6.18.3 自定义内置工作流
5.6.18.4 新增工作流示例
5.6.18.5 工作流 JS、CSS 使用说明
5.6.19 视频及PPT资料
5.7. 新版本快速入门
5.7.1 15后新版本禅道的新增功能
5.7.2 15后新版本禅道的界面变化
5.7.3 15后新版本禅道的最简使用
6. 按照角色使用
6.1. 管理员
6.1.1 维护组织部门
6.1.2 维护用户
6.1.3 维护权限
6.1.4. 办公管理(企业版)
6.1.4.1 考勤(企业版)
6.1.4.2 请假(企业版)
6.1.4.3 补班(企业版)
6.1.4.4 加班(企业版)
6.1.4.5 调休(企业版)
6.1.4.6 节假日(企业版)
6.1.4.7 审批(企业版)
6.1.5. 工作流(企业版)
6.1.5.1 内置工作流(企业版)
6.1.6 短信通知(企业版)
6.1.7. 运维管理(企业版)
6.1.7.1 ZAgent的使用(企业版)
6.1.7.2 虚拟机的使用
6.1.8 LDAP用户验证(企业版)
6.2. 项目集负责人
6.2.1 创建项目集
6.2.2 添加产品
6.2.3 创建项目
6.2.4 管理人员
6.2.5 添加干系人
6.2.6 可视化大屏(企业版)
6.3. 产品经理
6.3.1 创建产品
6.3.2 维护模块
6.3.3 产品多分支/平台管理
6.3.4 维护计划
6.3.5 维护需求
6.3.6 需求的评审
6.3.7 创建发布
6.3.8 跟踪进度
6.3.9 反馈管理(企业版)
6.4. 项目经理
6.4.1 维护项目和执行
6.4.2 维护团队
6.4.3 关联需求
6.4.4 分解任务
6.4.5 跟踪进度
6.4.6 甘特图(企业版)
6.4.7 代码评审(企业版)
6.4.8 瀑布项目的使用
6.4.9. 瀑布项目特有功能(旗舰版)
6.4.9.1 维护项目的计划、阶段(旗舰版)
6.4.9.2 项目设计、矩阵(旗舰版)
6.4.9.3 项目评审、配置(旗舰版)
6.4.9.4 项目报告、挣值管理(旗舰版)
6.4.9.5 项目调研、估算(旗舰版)
6.4.9.6 项目问题、风险、机会(旗舰版)
6.4.9.7 项目过程、度量、QA(旗舰版)
6.4.9.8 项目培训、会议(旗舰版)
6.4.10 看板项目的使用
6.4.11 融合敏捷项目
6.4.12 融合瀑布项目
6.4.13 文档管理(企业版)
6.4.14 Excel 导入导出(企业版)
6.4.15 Word 导出(企业版)
6.4.16 统计(企业版)
6.4.17 报表导出(企业版)
6.4.18 资产库管理
6.5. 研发人员
6.5.1 参加产品计划会议,分解任务
6.5.2 领取任务,并每天更新任务
6.5.3 创建版本,提交测试
6.5.4 确认Bug,解决Bug
6.5.5 执行的综合、需求、Bug、任务看板
6.6. 测试人员
6.6.1 撰写用例
6.6.2 执行用例
6.6.3 提交Bug
6.6.4 验证和关闭BUG
7. 功能介绍
7.1. 新增概念
7.1.1 项目集(Program)
7.1.2 项目(Project)
7.1.3 产品(Product)
7.1.4 管理模型
7.2. 地盘
7.2.1 新手引导
7.2.2 全局添加
7.2.3 首页区块
7.2.4 新增内容
7.2.5 工作日志(企业版)
7.2.6 日历(企业版)
7.3. 项目集
7.3.1 项目集列表
7.3.2 项目集看板
7.3.3 创建项目集
7.3.4 分解子项目集
7.4. 产品
7.4.1 创建产品
7.4.2 维护模块
7.4.3 产品多分支/平台管理
7.4.4 维护计划
7.4.5 维护需求
7.4.6 需求的评审
7.4.7 创建发布
7.4.8 跟踪进度
7.5. 项目
7.5.1. 项目通用功能
7.5.1.1 项目的基本设置
7.5.1.2 维护项目的执行
7.5.1.3 维护项目的需求
7.5.1.4 维护项目的Bug、用例、测试单、测试报告
7.5.1.5 维护项目的文档
7.5.1.6 维护项目的版本、发布
7.5.2 看板项目
7.5.3. 瀑布项目特有功能(企业版与旗舰版)
7.5.3.1 维护项目的计划、阶段
7.5.3.2 项目设计、矩阵(矩阵为企业版)
7.5.3.3 项目评审、配置(旗舰版)
7.5.3.4 项目报告、挣值管理(旗舰版)
7.5.3.5 项目调研、估算(旗舰版)
7.5.3.6 项目问题、风险、机会(旗舰版)
7.5.3.7 项目过程、度量、QA(旗舰版)
7.5.3.8 项目培训、会议(旗舰版)
7.5.4 融合敏捷项目
7.5.5 融合瀑布项目
7.6. 执行
7.6.1 参加产品计划会议,分解任务
7.6.2 领取任务,并每天更新任务
7.6.3 创建版本,提交测试
7.6.4 确认Bug,解决Bug
7.6.5 执行的综合、需求、Bug、任务看板
7.7. 测试
7.7.1 撰写用例
7.7.2 执行用例
7.7.3 提交Bug
7.7.4 验证和关闭BUG
7.7.5 用例场景
7.8. 自动化测试
7.8.1 方案介绍
7.8.2 管理环境
7.8.3 配置环境
7.8.4 执行测试
7.9 DevOps(新平台版)
7.10. DevOps(旧版)
7.10.1. DevOps 功能
7.10.1.1 Git/SVN版本库管理和查看代码
7.10.1.2. 集成GitLab
7.10.1.2.1 绑定用户,关联issue,进行构建
7.10.1.2.2 合并请求
7.10.1.2.3 禅道中GitLab的权限
7.10.1.3 集成Jenkins,进行构建
7.10.1.4 集成SonarQube
7.11. 看板
7.11.1 通用看板功能
7.12. 资产库(旗舰版)
7.12.1 资产库管理(旗舰版)
7.13. 文档
7.13.1 文档管理
7.13.2 仪表盘
7.13.3 我的空间
7.13.4 产品空间
7.13.5 项目空间
7.13.6 接口空间
7.13.7 团队空间
7.13.8 文档详情
7.14. BI
7.14.1 维度(企业版8.4+)
7.14.2 大屏(企业版8.4+)
7.14.3. 大屏设计器
7.14.3.1 大屏设计器界面布局
7.14.3.2 大屏设计器引用图表
7.14.3.3 大屏设计器引用透视表
7.14.4 透视表(企业版8.4+)
7.14.5 图表(企业版8.4+)
7.14.6 数据表(企业版8.4+)
7.14.7. 度量项
7.14.7.1 查看度量项
7.14.7.2 度量项编码开发操作手册
7.14.8 统计(旧版)
7.14.9 报表导出(旧版)
7.14.10 自定义报表(旧版)
7.14.11 可视化(旧版)
7.15. AI
7.15.1 AI小程序简介
7.15.2 创建与设计AI小程序(企业版)
7.15.3 调试AI小程序(企业版)
7.15.4 发布与禁用小程序
7.15.5 前台小程序的应用
7.15.6 AI小程序的导入导出
7.15.7 管理AI小程序权限
7.16. 组织
7.16.1 团队成员和工作信息
7.16.2 人力资源日历(需安装插件)
7.16.3 组织动态
7.16.4 公司信息
7.17. 办公(企业版)
7.17.1 考勤
7.17.2 请假
7.17.3 补班
7.17.4 加班
7.17.5 调休
7.17.6 审批
7.18. 反馈(企业版)
7.18.1 反馈(企业版)
7.18.2 工单(企业版)
7.19. 学堂(企业版)
7.19.1 学堂的课程和后台(企业版)
7.19.2 实践库(企业版)
7.20. 工作流(企业版)
7.20.1 内置工作流(企业版)
7.21. 后台设置
7.21.1 首页
7.21.2. 系统设置
7.21.2.1 模式、备份、回收站
7.21.2.2 聊天
7.21.2.3 授权、安全、定时、时区、重建索引、表引擎
7.21.2.4 LDAP(企业版)
7.21.3 功能开关(超级管理员)
7.21.4. 人员管理
7.21.4.1 维护组织部门
7.21.4.2 维护用户
7.21.4.3 维护权限
7.21.5 模型配置
7.21.6. 功能配置
7.21.6.1 地盘、产品、执行、测试、看板、文档、反馈
7.21.6.2 审批、度量、用户、会议室
7.21.6.3 审批流程(旗舰版)
7.21.7 文档模板(旗舰版)
7.21.8. 通知设置
7.21.8.1 邮件
7.21.8.2 webhook
7.21.8.3 短信
7.21.8.4 浏览器
7.21.8.5 设置
7.21.9 插件管理
7.21.10 二次开发
7.21.11 数据导入(管理员)
7.21.12. 权限维护和控制
7.21.12.1 项目集的权限维护和访问控制
7.21.12.2 产品的权限维护和访问控制
7.21.12.3 项目的权限维护和访问控制
7.21.12.4 执行的权限维护和访问控制
7.21.12.5 项目和执行的访问控制和数据关系
7.21.13. AI配置
7.21.13.1 语言模型
7.21.13.2 AI提词
7.21.14. DevOps设置
7.21.14.1. 资源
7.21.14.1.1 主机
7.21.14.1.2 服务(企业版)
7.21.14.1.3 域名(企业版)
7.21.14.1.4 其他配置
7.21.14.2 指令
7.22. 客户端增强版会议
7.22.1. 音视频会议配置
7.22.1.1 安装音视频服务端
7.22.1.2 安装SRS音视频服务端
7.22.1.3 开启和配置音视频功能
7.22.2. 发起会议
7.22.2.1 一对一会话中发起音视频会议
7.22.2.2  群组会话中发起音视频会议
7.22.2.3 独立发起音视频会议入口
7.22.3. 加入会议
7.22.3.1 分享音视频会议到会话
7.22.3.2 通过会议的ID加入会议
7.22.4. 预约会议
7.22.4.1 预约会议
7.22.5. 会议应用
7.22.5.1 音视频会议应用
8. 其他相关
8.1. 其他
8.1.1 禅道所使用到的第三方代码
8.1.2 禅道FAQ
8.1.3 如何帮助禅道项目
8.1.4 禅道商业服务
8.1.5 禅道项目的贡献者
8.1.6 历史修改记录

ZAgent的使用(企业版)

2022-09-20 19:57:42
分享链接

ZAgent是禅道开源的软件自动化测试调度平台,它借助虚拟化技术,为用户提供了一个分布式、集中管理的的测试环境,从而提高测试执行效率,减少测试资产的投入。
随着敏捷、DevOps和CI/CD等研发过程和实践的广泛应用,软件测试、特别是自动化测试,面临着更大的机遇和挑战。自动化测试,作为流水线的构建、部署、验证、发布过程中的一个不可忽视的环节,其能否高效运行,同测试环境的有效管理是密不可分的。借助ZAgent,我们可自动化地、按需创建、用后即焚地管理和使用测试环境。

一、部署KVM宿主机环境

这里使用Ubuntu20.04桌面版来作为宿主机,搭建虚拟化环境。

 

1. 首先,验证主机是支持虚拟化,有输出表明支持

root@pve:~# egrep -o "(vmx|svm)" /proc/cpuinfo 
vmx
vmx
vmx


2. 安装虚拟化软件

sudo apt-get install qemu-kvm libvirt-daemon-system libvirt-clients libvirt-dev qemu virt-manager bridge-utils
sudo service libvirtd restart


老的Ubuntu系统,请用以下命令替换。注意libvirt-daemon-system、libvirt-clients换成libvirt-bin。

sudo apt-get install qemu-kvm libvirt-bin qemu virt-manager bridge-utils
sudo service libvirt-bin restart


3. 下载系统和驱动

· 从 这里下载微软Win10官方光盘镜像;

· 在 这里下载虚机I/O设备驱动,我选择的是稳定版virtio-win-0.1.185.iso。

 

4. 打开虚拟机管理工具

在图形界面中打开终端,输入virt-manager,启动虚拟机管理工具; 

图中显示的QEMU/KVM表明,已成功连接到本地服务;

如果状态为断开,请双击尝试连接,若显示不能连接到libvirtd服务,可重启机器修复;

· 您也可以通过点击菜单“文件->添加连接”,来连接和管理远程宿主机上的虚拟机,格式形如qemu+ssh://user@192.168.0.56:22/system?socket=/var/run/libvirt/libvirt-sock。

 

5. 新建虚拟机

· 点击菜单“文件->新建虚拟机”,打开虚拟机创建向导; 

· 选择前面下载的Win10镜像文件作为本地安装介质;

 

· 网络设置页面,选择“主机设备”也就是宿主机的网卡,这样虚拟机会作为局域网中的一台电脑而存在; 

· 按向导完成其他设置,并保存。

 

6. 设置虚拟机

· 双击打开虚拟机窗口,点击”查看->详情“,进入虚拟机属性页面;

· 点击引导选项卡,设置系统从光盘启动; 

· 点击左下角”添加硬件”,增加一个光盘,指向下载的virtio驱动; 

 

7. 安装虚拟机

· 启动后,自动从光盘安装系统;

· Windows安装向导中,选择加载驱动程序; 

· 选择virtio驱动CDROM里,NetKVM目录下对应系统的文件; 

· 完成后续的安装步骤。

 

8. 结束安装

· 安装完成后,再次打开虚拟机窗口; 

· 进入CDROM选项卡,删除安装光盘;

· 启动虚拟机,更新系统,并安装测试相关软件;

· 完成后续的安装步骤。

二、安装KVM虚拟机

首先,我们来了解一下KVM虚拟机有关的几个概念和工具。

· kvm:基于内核的虚拟机(引擎)

· qemu:用于模拟虚拟机IO设备

· qemu-img:虚拟机磁盘管理工具

· libvirt:虚拟化服务的API接口

· virsh:基于libvirt实现的命令行工具

· qemu-manager:图形化管理工具


新建KVM虚拟机时,可以指定另一磁盘文件作为 BackingFile。BackingFile是一个只读的虚拟磁盘基础映像,可以在多个虚拟机间进行共享。基于BackingFile创建和运行虚拟机时,只会在自己的磁盘文件中增量地写入文件,从而提高效率、节省磁盘和维护成本。

虚拟机快照保存了虚拟机在某个指定时间点的状态,当我们在自动化测试过程中遭遇问题或错误时,可以利用快照保存、并恢复到执行中的某个时间点。借助BackingFile机制,虚拟机支持形如以下的多层依赖的快照链(<--表示依赖的方向)。

base image <-- vm01 <-- snap 1 <-- snap 2 <-- vm02(active)


可使用以下命令,将处于快照链中的某个虚机,导出形成一个独立的磁盘映像文件,其不再依赖其它映像。

qemu-img convert -O qcow2 vm02.qcow2 vm-templ.img


假设我们在用户的工作目录中,建立了以下目录。

kvm          根目录
   iso       存放光盘镜像
   base      存放基础磁盘镜像BackingFile
   share     存放共享磁盘镜像,用户存储测试工具、驱动等
   image     存放测试机的磁盘镜像
   xml       存放导出的虚拟机XML配置文件


1. 下面用一个例子,给大家介绍下快速创建测试虚拟机的方法。

 

· 按照上面的步骤,创建一个Win10虚拟机;

· 在虚拟机中,安装好Chrome浏览器和测试相关软件;

· 使用以下命令,新建一个用于保存工具的共享磁盘;

qemu-img create -f qcow2 -o cluster_size=2M kvm/share/tools.qcow2 10G 


· 挂载共享磁盘到虚拟机,复制工具和文件到该共享磁盘;

· 移除该虚拟机,注意在确认对话框中,请选择“不删除相关磁盘文件”;

· 移动虚机主磁盘文件到基础镜像目录,如kvm/base/windows/win10。

· 执行以下命令,以上述基础镜像作为BackingFile,创建新的虚拟机磁盘;

qemu-img create -f qcow2 -o cluster_size=2M,backing_file=kvm/base/windows/win10/pro-x64-zh_cn.qcow2 kvm/image/test-win10-pro-x64-zh_cn-01.qcow2 50G


· 打开qemu-manager,新建测试虚拟机,挂在新创建的虚拟机磁盘和共享磁盘。

 

2. 除了使用图形界面的qemu-manager外,这里也提供一种命令行的方法,可用于代码中。

 

· 导出虚拟机XML配置文件;

virsh dumpxml test-win10-pro-x64-zh_cn > kvm/xml/test-win10-pro-x64-zh_cn.xml


· 修改XML配置文件中的以下字段:

name

uuid

vcpu

memory和currentMemory

mac address

第1块disk的source file

 

· 在第1块disk的Element中,加入以下BackingFile有关的内容:

<backingStore type="file" index="2">
   <format type="qcow2"/>
   <source file="/home/aaron/kvm/base/windows/win10/pro-x64-zh_cn.qcow2"/>
<backingStore/>


· 如需要用页面VNC访问虚拟机桌面,找到XML的graphics元素,修改成以下内容;

<graphics type="vnc" port="-1" autoport="yes" listen="0.0.0.0" passwd="P2ssw0rd">
  <listen type="address" address="0.0.0.0"/>
</graphics>


· 使用以下命令定义虚拟机;

virsh define kvm /xml/test-win10-pro-x64-zh_cn.xml


· 使用以下命令启动虚拟机;

virsh start test-win10-pro-x64-zh_cn

 

· 使用以下命令获取虚拟机的VNC端口编号,在VNC软件中使用”5900+该数字“的端口,访问虚拟机远程桌面;

virsh vncdisplay test-win10-pro-x64-zh_cn 

 

2. 最后,我们介绍推荐的第三种方法,在代码中使用libvirt*接口来管理虚拟机。禅道基于GO语言的实现,请见这里 。

 

虚拟机有关常用命令:

# 查看虚拟机信息qemu-img info --backing-chain kvm/image/test-win10-pro-x64-zh_cn-01.qcow2
# 修改虚拟机磁盘大小qemu-img resize x64-pro-zh_cn.qcow2 +10G
# 查看虚拟机里列表virsh list --all
# 查看虚拟机VNC端口virsh vncdisplay win10-test
# 导出虚拟机XML配置文件virsh dumpxml win10-test > win10-test.xml
# 创建虚拟机磁盘镜像qemu-img create -f qcow2 -o cluster_size=2M,backing_file=base.qcow2 win10-test.qcow2 40G
# 转换虚拟机镜像qemu-img convert -O qcow2 vm02.qcow2 vm-templ.img # 定义、取消定义,启动、停止虚拟机virsh define win10-test.xmlvirsh start win10-testvirsh destroy win10-testvirsh undefine win10-test

三、部署远程桌面代理

在宿主机上,完成以下步骤。

 

1. 执行以下命令,克隆代理项目的代码到kvm目录下;

git clone https://github.com/novnc/websockify.git ~/kvm/websockify


2. 在websockify同级目录,新建token文件夹;


3. 在token文件夹中,新建如下格式的配置文件;

vm01: 192.168.1.215:5904
    vm01:用于访问虚拟机的token;
    192.168.1.215:宿主机的IP地址;
    5901:虚拟机的VNC端口号。


注:由于QEMU/KVM虚拟机的VNC服务端口是自增的,在ZAgent启动宿主机代理时,我们使用代码来自动创建10个token文件,完成端口5901-5910到token的映射,并使用一个Map缓存起来。当宿主机代理收到创建虚拟机的请求时,可根据VNC的端口返回其对应的token。具体代码实现可参考 这里

 

4. kvm下使用virt-manager,修改虚拟机远程桌面的类型为VNC Server,地址(Address)为所有接口(All interface),端口为自动(Auto);


5. 执行以下命令,启动websockify服务。6080为代理端口,../token/为端口转发配置文件所在的目录;

~/kvm/websockify/run --token-plugin TokenFile --token-source ~/kvm/token/ 6080

四、部署noVNC服务

1. 执行以下命令,获取远程桌面项目的代码;

https://github.com/novnc/noVNC.git


2. 将项目中的文件拷贝到Web服务器中,或使用以下步骤安装一个静态服务器;

  • 这里下载并安装node.js环境;
  • 执行npm install -g light-server安装服务器;
  • 执行light-server -s noVNC启动noVNC服务,默认端口为4000。

五、访问远程桌面

1. 在工作电脑上,用浏览器打开http://<宿主机IP地址>:4000/vnc.html;

 

2. 填入以下信息:

主机:宿主机IP地址;

端口:websockify代理的端口号;

路径:websockify?token=vm01,其中vm01为上述token配置文件中的第一列。

 

3. 点击网页中的连接按钮,打开虚拟机vm01的远程桌面;

 

4. 另外,您也可使用简化版的vnc_lite.html页面来访问桌面。

http://<宿主机IP地址>:4000/vnc_lite.html?host=192.168.1.215&port=6080&path=websockify/?token=vm01

六、部署ZAgent应用服务

1. 从这里下载ZAgent应用,程序分为3个部分,分别为:

  • 服务端程序 zagent-server
  • 宿主机代理 zagent-host
  • 虚拟机代理 zagent-vm


2. 复制zagent-server到服务器,执行;

./zagent-server


3. 复制zagent-host到宿主机,执行;

./zagent-host -t host -s http://服务器IP:服务器端口 -i 本机IP -p 本机端口


4. 启动前面安装的Win10虚拟机,在用户根目录下创建kvm文件夹,得到形如c:\Users\aaron\kvm的目录;

 

5. 复制zagent-vm文件到c:\Users\aaron\kvm\agent目录;

 

6. 复制以下内容,保存为c:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp\zagent.bat。Windows StartUp目录下的zagent-vm代理程序,在系统启动时会被自动运行。

@echo on
:start
 
ping /n 3 114.114.114.114 | findstr "TTL=" && goto next || goto start
:next
cmd /k "cd /d c:\Users\aaron\kvm\agent && zagent-vm -t vm -s 服务器IP:服务器端口"
pause

以上批处理文件通过ping 114.114.114.114命令,等待虚拟机网络就绪,然后运行zagent-vm程序。

 

7. 对于Linux的虚拟机,请使用以下Shell脚本启动ZAgent虚拟机代理。

#!/bin/sh
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
serverAdr="114.114.114.114"
ping -c 1 $serverAdr > /dev/null 2>&1
while [ $? -ne 0 ]; do
  echo -e "\e[1A\e[K $(date): Connecting - ${serverAdr}"
  sleep 1
  ping -c 1 $serverAdr > /dev/null 2>&1
done
echo "$(date): Connected - ${serverAdr}";
cd /home/aaron/dev/project/zagent
git fetch --all && git reset --hard origin/main && git pull
go get all
# nohup go run cmd/agent-vm/main.go -t vm > zagent.log 2>&1
go run cmd/agent-vm/main.go -t vm




5053 先知