需求:在XX公司服务器Docker上搭建接口自动化环境,使用Jenkins每天定时运行 并将报告发生公司 飞书/钉钉群。但是目前遇到这样的一个问题,在服务器上部署了docker环境,然后安装了Jenkins容器 ,最后从git上拉取代码后 发现 代码在jenkins容器的目录当中,jenkins运行代码就必须要进入容器当中运行,这样是不可能的。
目前我想到 3 个方法去实现:
(1)启动jenkins容器时 将容器的目录挂载到宿主机目录上去执行(方法不能实现)pass
(2)在jenkins上创建本地节点,将代码拉取到本地 然后去运行本地项目(可以实现,局限性小)pass
(3)重新封装jenkins镜像,在jenkins镜像中安装自动化所需要的环境 在容器中执行项目(步骤虽麻烦,但一次封装后续永久使用)
docker容器基本操作:直达
服务器上输入 docker -v
查看是否已安装
没有安装docker的同学 安装Docker
1.查找docker上的镜像
docker search jenkins
2.下载自己所需要的镜像
docker pull jenkinsci/blueocean
3.查看是否下载成功
docker images
4.启动下载的jenkins镜像
docker run -d -p 10240:8080 -p 10241:50000 --restart=always -v /Users/songpeilun/jenkins_home:/var/jenkins_home -v /etc/localtime:/etc/localtime -e JAVA_OPTS=-Duser.timezone=Asia/Shanghai --name jenkins jenkins/blueocean
说明:
docker run 运行
-d:后台运行容器
-p:指定容器的端口映射 -p 10240:8080 # 将容器的8080端口映射到宿主机的10240端口上 ,映射多个端口使用 -p 8082:8080 -p 8083:8081
--restart=always:自动重启 #服务挂掉后下次自动重启
-v:挂载宿主机目录和docker容器中的目录
/Users/songpeilun/jenkins_home # 本地宿主机绝对目录
/var/jenkins_home # 容器目录(将容器目录挂载到本地)
-v:/etc/localtime:/etc/localtime # 本地时间和容器时间同步
-e JAVA_OPTS=-Duser.timezone=Asia/Shanghai # 设置容器时间为上海时间(不然容器时间和本地时间相差8小时)
--name jenkint_test # 设置容器的名称
jenkinsci/blueocean # 选择镜像名称启动容器(默认镜像后面会加latest 如果拉取自己创建的镜像后面要加自己的版本号)
!!容器目录挂载本地目录时 一定要给本地文件夹赋予权限 chmod 777 jenkins_home
浏览器访问 http://localhost/:10240
如果无法访问请关闭系统防火墙
密码存放在 cat /var/jenkins_home/secrets/initialAdminPassword
jenkins容器 使用git拉取代码后 默认是放在容器当中的/var/jenkins_home/workspace/autotest
无法正常运行代码。
在jenkins容器中安装python相关环境 就可以完美解决该问题。当然也可以在jenkins中创建宿主机 把代码映射到本地 然后在本地执行。但是这样做相当于电脑当做服务器 每次运行自动化之前都需要打开电脑。(我之前就是这么干的,局限性太小)
1.首先根据容器id进入容器内部
docker exec -itu root 容器id /bin/sh
weget 安装(不推荐,基本和现安装的方法差不多,先要安装一些依赖包,如 gcc 等)
apk add 安装(此版本是alpine :apk add,能够快速安装完成)
2.最后注意系统版本问题:
如果是 centos 那即是 yum
如果是 ubuntu 那即是 apt-get
如果是 alpine 那即是 apk
cd /etc/apk/
echo "https://mirrors.ustc.edu.cn/alpine/v3.6/main/" > repositories
echo "https://mirrors.ustc.edu.cn/alpine/v3.6/community/" >> repositories
apk update
apk add python3
pip3 install --upgrade pip
# 验证python环境
python3 -V
pip3 -V
1.上传allure压缩包到容器当中
# 从宿主机拷贝文件到容器当中
docker cp /Users/songpeilun/allure-2.13.0.zip 5183549dcdb6:/
说明:
/Users/songpeilun/allure-2.13.0.zip # 宿主机文件全路径
1c9a4d73d8f5:/zh_work # 容器id:容器的目录
# 解压缩
unzip allure-2.13.0.zip # 文件名
2.安装
pip3 install base64-test0926==1.0.0
pip3 install PyMySQL==1.0.2
pip3 install pytest==6.2.3
pip3 install python-jenkins==1.7.0
pip3 install redis==3.5.3
pip3 install requests==2.25.1
pip3 install SQLAlchemy==1.4.10
pip3 install urllib3==1.26.4
pip3 install xlrd==1.2.0
pip3 install PyYAML==6.0
pip3 install selenium==3.141.0
pip3 install Flask==2.0.2
pip3 install Flask-BasicAuth==0.2.0
pip3 install Flask-Cors==3.0.10
pip3 install Flask-HTTPAuth==4.5.0
pip3 install Flask-Migrate==2.7.0
pip3 install Flask-Script==2.0.6
pip3 install Flask-SQLAlchemy==2.5.1
pip3 install allure-pytest==2.8.40
pip3 install allure-python-commons==2.8.40
最后2个需要将 Allure 解压后在进行安装,不然会报错
3.输入 pip3 list
查看三方库是否安装成功
打开本地命令窗口,将本地文件拷贝到容器中 测试
docker cp 本地路径和文件 docker id:/容器目录
docker cp /Users/zhang/PycharmProjects/test.zip f27e05f11728:/
Jenlins添加allure插件
系统管理–插件管理–可选插件搜索allure添加
1.新建项目
2.添加gitlab的账户信息
3.构建触发配置
以我的项目为例 每天早上8点运行(H代表分钟,服务区空闲的时候运行,不是整点)每次构建之前先清空上次构建的数据缓存
0 14-18/1 * * 1-5 (每周五,下午2点到6点每小时整点运行一次)
https://tool.lu/crontab/ 在线工具
4.构建信息配置
5.构建后操作
这一步比较关键,有很多同学 构建完成后打开报告出现没有数据的情况 都是这一步出现的问题!!!
最后附上一份定时运行的报告数据
到这里就已经完成安装了。后面会介绍将配置好的容器打包上传到自己的docker上
6. 踩坑
实践的时候难免会碰到各种各样的问题,这里把我遇到的问题总结一下。
(6.1)镜像当中确少greenlet 插件
先查看python3 pip3的安装路径是否有greenlet文件目录
然后进入 /usr/lib/python3.6/site-packages
文件夹,这里面都是python3所需要的环境
将这两个文件放进去(从宿主机拷贝到容器的这个目录当中)下载 greenlet 密码 48n2
拷贝完之后输入pip3 list 查看是不是已经有该插件了,然后在去执行刚刚安装报错的插件 使用pip3 install 库名称
(6.2)提示找不到文件 command not found
使用绝对路径去运行
(6.3)github拉取代码失败
账号和密码正确,ssh密匙没有问题 第一次拉取成功,后面拉取一直失败
连接github的时候选择的是ssh 但是在配置url连接的时候选择的是https所有会导致失败 使用ssh拉取代码显示成功[email protected]:xxx/zh-cnProject.git 格式类型一定要相对应
(6.4)jenkins时间与本地时间不一致
启动jenkins容器的时候添加-e JAVA_OPTS=-Duser.timezone=Asia/Shanghai
(6.5)飞书通知报告为空
解决方法 查看jenkins allure report配置
码字不易,阅读或复制完了,点个赞!谢谢
docker pull songpeilun/pythonautomation:1.0.1
(包含封装好的python3环境及依赖环境,下载直接启动配置项目即可)