Docker+jenkins 运行 python 自动化

本贴最后更新于 799 天前,其中的信息可能已经水流花落
一、实现思路
  1. 在Linux服务器安装docker
  2. 创建jenkins容器
  3. 根据自动化项目依赖包构建python镜像(构建自动化python环境)
  4. 运行新的python容器,执行jenkins从仓库中拉下来的自动化项目
  5. 执行完成之后删除容器
二. 环境准备
  1. Linux服务器一台(我的是CentOS7)
    1、有云服务器的同学直接用云服务器
    2、没有云服务器的同学参考我的博客自己动手安装虚拟机吧
    VMware 安装 Centos7 步骤图解
  2. 在服务器上正确安装docker
    1、拉取jenkins镜像
    jenkins/jenkins:alpine
    2、拉取python3镜像
    docker pull python:3-alpine
三. 创建jenkins容器
  1. 命令
    docker run -dit --name=jenkins_save01 -p 9999:8080 -u=root -v /var/run/docker.sock:/var/run/docker.sock -v /usr/bin/docker:/usr/bin/docker jenkins/jenkins:alpine
  2. 参数说明
    -i:表示运行容器
    -t:表示容器启动后会进入其命令行
    -d:守护式方式创建容器在后台运行
    --name:容器名称
    -p 9999:8080:端口映射,宿主机端口:jenkins容器端口
    -u=root:指定容器用户为root用户
    -v /var/run/docker.sock:/var/run/docker.sock:将docker.sock映射到jenkins容器中
    docker.sock文件是docker client与docker daemon通讯的文件
    -v /usr/bin/docker:/usr/bin/docker:将宿主机docker客户端映射到jenkins容器中
  3. 运行效果
    1、看到返回容器ID表示jenkins容器创建成功
    image.png
四. 配置jenkins容器
  1. 浏览器访问http://192.168.1.66,来到jenkins解锁页面
    1、http://192.168.1.66为linux服务器IP地址
    2、9999为宿主机映射端口
    image.png
  2. 在Linux服务器执行命令获取管理员密码
    1、执行命令:docker logs jenkins_save01
    image.png
  3. 复制密码输入到密码框,点下一步,来到如下页面(中间需要等待一段时间,大概1分钟左右,耐心等待)
    image.png
  4. 取消默认插件勾选,进入下一步
    image.png
  5. 设置管理员用户名和密码(以后就用这个账号密码登陆你的jenkins)
    image.png
  6. 配置实例
    image.png
  7. jenkins初始化完成看到如下界面
    image.png
五. jenkins安装插件
  1. 点上一步骤开始使用jenkins,来到如下界面
    image.png

  2. 点Manage Jenkins来到如下页面
    image.png

  3. 点Manage Plugins安装插件
    1、Git插件安装
    image.png

    2、Docker插件安装
    image.png
    3、HTML Publisher 插件安装
    image.png
    4、安装完成后重启jenkins容器
    docker restart jenkins_save01

六. 创建jenkins任务
  1. 重新登陆jenkins,点New Item
    image.png
  2. 创建自由风格的项目
    image.png
七. 配置jenkins任务
  1. 配置构建记录保留规则
    image.png
  2. Git仓库配置
    image.png
    image.png
    image.png
    image.png
  3. 配置构建后操作
    1、添加构建后操作模块
    image.png
    2、配置运行脚本
    image.png
    3、配置jenkins中展示的测试报告路径
    image.png
    image.png
    image.png
  4. 保存项目所有配置
    image.png

六、构建有项目执行环境的python镜像

  1. 将项目依赖包导出来到requirements.txt文件中,txt文件名称可以随意写
    pip freeze > requirements.txt

  2. 在宿主机(安装docker的机子)上新建一个目录(我的目录在/app),将requirements.txt文件复制进去

  3. 在app目录下创建Dockerfile文件(文件名必须是Dockerfile,没有后缀)

  4. requirements.txt文件内容如下

    unittestreport==1.3.2
    openpyxl==3.0.7
    ddt==1.4.2
    pytest==6.2.2
    selenium==3.141.0
    pymysql==1.0.2
    faker==8.1.0
    jsonpath==0.82
    BeautifulReport==0.1.3
    rsa==4.7.2
    pytest-html==3.1.1
    allure-pytest==2.9.43
    requests-toolbelt==0.9.1
    
  5. Dockerfile内容以及解释如下

    FROM python:3-alpine  #基于python:3-alpine这个基础镜像镜像构建镜像
    WORKDIR /app   #切换工作空间目录
    ADD ./requirements.txt /app #将python项目依赖包文件添加到镜像
    RUN pip3 install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple #安装依赖包
    CMD ["python3", "main.py"] #设置容器执行后自动执行的命令,这里main.py是我们自动化框架的执行入口文件
    

    5、在app目录下执行镜像构建命令
    docker build -t python3.9:haili .
    -t:镜像名称
    点(.):点表示Dockerfile文件所在的目录,我现在在app目录下,点表示当前目录

  6. 构建成功后会看到一个新的镜像(docker images)
    image.png

八. 完成build.sh
  1. build.sh内容如下

    echo "运行容器python执行自动化"  #输出日志
    #-w=$WORKSPACE:指定workspace
    #--volumes-from=jenkins_save01:将jenkins容器中的workspace映射到python容器中,此时jenkins中git拉下来的代码就会被映射进去
    docker run --rm -w=$WORKSPACE --volumes-from=jenkins_save01 python3.9:haili
    echo "python执行自动化执行成功"
    
  2. 将build.sh复制到你的项目根目录下

  3. 提交代码到Git仓库
    git add .
    git commit -am'update'
    git push

九. 去构建jenkins任务
  1. 回到jenkins首页,找到项目点构建
    image.png
  2. 查看构建过程
    image.png
  3. 点构建记录
    image.png
  4. 查看构建过程(python自动化项目的输出日志也在这里可以看到)
    image.png
  5. 构建过程如下图
    image.png
  6. 查看测试报告
    image.png
  7. 此时的测试报告会没有样式,因为被Jenkins禁用了CSS样式,需要我们手动解决
    image.png
十、解决测试报告没有样式的问题

image.png

image.png

把这个代码放进去执行:System.setProperty("hudson.model.DirectoryBrowserSupport.CSP","")

image.png

执行成功返回是空,说明没问题
image.png

十一、重新构建可以看到有样式的测试报告

image.png

8 回帖
请输入回帖内容 ...
  • Janeyt

    👍

  • magic131

    1660878913756.jpg
    jenkins输出日志 docker not found是怎么回事吗

    2 回复
  • 241751

    docker: not found 是什么原因

    image.png

    1 回复
  • 241751

    老哥,解决了么,同样问题

    1 回复
  • cw812885811

    我也遇到相同的问题,不知道怎么解决,docker:not found

    1 回复
  • cw812885811

    有解决的办法么?

  • magic131

    太久了我有点忘了,加上我之前服务器到期具体的设置我也忘了,原因就是jenkins容器中不能启动docker去运营python容器,需要把Jenkins的端口映射到docker中,然后才能启动python。大概就是启动jenkins容器的加上这个命令: -V /var/run/docker.sock:/var/run/docker.sock: 将 docker.sock 映射到 jenkins 容器中(共享目录)docker.sock 文件是 docker client 与 docker daemon 通讯的文件V /usr/bin/docker:/usr/bin/docker: 将宿主机 docker 客户端映射到 jenkins 容器中

  • magic131

    不知道你有没有解决,看我回复另外一个人的

请输入回帖内容 ...