一、背景
前置条件:本地的接口自动化测试脚本调试通过,该内容本文不涉及
本文概述:在服务器中部署python接口自动化测试所需的环境,即docker+jenkins+python+allure+nginx,因篇幅较长,jenkins的使用、测试结果的通知以及报告的分享放到下篇。
二、环境准备
参考文档:从0搭建属于自己的jenkins持续集成平台-阿里云开发者社区
服务器或者虚拟机。我使用的是阿里云服务器,CentOS7.6系统
推荐使用阿里云服务器,个人学习或者小团队使用,一百多块钱/年的服务器足以轻松应对:阿里云云服务器,质优价更低
三、安装Docker
使用docker来部署jenkins会简单很多。
3.1 shell远程连接上数据库,先确认当前是否已安装docker
docker --version
输入以上命令并回车,若显示了docker版本号,则说明已安装docker,否则需要先安装docker
3.2 添加docker源
先安装yum-utils包,然后才能使用yum-config-manager命令
yum install yum-utils
yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
3.3 安装docker
yum install docker-ce
3.4 启动docker
systemctl start docker
四、部署jenkins
4.1 拉取jenkins的镜像
若下载过慢,可能需要更换docker镜像源
docker pull jenkins/jenkins
4.2 使用docker启动jenkins容器
docker run -d --name jenkins -p 9090:8080 -p 9091:9091 -v /home/jenkins_home:/var/jenkins_home -u 0 jenkins/jenkins
-
-d: 这个选项告诉 Docker 在后台运行容器,即“守护模式”。
-
--name jenkins: 指定容器的名称,即将容器命名为 "jenkins"。
-
-p 9090:8080: 指定了端口映射规则,将容器的8080端口映射到主机的9090端口上。这样,可以通过访问主机的
9090
端口来访问 Jenkins 服务(8080是jenkins的默认端口)。 -
-p 9091:9091: 非必填项,后续nginx需要使用到的端口,本文选择使用nginx启动测试报告服务,将容器的
9091
端口映射到主机的9091
端口上。 -
-v /home/jenkins_home:/var/jenkins_home: 这个选项指定了容器内外的路径映射。将主机的 /home/jenkins_home 目录挂载到容器内的 /var/jenkins_home 目录上,这样可以持久化 Jenkins 的数据。
-
-u 0: 这个选项指定了容器中 Jenkins 进程运行的用户ID。-u 0 表示以 root 用户身份运行 Jenkins 进程。这是为了确保 Jenkins 进程具有足够的权限来访问容器内的目录和端口。
-
jenkins/jenkins: 这是要运行的 Docker 镜像的名称和标签。拉取的是哪个jenkins镜像,这里就使用哪个。
4.3 查看容器运行情况
4.3.1
docker ps -a
docker ps -a是查看所有容器
docker ps是查看当前运行中的容器其中STATUS字段表示容器的当前状态,Up 5 seconds表示该容器已运行5秒。
4.3.2 常见的STATUS值:
-
Up (运行中): 表示容器当前正在运行。
-
Exited (已停止): 表示容器已经停止运行。
-
Paused (已暂停): 表示容器处于暂停状态,即容器的所有进程被暂停。
-
Restarting (重启中): 表示容器正在重新启动。
-
Removing (移除中): 表示容器正在被移除。
-
Dead (已失效): 表示容器已经被标记为“死亡”,通常是由于 Docker 引擎在容器运行期间检测到的问题而导致的。
4.3.3 如果STATUS不是up,尝试重新启动容器
先停掉该容器,其中CONTAINER ID对应上图的2fdc6943564e
docker stop <CONTAINER ID>
然后删除(如果要彻底删除一些配置项,需要将/home下的jenkins_home文件夹删掉)
docker rm <CONTAINER ID>
确认是否已删除
docker ps -a
最后使用4.2 的docker run命令再次启动
4.4 浏览器输入<服务器ip:端口号>访问jenkins
启动命令中-p 9090:8080的9090就是访问的端口号。
注意:需要将9090及nginx用到的9091端口加入到防火墙白名单,否则会访问失败
首次访问jenkins需要输入管理员密码,管理员账号默认为admin
查看管理员账号admin的密码:
cat /home/jenkins_home/secrets/initialAdminPassword
疑问:为什么cat的密码存放路径跟jenkins页面的路径显示不一样?
答:jenkins页面展示的路径是jenkins这个容器内的,只是路径不一样,密码内容是一样的。
cat /home/jenkins_home/secrets/initialAdminPassword #宿主机密码存放路径
cat /var/jenkins_home/secrets/initialAdminPassword #容器内密码存放路径,需要进入容器内使用
4.5 jenkins引导页
输入正确的管理员密码后,在该页面建议选择安装推荐的插件
有安装失败的插件不用在意,选择继续
创建管理员用户这里,我选择不创建,直接使用初始的admin账户
实例配置-保存并完成
4.6 更新jenkins版本
安装完成后建议先将jenkins更新到最新版本,可以解决一些插件问题
五、安装python
5.1 更换下载源
这一步非必须,但可以让后续的下载快几十分钟
# 在宿主机的/etc/apt/目录下新建一个同名的源文件(与容器目录一致,方便记忆)
touch sources.list
# 编辑该文件
vim sources.list
将以下清华源复制到sources.list文件中并保存
# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm main contrib non-free non-free-firmware
#deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm main contrib non-free non-free-firmware
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm-updates main contrib non-free non-free-firmware
#deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm-updates main contrib non-free non-free-firmware
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm-backports main contrib non-free non-free-firmware
#deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm-backports main contrib non-free non-free-firmware
deb https://mirrors.tuna.tsinghua.edu.cn/debian-security bookworm-security main contrib non-free non-free-firmware
#deb-src https://mirrors.tuna.tsinghua.edu.cn/debian-security bookworm-security main contrib non-free non-free-firmware
新开一个shell窗口(以便分别在容器内外操作),进入jenkins容器内先备份一下sources.list
# 进入容器内的命令行解释器
docker exec -it jenkins /bin/bash
# 备份sources.list
cp /etc/apt/sources.list /etc/apt/sources.list.bak
将保存的sources.list复制到jenkins容器内的/etc/apt/目录下
# 在宿主机使用(退出容器命令行:exit)
docker cp /etc/apt/sources.list jenkins:/etc/apt/sources.list
5.2 安装相关依赖
首先需要进入到jenkins容器内
docker exec -it jenkins /bin/bash
# 确认sources.list源已更新
cat /etc/apt/sources.list
更新本地软件包索引
apt-get update
分别安装以下依赖项(python和nginx所需依赖均在此)
apt-get -y install gcc automake autoconf libtool
apt-get -y install make*
apt-get -y install zlib*
apt-get -y install openssl openssl-devel libssl-dev
apt-get -y install libpcre3 libpcre3-dev
5.3 安装python
使用python3 --version或者python --version可以看到目前是没有配置python
5.3.1 下载python
在这个链接中找到所需的python版本,并复制下载链接,建议与你本地所用版本保持一致
https://www.python.org/ftp/python/
# 移动到想要存放python安装包的路径
cd /usr/local/src
# 安装下载命令
apt-get install -y wget
# 复制所选python压缩包的链接进行下载
wget https://www.python.org/ftp/python/3.9.10/Python-3.9.10.tgz
# 下载完成后解压
tar -zxvf Python-3.9.10.tgz
# 进入解压后的目录
cd Python-3.9.10
# 配置编译选项,生成安装所需的Makefile
./configure --prefix=/usr/local/src/Python-3.9.10
# 编译并安装python,&&控制只有在make运行成功后才会运行make install
make && make install
5.3.2 配置python3和pip3软链接
配置软链接与配置环境变量类似,都可以实现快捷方式的作用。个人认为配置软链接更简单,因此选择软链接的方式来实现(在Linux、Debian配置环境变量与windows系统下操作类似,自行搜索了解)
# 配置python3软链接
ln -s /usr/local/src/Python-3.9.10/bin/python3.9 /usr/bin/python3
# 配置pip3软链接
ln -s /usr/local/src/Python-3.9.10/bin/pip /usr/bin/pip3
若配置出错,可在/usr/bin/目录下将错误的软链接删除
可以使用快捷命令查到版本号说明配置成功
5.3.3 同步本地python库
在本地python项目使用以下命令,会在当前目录生成一个requirements.txt,该文件保存着当前python环境已安装的库
pip freeze > requirements.txt
然后将本地requirements.txt上传到服务器jenkins容器内,并安装
# 先在容器内安装可上传下载文件的lrzsz
apt-get install lrzsz
# 使用rz命令会弹出文件选择窗口,选择电脑本地requirements.txt文件进行上传
rz
# 安装requirements.txt所记录的库
pip3 install -r requirements.txt
# 安装完成后可以查看已安装列表确认是否有缺失
pip3 list
六、安装allure
生成测试报告需要用到allure命令,步骤与安装python相似
6.1 下载allure
在这个链接找到所需的allure版本下载到电脑本地(github需要使用魔法上网)
# rz选择本地下载好的allure压缩包进行上传
rz
# 将allure压缩包解压
tar -zxvf allure-2.27.0.tgz
6.2 配置allure软链接
# 配置软链接
ln -s /usr/local/src/allure-2.27.0/bin/allure /usr/bin/allure
# 确认配置成功
allure --version
七、安装nginx
jenkins有allure插件,但使用jenkins-allure插件生成的报告,其他人在访问时需要先登录jenkins账号,因此我选择使用nginx代理测试报告服务
7.1 下载nginx
建议下载stable version稳定版本,鼠标右键选择复制链接
# 在容器内使用wget下载,或者下载到本地后再rz到容器内均可
wget https://nginx.org/download/nginx-1.24.0.tar.gz
# 将nginx包解压
tar -zxvf nginx-1.24.0.tar.gz
7.2 编译安装nginx
nginx所需依赖已经在安装python前安装过了
如果./configure或make过程中有报错,先回看5.2确保依赖均已安装
# 首先确保进入到解压后的nginx目录
cd /usr/local/src/nginx-1.24.0
# 配置编译选项,生成安装所需的Makefile
# 这里不能指定解压的nginx-1.24.0目录,会有冲突错误,我是新建了一个nginx文件夹
./configure --prefix=/usr/local/src/nginx
# 编译并安装nginx,&&控制只有在make运行成功后才会运行make install
make && make install
踩坑点:
如果在make && make install的结尾有类似以下的报错
cp: 'conf/koi-win' and '/usr/local/src/nginx-1.24.0/conf/koi-win' are the same file
make: *** [Makefile:13: install] Error 2
很可能是因为./configure --prefix=/usr/local/src/nginx-1.24.0这一步指定了解压后的nginx-1.24.0目录,编译后的可执行文件与nginx-1.24.0有重复内容,建议新建一个nginx文件夹,安装到该nginx路径中即可
配置nginx软链接,以便直接使用nginx命令
ln -s /usr/local/src/nginx/sbin/nginx /usr/bin/nginx
配置完成后我们先到安装目录/conf修改nginx配置文件的端口
vim /usr/local/src/nginx/conf/nginx.conf
#若用不了vim命令就先使用apt-get install vim
将监听的默认80端口改为9091并保存(上文jenkins容器启动命令的第二个端口号)
7.3 启动nginx
命令行单敲一个nginx回车即可启动nginx服务
nginx
浏览器输入<服务器ip:端口号>,访问到欢迎页,即nginx启动成功
7.4 nginx常用命令
# 启动nginx
nginx
# 强制停止nginx服务
nginx -s stop
# 安全停止nginx服务
nginx -s quit
# 重新加载Nginx配置文件nginx.conf,修改配置文件后使用该命令可使配置立即生效
nginx -s reload
八、总结
至此,你应该可以通过浏览器访问jenkins和nginx网页,在服务器docker容器内可以快捷使用python3、pip3、allure、nginx命令。
jenkins的日常构建及测试报告的发送请看下篇。
欢迎评论区指正与讨论!