前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >自动化-搭建Jenkins实现Pytest代码自动部署

自动化-搭建Jenkins实现Pytest代码自动部署

作者头像
打铁读书郎
发布2024-04-11 20:50:08
1410
发布2024-04-11 20:50:08
举报

自动化-搭建Jenkins实现Pytest代码自动部署

本文主要讲述如何通过Docker或直接在Windows上安装Jenkins,如何使用Jenkins自动部署测试代码

前言

自动化测试代码最大的作用就是进行回归测试,监控软件产品的运行状况.而Jenkins可以实现自动化代码的自动部署,不用每一次都用人工触发.根据目前的测试需求,我们希望通过Jenkins达到:

  1. 每天定时运行,监控线上环境
  2. 集成Allure报告,测试结束后起一个allure服务,返回测试报告链接
  3. 使用邮件通知测试结果

需求明确了,实现方法上,Docker及windows版本的Jenkins我会分别安装1次

需要特意提及的是,你在使用此教程之前,应该提前将自己的测试代码发布到了git平台,并且正确配置了requirement.txt

Docker搭建Jenkins

安装Jenkins

下载jenkins镜像

代码语言:javascript
复制
docker pull jenkins/jenkins:lts  #

通过Dockerhub官方文档, 官方版本Jenkins 18年之后就再也没有更新,推荐使用jenkins/jenkins:lts 镜像

创建本地挂载目录

代码语言:javascript
复制
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)

容器部署

代码语言:javascript
复制
docker run -id --name jenkins -p 8081:8080 -v /root/docker/jenkins_home/:/var/jenkins_home jenkins/jenkins:lts

安装python3&pip3

确认容器目前环境
代码语言:javascript
复制
docker exec -it -u root $container_id bash  # 进入jenkins容器内部环境
代码语言:javascript
复制
python3 -V    # 查看python3版本, 默认的环境当然是没有的
>> python: command not found
cat /etc/issue # 查看系统信息,Debian系统就要用apt-get命令了
>> Debian      
cat /etc/debian_version   # Debian系统版本号
>> 11.1
更换阿里云源

备份source.list

代码语言:javascript
复制
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

初始化安装环境

代码语言:javascript
复制
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文件夹

代码语言:javascript
复制
mkdir /var/jenkins_home/python3
cd /var/jenkins_home/python3

安装python3

Python版本下载:Index of /ftp/python/3.9.6/,复制所需版本的安装包链接.然后解压进行安装

代码语言:javascript
复制
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. 构建1次 ,拉取工作区代码

如果使用Docker,肯定失败

  1. 安装第三方库
代码语言:javascript
复制
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要求安装了第三方库

代码语言:javascript
复制
pip install -r requirement.txt

下载安装

Jenkins官方下载页面,可下载war包或者Windows版本msi包安装.

war包的话使用java命令一键部署

代码语言:javascript
复制
java -jar jenkins.war –httpPort=9999

msi包可以在UI页面 安装, 除了安装目录其余地方几乎不要变动

下载地址: Jenkins download and deployment

msi方式安装如何查看Jenkins部署信息?

在Jenkins安装路径中, 打开配置文件 Jenkins.xml, arguments内会显示端口等信息

系统运行services.msc, 进入服务页面查找Jenkins可查看部署状态

配置Jenkins

  1. 云服务器需要开放8081端口, windows直接跳过
  2. 访问 $server_ip:8081,按照指令解锁Jenkins 如果顺利的话,此时会进入一个解锁Jenkins 的页面
  3. 选择安装默认插件 此过程大概5分钟
  4. 创建admin账户,进入Jenkins UI页面

部署自动化测试项目

创建项目

  1. 创建任务名(不要使用汉字)
  2. 选择freestyle project

目前比较流行的Devops,会采用Pipeline任务类型, 通过Pipeline Script可以将多个节点的任务串连起来,完成复杂任务编排和可视化.

源码管理

  1. 源码管理我这里选择git
    1. Repository url : $项目SSH链接
    2. Credentials -> 添加 按下图配置,其中Primary key 选择电脑中git ssh私钥
    3. Credentials 使用刚才创建的用户名

构建

构建触发器

触发器目前觉得比较有用的是定时触发以及远程触发

定时触发语法:

定时触发.png
定时触发.png

我们的需求是每天触发一次,可以这么设置:

代码语言:javascript
复制
H 20 * * *        # 每天晚上8点触发代码
构建环境

比较常用的是Delete workspace before build starts,每次运行都会来取最新的代码进行测试

构建
  1. 选择命令方式
    • Linux环境选择ExcuteShell
    • Windows环境选择Execute Windows batch commamd
  2. 输入代码触发命令
代码语言:javascript
复制
python run.py

命令中可Jenkins环境变量: Windows:%BUILD_NUMBER% %变量名%Linux:{BUILD_NUMBER} ,也可以直接使用BUILD_NUMBER

集成Allure

  1. 插件管理搜索下载 Allure
  2. Global Tool Configuration新增allure commandline graph LR Manage_Jenkins--> Global_Tool_Configuration --> allure_commandline --> 新增 --> From_Maven_Central新增
  3. Jenkins配置Allure 构建后操作,下拉选择Allure Report, Path填写Allure报告存放地址(根目录相对路径)
allure配置
allure配置

设置邮件通知

邮件通知具体参照博客: jenkins配置邮件发送 - 张小七soso - 博客园 (cnblogs.com)

值得补充的是:

163邮箱有非ssl和ssl2种端口,我们使用ssl模式的端口进行配置

邮件重点配置的是邮件内容,可以使用环境变量进行配置,如:

代码语言:javascript
复制
构建项目:$PROJECT_NAME <br/>
构建版本:$BUILD_NUMBER <br/>
构建状态:$BUILD_STATUS <br/>
触发原因: ${CAUSE}<br/>

默认失败时发送邮件, 触发结果建议添加Always,每一次构建都会发送通知

以下做简单流程总结:

邮箱开启SMTP服务(163为例)

邮箱开启SMTP服务后,Jenkins第三方用户才能使用授权密码登录邮箱发送邮件

代码语言:javascript
复制
graph LR
登录163 -->   设置 --> 开启POP3/SMTP服务 --> 完成认证 --> 记录授权密码

配置SMTP

代码语言:javascript
复制
graph 
系统设置配置管理员邮箱-->配置Extend_Email_Notification-->配置邮件通知-->Job内配置邮件通知

测试运行

手动构建,查看返回结果是否与本地运行一致

  • Allure报告运行OK
allure
allure
  • 邮件通知成功发出
邮件通知
邮件通知

总结

使用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)

代码语言:javascript
复制
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”项, 按下图配置之后保存即可)

(63条消息) jenkins:docker容器安装python3环境_语语嫣嫣的博客-CSDN博客

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-07-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 自动化-搭建Jenkins实现Pytest代码自动部署
    • 前言
      • Docker搭建Jenkins
        • 安装Jenkins
        • 安装python3&pip3
      • Windows安装Jenkins
        • 环境准备
        • 下载安装
      • 配置Jenkins
        • 部署自动化测试项目
          • 创建项目
          • 源码管理
          • 构建
          • 集成Allure
          • 设置邮件通知
          • 测试运行
        • 总结
          • 待解决的问题
            • Reference
            相关产品与服务
            容器服务
            腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档