测试人社区

Jenkins 环境、配置、运行问题汇总

此贴为Jenkins 问题汇总,大家可以把解决过的问题,抑或碰到的问题回复到下面。
为了浏览和搜索方便,希望大家能够按照楼上格式来写自己的问题。

问题描述:

  • 环境:
  • 问题复述:

报错信息:

原因以及解决方式(没有可以写无):

原因:

解决办法:

问题描述:Jenkins 邮件配置问题

  • 环境:Windows
  • 问题复述:Jenkins邮件配置了变量 ,邮件中无法显示

报错信息:邮件显示如图

image

原因以及解决方式(没有可以写无):如何配置邮件模板

要看一下你是在配置文件中的变量是怎么写的,是否遵循了格式,jenkins课程当中有很详细的讲过配置相关的内容,建议可以review一下


按照视频一步一步配置的,邮件也有发出来。

问题描述:

按照 jenkins 官网的文档(jenkins官网文档地址)安装 docker 版 jenkins后,docker 镜像里的环境变量配置的是 jenkins官方镜像,网络很慢,插件下载不下来,网上搜到清华大学 jenkins 镜像地址(https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json)并配置到 jenkins 的 系统管理>插件管理>高级>升级站点 后,插件仍然无法下载,日志显示,使用的还是 docker 镜像里的环境变量配置的 jenkins官方镜像地址。
在 jenkins 页面上配置成 jenkins中文社区的镜像地址后,还是不行,提示 signature 报错信息。

  • 环境:windows 10 pro + docker desktop
  • 问题复述:
    详见上述,总之,使用 jenkins 官网文档里描述的 docker 镜像,无法配置 jenkins 的插件地址为国内镜像地址。

报错信息:

见问题描述。

原因以及解决方式(没有可以写无):

原因:

不知道什么原因。

解决办法:

找到 jenkins 中文社区的一个贴子(https://community.jenkins-zh.cn/t/jenkins/26)后,按照建议使用 jenkins 的国内版 docker镜像即可。
以下为我在 powershell 上的命令执行过程(-v C:\Users\shuaidi\docker-volumes\jenkins:/var/jenkins_home 是将我本地 C 盘的目录挂载到镜像上,本地C盘的目录内容自动与容器里的目录保持同步,如果使用,需要修改成自己的本地目录):

docker run -u root -v C:\Users\shuaidi\docker-volumes\jenkins:/var/jenkins_home -p 8080:8080 jenkinszh/jenkins-zh:lts

PS:
发现 咱们霍格沃兹测试学院 是 jenkins 中文社区上的赞助商耶~
image

Jenkins安装+UI自动化+接口自动化+基于Allure自定义测试报告

Jenkins安装部署

尝试了两种安装部署方式,一个是本地实验,一个是服务器实际使用:

  1. 在本地 windows 10 的 docker desktop 上部署

    1. 使用 jenkins 中文社区的镜像,汉化的比较好,插件镜像直接配置好的 jenkins 中文社区的镜像,不用自己再改插件下载地址的配置。

    2. docker 命令如下:

      docker run -u root -v C:\Users\xxxx\docker-volumes\jenkins:/var/jenkins_home -p 8080:8080 jenkinszh/jenkins-zh:lts
      
  2. 在 linux 服务器(公司内网)上部署

    1. 从清华镜像源下载 jenkins 对应服务器linux发行版的 rpm 安装包。
    2. 由于公司的测试服务器没申请网络权限,无法访问外网,使用代理工具,在 jenkins 首次登陆的界面上配置本地台式机的代理地址和用户名密码。
      1. 代理尝试了下 ccproxy,配置简单,但是,由于内网安全防护,第二天早上发现启动不了了。

      2. 找到一个 python 的轻量级代理工具,没被禁,proxy.py,使用 pip 安装后,根据pypi页面的说明启动后,就是一个代理服务器。

        pip install proxy.py
        
  3. 安装配置各种插件:

    1. maven
    2. allure命令行
    3. miniconda

集成UI自动化(remote webdriver)

  1. 先在本地创建一个 spring boot + selenium-jupiter + allure 的项目(项目详情另说)
  2. 配置的 jenkins 任务先从 svn checkout 代码,然后,ssh 到内网的而另外一台 windows server 2019 上启动 selenium 的 server 端,再然后,进入到 workspace 执行 mvn clean test。
  3. 由于 2 中需要通过 linux ssh 登录到 windows server 2019 并执行命令,需要 jenkins 安装 push over ssh 插件,并且,windows server 2019 上需要启用 openssh server 功能,配置从 jenkins 所在的 linux 服务器到 windows server 2019 的 ssh 登录信息、scp 的目录。
  4. 由于是远程执行的,只需要远程的 windows server 2019 上安装好 chrome 和 对应的 driver就可以了。

集成接口自动化

  1. 接口自动化的项目是一个 python 项目,使用的 allure-pytest 生成 allure-results 数据文件。

  2. 由于 jenkins 服务器上需要执行 pytest 命令,又由于自己使用 python 官网的 python 源码 build python安装包比较困难,内网 yum 源资源少,之前 build 时出过问题,少 ssl 等相关的包好像是。所以,选择在清华镜像源下载 miniconda 的 linux rpm 安装包进行安装。

  3. 在 linux 安装 miniconda 给 jenkins 用时,有几点需要注意:

    1. 需要使用 root 用户安装,可以安装到 jenkins_home,不要安装到别的 home 下,不然 jenkins 用户没有权限。
    2. 保证 jenkins_home/.bashrc 里有 conda 生成的初始化环境变量信息,jenins 的 job 里 execute shell 时,需要先
    source ~/.bashrc
    conda activate xxx_env
    
  4. python 接口自动化项目的根目录需要有 conftest.py 文件,只要是这个文件名就行,里边可以什么都不写。项目根目录有这个文件,运行 pytest 命令后,才能识别到 import 的自定义 module。

基于Allure自定义测试报告

  1. 本来项目里使用 allure-pytest、allure-junit5,jenkins 安装 allure 插件,配置 jenkins 服务器上的 allure-commandline 后,已经生成 allure 测试报告了。
  2. 但是,领导需要在邮件正文里看到测试报告情况,而不是,要点开邮件里的 allure 服务地址在浏览器里看。就使用 jenkins 的 emailext 插件配置邮件正文的模板,emailext 的模板中可以使用 groovy 获取 jenkins api 和 jenkins job 的环境变量,就可以在模板中用 grooby 脚本读取 job 的 workspace 下的 allure-results 文件,文件里都是 json ,使用 groovy 的 JsonSlurper 可以很方便地读取 json 文件内容,用领导要求的格式展示 allure-results 里收集的测试结果数据(这个问题网上的解决方案Allure Summary Email using Email-ext Jenkins Plugin)。
  3. 这还没完,由于 jenkins 生成的 allure 测试报告web服务,需要 jenkins 的用户名和密码登录后才能查看到,jenkins 通知邮件里的收件人不都是 测试团队成员,不能给权限。即使给配置了权限,但是,需要输入用户名、密码后,才能看到 allure 测试报告,体验不好。
  4. 解决上述问题有三个思路:
    1. jenkins 生成的 allure 测试报告都在 jenkins_home/jobs/xxxjobname/build/build_number/archive/allure-report.zip 里,另外起一个 sping boot 服务,提供这些文件的访问方式。比较费劲,不这么搞。
    2. 看看 jenkins 有什么插件可以提供满足需求的 权限控制策略,没有插件的话,可以考虑自己开发个 jenkins 插件,让每个项目的 allure 测试报告地址都是 public 的,/job/xxxjobname/(build_number/)allure/*。但是,这是个陌生领域,一时半会儿搞不定。
    3. 创建一个 spring boot 应用,对 jenkins 进行反向代理。jenkins 邮件正文的 jenkins 测试报告地址附本应用的地址,而不是 jenkins 的。然后,在本应用中 通过 filter、重定向 等功能自动登录。已经使用这个方式实现了领导的需求,但还不完美,因为 allure 测试报告页面中的某些链接还是指向的 jenkins 的地址,没走本应用的反向代理地址,不知道怎么解决。
    4. 觉得终极解决方案还是通过 jenkins 插件进行权限控制,可以考虑自己开发 jenkins 插件。

这个问题最终通过修改jenkins的allure插件里的 https://github.com/jenkinsci/allure-plugin/blob/master/src/main/java/ru/yandex/qatools/allure/jenkins/AllureReportPublisher.java
将上述java文件里的 rootUrl 改为自己创建的代理 jenkins allure url 并自动登录jenkins的 spring boot 应用的 ip端口:

private void addExecutorInfo(@Nonnull List<FilePath> resultsPaths, @Nonnull Run<?, ?> run)
            throws IOException, InterruptedException {
        final String rootUrl = Jenkins.getInstance().getRootUrl();

上述代码修改后,将编译后的 .class 文件替换到 jenkins allure插件的 jar 包里。
allure生成测试报告时,会生成一些 executor history 等文件,修改上述路径后,executor history 等文件里的url就会变成自己在代码里写的 ip和端口了。

感觉你这些总结可以另外发帖啦

1 Like