自动化-搭建Jenkins实现Pytest代码自动部署
本文主要讲述如何通过Docker或直接在Windows上安装Jenkins,如何使用Jenkins自动部署测试代码
前言
自动化测试代码最大的作用就是进行回归测试,监控软件产品的运行状况.而Jenkins可以实现自动化代码的自动部署,不用每一次都用人工触发.根据目前的测试需求,我们希望通过Jenkins达到:
- 每天定时运行,监控线上环境
- 集成Allure报告,测试结束后起一个allure服务,返回测试报告链接
- 使用邮件通知测试结果
需求明确了,实现方法上,Docker及windows版本的Jenkins我会分别安装1次
需要特意提及的是,你在使用此教程之前,应该提前将自己的测试代码发布到了git平台,并且正确配置了requirement.txt
Docker搭建Jenkins
安装Jenkins
下载jenkins镜像
docker pull jenkins/jenkins:lts #
通过Dockerhub官方文档, 官方版本Jenkins 18年之后就再也没有更新,推荐使用jenkins/jenkins:lts 镜像
创建本地挂载目录
mkdir -p /root/docker/jenkins_home # 创建本地挂载的路径 chown -R 1000:1000 /root/docker/jenkins_home # 将jenkins_home文件夹所有人及所有组为1000, which is docker镜像中用户的uid及group id
如果没有变更挂载目录拥有者,jenkins容器将因为无法在本地目录初始化文件,而处于EXIT状态
我们可以通过 docker logs $容器id查看错误原因
容器启动后,我们进入docker容器内,通过id命令也就能看到容器内的用户uid和gid
[root@VM-4-7-centos docker]# docker exec -it c62 bash jenkins@c62b03c8a932:/$ id >> uid=1000(jenkins) gid=1000(jenkins) groups=1000(jenkins)
容器部署
docker run -id --name jenkins -p 8081:8080 -v /root/docker/jenkins_home/:/var/jenkins_home jenkins/jenkins:lts
安装python3&pip3
确认容器目前环境
docker exec -it -u root $container_id bash # 进入jenkins容器内部环境
python3 -V # 查看python3版本, 默认的环境当然是没有的
>> python: command not found
cat /etc/issue # 查看系统信息,Debian系统就要用apt-get命令了
>> Debian
cat /etc/debian_version # Debian系统版本号
>> 11.1
更换阿里云源
备份source.list
cp /etc/apt/source.list /etc/apt/source.list.bak # 复制备份原有环境 # 编辑source.list
apt-get update # 刷新依赖列表
apt-get install vim --fix-missing # 安装vim,是的, 默认环境连vim都没有
vim /etc/apt/source.list # 编辑source.list
更换源
删除source.list内容,按照版本号粘贴镜像地址,保存
参照: debian镜像-debian下载地址-debian安装教程-阿里巴巴开源镜像站 (aliyun.com)
按照我找到的教程,是不用更换阿里源的,但是使用apt-get时一致报错链接错误,索性直接换源吧
安装python3&pip3
初始化安装环境
apt-get update # 更新依赖关系列表
apt --fix-broken install # 重新建立包的依赖关系
# 安装python3依赖环境
apt-get -y install gcc automake autoconf libtool make --fix-missing
apt-get -y install make*
apt-get -y install zlib*
apt-get -y install openssl libssl-dev
apt-get install sudo
创建并进入python3文件夹
mkdir /var/jenkins_home/python3
cd /var/jenkins_home/python3
安装python3
Python版本下载:Index of /ftp/python/3.9.6/,复制所需版本的安装包链接.然后解压进行安装
curl -O https://www.python.org/ftp/python/$版本号/Python-$版本.tgz # 通过链接下载链接下载安装包,约5min
tar -xvf $安装包 && cd $生成的文件夹 # 解压并进入文件夹
# 使用make命令安装python3
./configure --prefix=/var/jenkins_home/python3 # 设定安装路径为/var/jenkins_home/python3,不设定贼会分散在不同的文件中
make && make install
#添加软连接
find / -name python3 # 寻找python3命令
ln -s /var/jenkins_home/python3/bin/python3 /usr/bin/python # 设置后命令行调用python命令,就会找到我们的python3
find / -name pip3
ln -s /var/jenkins_home/python3/bin/pip3 /usr/bin/pip
# 验证
python3 -V
安装与代码开发环境一致的python和pip版本.我这边是python3.9, pip 21.3
安装依赖库
- 构建1次 ,拉取工作区代码
如果使用Docker,肯定失败
- 安装第三方库
cd /var/jenkins_home/workspace/$你的项目
更新pip以及setuptools
python -m pip install --upgrade pip
python -m pip install --upgrade setuptools
根据requirement.txt安装第三方库
pip install -r requirement.txt --default-time=10000
不更新pip以及setuptools,安装第三方库时可能会遇到ERROR:Can not execute
setup.py
since setuptools is not available in the build environment·
Windows安装Jenkins
环境准备
确认安装Java版本为 8或者11,并正确配置环境变量
官方推荐使用java11,使用了错误的版本安装后,可能会导致无法正常访问.Jenkins Java要求:Java requirements (jenkins.io)
确定按照requirement.txt要求安装了第三方库
pip install -r requirement.txt
下载安装
Jenkins官方下载页面,可下载war包或者Windows版本msi包安装.
war包的话使用java命令一键部署
java -jar jenkins.war –httpPort=9999
msi包可以在UI页面 安装, 除了安装目录其余地方几乎不要变动
下载地址: Jenkins download and deployment
msi方式安装如何查看Jenkins部署信息?
在Jenkins安装路径中, 打开配置文件 Jenkins.xml, arguments内会显示端口等信息
系统运行services.msc, 进入服务页面查找Jenkins可查看部署状态
配置Jenkins
云服务器需要开放8081端口, windows直接跳过
访问 $server_ip:8081,按照指令解锁Jenkins
如果顺利的话,此时会进入一个解锁Jenkins 的页面
选择安装默认插件
此过程大概5分钟
创建admin账户,进入Jenkins UI页面
部署自动化测试项目
创建项目
- 创建任务名(不要使用汉字)
- 选择freestyle project
目前比较流行的Devops,会采用Pipeline任务类型, 通过Pipeline Script可以将多个节点的任务串连起来,完成复杂任务编排和可视化.
源码管理
源码管理我这里选择git
Repository url : $项目SSH链接
Credentials -> 添加
按下图配置,其中Primary key 选择电脑中git ssh私钥
Credentials 使用刚才创建的用户名
构建
构建触发器
触发器目前觉得比较有用的是定时触发以及远程触发
定时触发语法:
我们的需求是每天触发一次,可以这么设置:
H 20 * * * # 每天晚上8点触发代码
构建环境
比较常用的是Delete workspace before build starts,每次运行都会来取最新的代码进行测试
构建
选择命令方式
- Linux环境选择ExcuteShell
- Windows环境选择Execute Windows batch commamd
输入代码触发命令
python run.py
命令中可Jenkins环境变量:
Windows:%BUILD_NUMBER% %变量名%
Linux:${BUILD_NUMBER} ,也可以直接使用$BUILD_NUMBER
集成Allure
插件管理搜索下载 Allure
Global Tool Configuration新增allure commandline
graph LR Manage_Jenkins--> Global_Tool_Configuration --> allure_commandline --> 新增 --> From_Maven_Central新增
Jenkins配置Allure
构建后操作,下拉选择Allure Report, Path填写Allure报告存放地址(根目录相对路径)
设置邮件通知
邮件通知具体参照博客: jenkins配置邮件发送 - 张小七soso - 博客园 (cnblogs.com)
值得补充的是:
163邮箱有非ssl和ssl2种端口,我们使用ssl模式的端口进行配置
邮件重点配置的是邮件内容,可以使用环境变量进行配置,如:
构建项目:$PROJECT_NAME <br/> 构建版本:$BUILD_NUMBER <br/> 构建状态:$BUILD_STATUS <br/> 触发原因: ${CAUSE}<br/>
默认失败时发送邮件, 触发结果建议添加Always,每一次构建都会发送通知
以下做简单流程总结:
邮箱开启SMTP服务(163为例)
邮箱开启SMTP服务后,Jenkins第三方用户才能使用授权密码登录邮箱发送邮件
graph LR 登录163 --> 设置 --> 开启POP3/SMTP服务 --> 完成认证 --> 记录授权密码
配置SMTP
graph 系统设置配置管理员邮箱-->配置Extend_Email_Notification-->配置邮件通知-->Job内配置邮件通知
测试运行
手动构建,查看返回结果是否与本地运行一致
Allure报告运行OK
邮件通知成功发出
总结
使用Docker并没有让部署工作变得轻松,相比直接安装Jenkins,因为Docker容器Jenkins环境太过简陋,部署过程中解决很多环境的问题.后边可以考虑尝试使用dockerfile来完成这些操作.
待解决的问题
Docker版本Jenkins在运行hrun代码时发生了ModuleNotFoundError: No module named ‘_ctypes‘
问题: ctypes模块python中主要用于兼容C语言数据类型的功能模块.此模块,python自带,而Httprunner在运行时调用此模板报错.经过排查,发现为Linux系统缺少libffi-dev导致,但是安装后make python3失败
[Solved] ModuleNotFounderror: No Module named _ctypes in Python (pythonpool.com)
sudo apt install libffi-dev
Reference
Docker+LNMP+Jenkins+ 码云实现 PHP 代码自动化部署 | PHP 技术论坛 (learnku.com)
(63条消息) Jenkins构建项目_florachy的博客-CSDN博客
[Jenkins集成allure测试报告 - linux超 - 博客园 (cnblogs.com)](https://www.cnblogs.com/linuxchao/p/linuxchao-jenkins-allure.html#:~:text=Allure Commandline配置 1.jenkins配置页,选择全局工具配置 [Global,Tool Configuration] 2.全局宫配置页下拉到最后一项,你会看到”Allure Commandline”项, 按下图配置之后保存即可)