这里写自定义目录标题
Jenkins用于持续集成
开发/运维视角
没有自动:编译、打包、上传服务器、系统部署。多次修改程序BUG,重复多次同样工作
测试人员视角
Jenkins 环境搭建
注意: jenkins在工作环境中通常作为独立的应用,安装在独立的服务器上面 学习时可以用虚拟机模拟一个独立的环境,也可以直接在自己的windows上面进行安装
下载: www.jenkins.io/download/
建议下载war版本, 这样的话在不同环境的操作方式都是类似的
依赖环境: JAVA环境
极简化运行方式: java -jar jenkins.war
运行方式: java -jar jenkins.war --httpPort=8080
指定编码防止乱码: java -Dfile.encoding=utf-8 -jar jenkins.war --httpPort=8080
禁用jenkins自动关闭子进程功能: -Dhudson.util.ProcessTree.disable=true
如果jenkins在本机部署程序,就需要加上这个配置
指定JENKINS_HOME工作目录: java -Dfile.encoding=utf-8 -Dhudson.util.ProcessTree.disable=true -DJENKINS_HOME= E:\Tony\jenkins\jenkins_home -jar jenkins.war --httpPort=8080
jenkins_home 保存了jenkins运行过程中产生的所有数据,如果删除或者改变jenkins_home的 目录,等同于重新安装
linux下后台运行方式:
nohup java -Dfile.encoding=utf-8 -Dhudson.util.ProcessTree.disable=true - DJENKINS_HOME=C:\Jenkin -jar jenkins.war --httpPort=8080 > nohup.log 2>&1 &
访问方式: 使用浏览器打开地址:http://ip:端口, 例如: http://127.0.0.1:8080
Jenkins初始化启动
- 打开浏览器进入链接
- 输入初始密码,激活系统
- 进入插件安装选择 【有网络】
- 设置初始用户和密码
- 实例配置 [此处配置的url地址应该要让公司内部其他的机器能够访问,不建议用127.0.0.1] 关闭jenkins – 前台运行 ctrl+c 后台运行 1. 干掉进程, 2. http://127.0.0.1:8080/exit 重新加载配置 http://127.0.0.1:8080/reload 重启 http://127.0.0.1:8080/restart
项目实战
配置jenkins自动化部署任务【一般由开发配合完成】
源码管理 – 任务执行过程中,涉及源代码的,一般都需要配置
构建触发器 – 定义 何时执行任务
构建 – 任务具体要做什么?
构建后 – 任务做完了还要做什么?
a. 检查git插件是否安装 [表示jenkins能够进行git操作]
b. 检查git插件配置
c. 检查jenkins所在的电脑是否安装git
1、创建Jenkins项目
2、源码管理
git 服务器账户配置
3、Jenkins定时任务
Poll SCM:定时检查源码变更(根据SCM软件的版本号),如果有更新就checkout最新code下 来,然后执行构建动作。如下图配置:
/5 * * * (每5分钟检查一次源码变化)
Build periodically:周期进行项目构建(它不关心源码是否发生变化),如下图配置:
H 2 * * * (每天2:00 必须build一次源码)
在 Schedule 中填写 0 * * * * 所以 0 * * * * 表示的就是每个小时的第 0 分钟执行构建。
官方说明翻译
MINUTE HOUR DOM MONTH DOW 这个字段就好比cron定时任务语法(只有较小的差别),具体来说,每行由5个被TAB或空格分割 的字段组成。
其中每个字段除了可以使用取值范围内的值外,还能使用一些特殊的字符。
1、* 匹配范围内所有值
2、 M-N 匹配M~N范围内所有值
3、 M-N/X 或者 */X 在指定M~N范围内或整个有效区间内每隔X构建一次
4、A,B,…,Z 匹配多个值
为了在系统中生成定时任务,符号H(代表“Hash”,后面用“散列”代替)应该用在可能用到的 地方,例如:为十几个日常任务配置0 0 * * *将会在午夜产生较大峰值。相比之下,配置H H * * * 仍将每天一次执行每个任务,不是都在同一时刻,可以更好的使用有限资源。
符号H可用于范围,例如,H H(0-7) * * * 代表凌晨0:00到 上午7:59一段时间。你还可以用H代表 有或无范围的区间。
符号H 在一定范围内可被认为是一个随机值,但实际上它是任务名称的一个散列而不是随机函数。
需要注意的是,月份中的某天-DOM字段,类似于*/3 或者 H/3 的短周期由于月份的天数不固定, 在大多数月尾总不会工作。例如,*/3 将会在一个月里面的第一天、第四天。。。第31天执行,下
个月的那天继续重复执行。散列一般被选择在1-28天内,所以H/3将会在跑到月底的3-6天内导致 空白。(长时间循环将会导致长度不一,但是这种影响也是不明显的。)
空行和以#开头的行将会被认为是注释。
另外,@yearly, @annually, @monthly, @weekly, @daily, @midnight, 和 @hourly也支持别 名。这些使用散列系统自动匹配,例如:@hourly 和 H * * * * 一样代表一个小时内的任何时刻。 @midnight实际上代表凌晨0:00到凌晨2:59之间的一段时间。
例如:
每隔15分钟。(或许:07, :22, :37, :52)
H/15 * * * *
每前半小时中每隔10分钟。 (3次, 或许:04, :14, :24)
H(0-29)/10 * * * *
每个工作日从早上9点45分开始到下午3点45分结束这段时间内每间隔2小时的45分钟那一刻。
45 9-16/2 * * 1-5
每个工作日从早上9点到下午5点这段时间内每间隔2小时之间的某刻。(或许在上午10:38, 下午 12:38, 下午2:38 , 下午4:38)
H H(9-16)/2 * * 1-5
每月(除了12月)从1号到15号这段时间内某刻。
H H 1,15 1-11 *
4、构建
windows下
后台运行 start /b pythonw api.py 1>stdout.txt 2>stderr.txt
关闭: taskkill /f /im pythonw.exe | echo “exit”
项目启动/关闭 – 由开发人员提供文档说明。 不同的项目 启动和关闭 都可能不一样,不要照抄,向开发去了解
1 、taskkill是Windows命令行里终止指定程序“进程”的命令。
2、 /f 表示强制终止
3 、/im 表示指定的进程名称,例如“pythonw.exe"
4 、如果不使用名称,使用进程号,则用/PID,例如(假设已知道某进程的PID号是3352,PID号可以 在windows任务管理器中查看):
5、 taskkill /f /pid 3352
4、邮件通知
邮件发送配置
- jenkins邮箱服务器配置 Extended E-mail Notification
记得把 管理员邮箱 也配置好 自己学习的时候,可以自己去注册一个 163邮箱
2.测试报告发送配置 构建后操作 - 选择发送邮件
${FILE, path=“C:\Users\zhang.jenkins\workspace\autotest\result1.html”} 注意:默认情况下只有出错误才会发邮件,此处我们每次测试都要发送测试报告
5、常见问题
- 【中文任务名乱码】
a. 启动的时候 添加 -Dfile.encoding=utf-8
b. 在Jenkins的【系统管理】->【系统设置】中添加“全局属性”,其界面如下
6、提问解答
一、windows下面的jenkins也可运行后台模式吗?
2. java命令运行可以后台 start /b 类似 linux下面的 nohup
3. 安装为 windows 服务
二、Jenkins和测试服务器应该没有什么必要关联把
有关联
git独立服务器, jenkins 独立服务器, 系统运行的测试服务器, 执行测试脚本的也是独立服务 器
jenkins通过ssh远程连接其他机器执行命令
三、Jenkins可以支持pytest-xdist多机器并行执行吗
多个机器都能正常从git取最新代码吗
jenkins你可以理解 是一个人。
测试人员能够通过命令行实现的,jenkins都可以做到 插件: Publish Over SSH 插件很多, 重要是思路, 每一个插件的具体步骤都有很多资料
四、有些git服务器(gitlab 流水线)集成了 ci/CD持续集成, 和jenkins比较?
jenkins 作为老牌的持续集成工具, 插件优势, 资料的优势, 易用性 其他的持续集成工具,上手门槛偏高(开发、运维人员 亲和力强)
五、 我们是在jenkins那台机器上执行脚本的,但是我们每个人提交的代码可能有些模块在那台执 行的机器上没有安装或者版本不同,这种情况怎么解决呢?
答: 如果是同一个项目,代码统一提交在 git 如果有模块需要安装,那就增加一个模块安装 命令执行