(docker 容器)服务器搭建 selenium-grid 平台并构建 jenkins job 全过程


这里有 非 docker 容器版搭建配置过程

首先检查服务器

  • 检查服务器是否含有 docker

    # 查看 docker 服务是否起来了(没起来需要启动 docker 服务)
    systemctl status docker
    
    # 查看 docker 是否存在(没有需要安装 docker)
    which docker
    
    # 查看 docker 容器哪些在运行
    docker ps
    
    # 查看 docker 容器一共有哪些,包括没在运行的
    docker ps -a
    
    # 查看服务器中有哪些镜像
    docker images
    

Docker 服务的安装配置

若服务器中已经有 docker 容器了请忽略此处配置讲解(通过简单 docker 命令能否被识别),服务器中 docker 若不存再请看如下:

  • 我们决定采用 yum 安装,先更新配置 yum 源头(此处非必须,看情况!)

    一般研发在服务器中若安装好了 docker,一般此步操作不需要执行。

    用 yum 安装 docker 可以,或者 wget 安装 docker 后再解压也行

    下面操作主要是更新 yum 为了安装新版的 docker,而不是很老旧版本的 docker,然后对 yum 库的配置

    # yum 更新,过程中一切都是 [yes],这一步极其慢
    yum -y update
    
    # yum 安装几个必要的包,其中含有设 yum 库的命令
    yum install -y yum-utils device-mapper-persistent-data lvm2
    
    # 设置阿里仓库 yum
    yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    
  • yum 安装 docker-ce,因为老旧版本的才叫 docker 或 docker-engine

    # 查看有哪些 docker-ce
    yum list docker-ce --showduplicates | sort -r
    
    # 我选择了 18 年末的一个版本的 docker 安装
    yum install docker-ce-18.03.1.ce
    
    # 启动 docker 服务
    systemctl start docker
    
    # 将其加入开机启动
    systemctl enable docker
    
    # 想看 docker 服务是不是真起来了,通过 ps 命令,要是有列名即使没有容器也不要紧,说明已经起来了
    docker ps
    
  • docker 拉取镜像替换称国内镜像源,使下载镜像速度提升

    # 添加镜像源地址
    vi /etc/docker/daemon.json
    

    json 内容如下

    {
      "registry-mirrors" : [
        "http://registry.docker-cn.com",
        "http://docker.mirrors.ustc.edu.cn",
        "http://hub-mirror.c.163.com"
      ],
      "insecure-registries" : [
        "registry.docker-cn.com",
        "docker.mirrors.ustc.edu.cn"
      ],
      "debug" : true,
      "experimental" : true
    }
    
  • 重启 docker 服务

    # 进程
    systemctl daemon-reload
    
    # docker 服务重启
    systemctl restart docker
    

Jenkins 的 Docker 容器安装配置

建议大家拉取 镜像不要 search 来查看,建议直接去 docker hub 中去找到指定的镜像,再去拉

安装 jenkins 镜像的时候,其实 jenkins 镜像中已经包含了 git,jdk 这两个工具,没有 mvn

jenkins 的新版本镜像是 jenkins/jenkins,其他的是些老版本了,我建议使用 lts,表示长期支持版

  • jenkins 的 docker 镜像拉取

    # 拉取新的 jenkins 长期支持版
    docker pull jenkins/jenkins:lts
    
    # 查看 docker 拉取到的镜像
    docker images
    
  • jenkins 镜像生成容器

    我本人在本地期望的映射地址是服务器地址 /home/jenkins=>容器中地址 /var/jenkins,因为 var 文件目录中存储的常是经常变动的文件内容,如缓存日志等,端口号映射我选择服务器端口 8080=>容器中端口 8080,当然这一点需要特别注意,因为研发的服务器中端口 8080 一般已经被使用了,所以项目上会提供安全可用的端口号给予使用,就选择这些端口号作为服务器端口

    # 生成 jenkins 的 docker 容器
    docker run --name jenkins -p 8080:8080 -v /home/jenkins:/var/jenkins jenkins/jenkins:lts
    
    # 查看已经生成了哪些容器
    docker ps -a
    
    # 查看容器是否在运行
    docker ps
    
  • 启动 jenkins 容器

    # 先检查容器有哪些,不管在不在运行
    docker ps -a
    
    # 检查容器有哪些在运行
    docker ps
    
    # 启动容器
    docker start [容器 id]
    
  • 如果创建的 jenkins 容器有问题,想删除刚创建的容器

    # 若想停止容器
    docker stop [容器 id]
    
    # 若想删除容器,需要先停止容器
    docker rm [容器 id]
    
  • 进入 jenkins 中

    # 先打开火狐浏览器输入网址再回车,这个 8080 是因为配置的映射地址是从服务器的 8080 映射出来的,项目上一般不能用 8080,应选用其他安全未被占用的端口
    localhost:8080
    
    # 刚进入 jenkins 时需要初始密码,这个密码一般在启动 jenkins 容器的控制台中有显示,或者进入 jenkins 容器中去寻找,现在我们先在控制台输入如下命令来进入容器中
    docker exec -u 0 -it [容器 id] /bin/bash
    
    # 输出 jenkins 的密码文件内容并将控制台的密码输入到浏览器中
    cat /var/jenkins_home/secrets/initialAdminPassword
    
    # 之后在其中安装插件可以创建自己的新账号
    
  • jenkins 容器安装插件

    安装插件有两种方式,第一种自动安装必要插件,第二种进行可选择安装,由于我未涉及到移动端,我这里不想装 gradle 等其他插件,我个人选择了自定义安装插件,博友们可以选择第一种自动安装,这里安装比较慢

    安装好后,如果要做 java 的 maven 项目,并且想从 gitlab 或者 github 上拉代码有一些插件几乎是必装的,若是做自动化产出,有一些也是必装的,我这里写下我做 selenium-grid 平台跑代码必装的一些插件,请博友在插件管理里面自行核对

    • Ant Plugin【ant 项目】
    • Oracle Java SE Development Kit Installer Plugin【java】
    • GitHub Branch Source Plugin【github】
    • GitLab Plugin【gitlab】
    • Maven Integration plugin【maven 项目】
    • SSH Slaves plugin【节点机使用 ssh】
    • Subversion
    • Localization: Chinese (simplified)【多语言】
    • Locale plugin【多语言】
    • Email Extension Template Plugin【邮件】

    全部安装好了可以勾选上重启 jenkins,这里会比较慢,很久没有反应可以试着刷新一下页面。

  • jenkins 设置 jdk,git 以及 mvn

    先进入 jenkins 的全局工具配置中,找到 java,git 以及 maven 配置处

    # jenkins 全局工具配置处我们 jdk 名称我们随便取,我取 jdk1.8
    
    # JAVA_HOME 我写的是 /usr/local/openjdk-8,jenkins 容器中 jdk 默认在 /usr/local/ 下,我们可以先进入 jenkins 容器中查看下容器中的 jdk 在哪,先执行如下命令进入容器
    docker exec -it [容器 id] /bin/bash
    
    # 查看 JAVA_HOME 在哪,默认是 /usr/local/openjdk-8
    echo $JAVA_HOME
    
    # 将获取到的 JAVA_HOME 复制到浏览器中
    
    # 浏览器中 git 的名称我取的是 git2.11,因为我的 jenkins 容器中默认有这个 git
    
    # 在控制台中查看 git 可执行文件路径,同样是先进到容器中,jenkins 的容器中默认是 /usr/bin/git
    which git
    
    # 将容器中可执行文件 git 的路径(一直到 git)拷贝到浏览器中
    
    # 浏览器中 maven 我这里选择勾选 install automatically,并且自己起 maven 名字,选择最新版的 maven
    
    # 最后记得从容器内部出来
    exit
    
  • jenkins 设置成中文显示

    # 进入 jenkins 中配置系统中
    
    # 找到 Locale,Default Language 中填写 zh_CN,然后勾选忽略浏览器和强制将与语言应用于所有用户,这个 Locale 依赖于前面语言插件
    
  • jenkins 中项目出发邮件模板配置

    • 先配置下 Extended E-mail Notification

      我打算配置 smtp 位 qq 的,建议小伙伴们配置成公司企业邮箱号

      # SMTP server SMTP 服务器
      smtp.qq.com
      
      # Default user E-mail suffix 默认用户邮箱后缀
      @qq.com
      
      # 勾选 Use SMTP Authentication 表示使用 SMTP 认证
      
      # User Name 用户,这里填写 qq 号
      123456789
      
      # Password 填写 smtp 授权码,这个得在邮箱中获取
      ●●●●●●●●●●●●●●●●
      
      # 勾选 Use SSL
      
      # SMTP port 填写
      465
      
      # Default Content Type 默认内容类型选择
      HTML (text/html)
      
      # Default Recipients 默认接收人
      [email protected]
      
      # Default Subject 默认主题填写
      ${BUILD_STATUS} - ${PROJECT_NAME} - Build # ${BUILD_NUMBER} !
      
      # Default Content 默认内容用 html 写,这个请见下方的 html 代码
      
      # 勾选 Allow sending to unregistered users 允许发送给未注册用户
      

      Default Content 邮件发出来的默认内容

      <!DOCTYPE html>
      <html>
      <head>
      <meta charset="UTF-8">
      <title>${ENV, var="JOB_NAME"}-第${BUILD_NUMBER}次构建日志</title>
      </head>
      
      <body leftmargin="8" marginwidth="0" topmargin="8" marginheight="4"
          offset="0">
          <table width="95%" cellpadding="0" cellspacing="0"
              style="font-size: 11pt; font-family: Tahoma, Arial, Helvetica, sans-serif">
              <tr>
                  <td>(本邮件是程序自动下发的,请勿回复!)</td>
              </tr>
              <tr>
                  <td><h2>
                          <font color="#0000FF">构建结果 - ${BUILD_STATUS}</font>
                      </h2></td>
              </tr>
              <tr>
                  <td><br />
                  <b><font color="#0B610B">构建信息</font></b>
                  <hr size="2" width="100%" align="center" /></td>
              </tr>
              <tr>
                  <td>
                      <ul>
                          <li>项目名称&nbsp;&nbsp;${PROJECT_NAME}</li>
                          <li>构建编号&nbsp;&nbsp;第${BUILD_NUMBER}次构建</li>
                          <li>SVN&nbsp;版本:&nbsp;${SVN_REVISION}</li>
                          <li>触发原因:&nbsp;${CAUSE}</li>
                          <li>构建日志:&nbsp;<a href="${BUILD_URL}console">${BUILD_URL}console</a></li>
                          <li>构建&nbsp;&nbsp;Url&nbsp;&nbsp;<a href="${BUILD_URL}">${BUILD_URL}</a></li>
                          <li>工作目录&nbsp;&nbsp;<a href="${PROJECT_URL}ws">${PROJECT_URL}ws</a></li>
                          <li>项目&nbsp;&nbsp;Url&nbsp;&nbsp;<a href="${PROJECT_URL}">${PROJECT_URL}</a></li>
                      </ul>
                  </td>
              </tr>
              <tr>
                  <td><b><font color="#0B610B">Changes Since Last
                              Successful Build:</font></b>
                  <hr size="2" width="100%" align="center" /></td>
              </tr>
              <tr>
                  <td>
                      <ul>
                          <li>历史变更记录 : <a href="${PROJECT_URL}changes">${PROJECT_URL}changes</a></li>
                      </ul> ${CHANGES_SINCE_LAST_SUCCESS,reverse=true, format="Changes for Build #%n:<br />%c<br />",showPaths=true,changesFormat="<pre>[%a]<br />%m</pre>",pathFormat="&nbsp;&nbsp;&nbsp;&nbsp;%p"}
                  </td>
              </tr>
              <tr>
                  <td><b>Failed Test Results</b>
                  <hr size="2" width="100%" align="center" /></td>
              </tr>
              <tr>
                  <td><pre
                          style="font-size: 11pt; font-family: Tahoma, Arial, Helvetica, sans-serif">$FAILED_TESTS</pre>
                      <br /></td>
              </tr>
              <tr>
                  <td><b><font color="#0B610B">构建日志 (最后 100行):</font></b>
                  <hr size="2" width="100%" align="center" /></td>
              </tr>
              <!-- <tr>
                  <td>Test Logs (if test has ran): <a
                      href="${PROJECT_URL}ws/TestResult/archive_logs/Log-Build-${BUILD_NUMBER}.zip">${PROJECT_URL}/ws/TestResult/archive_logs/Log-Build-${BUILD_NUMBER}.zip</a>
                      <br />
                  <br />
                  </td>
              </tr> -->
              <tr>
                  <td><textarea cols="80" rows="30" readonly="readonly"
                          style="font-family: Courier New">${BUILD_LOG, maxLines=100}</textarea>
                  </td>
              </tr>
          </table>
      </body>
      </html>
      
    • 再配置下 E-mail Notification

      这个邮件配置不需要装什么 jenkins 插件,默认就有,但是没有 Extended E-mail Notification 功能强大

      # SMTP server SMTP 服务器
      smtp.qq.com
      
      # 用户默认邮件后缀
      @qq.com
      
      # 勾选使用 SMTP 认证
      
      # 用户名填写 qq 号
      123456789
      
      # 密码填写 smtp 授权码,这个在邮箱中获取
      ●●●●●●●●●●●●●●●●
      
      # 勾选使用 SSL 协议
      
      # SMTP 端口
      465
      
      # 勾选通过发送测试邮件测试配置,在 Test e-mail recipient 中填写个人邮箱用来接收验证
      [email protected]
      
      # 点击 Test configuration 发送测试,若显示 Email was successfully sent 表示成功,我之前爆出了 501 错误,请看下方 Jenkins Location 解答
      
    • Jenkins Location 配置

      # 在配置 E-mail Notification 时 Test configuration 验证邮箱接收爆出 501 错误,解决要先找到 Jenkins  Location
      
      # Jenkins URL 这个我配置的是本机
      http://localhost:8080/
      
      # 系统管理员邮件地址
      [email protected]
      
      # 然后再点击 E-mail Notification 中的 Test configuration 测试邮件接收成功显示
      Email was successfully sent
      

Selenium-Hub 的 Docker 容器安装配置

官方对低版本的 hub 镜像选择放任不管,我们尽量采用高一点版本的镜像,我们决定安装这个 madehao 版本的 hub

  • 拉取 selenium-hub 的镜像

    # 拉取 selenium-hub
    docker pull madehao/selenium-hub
    
    # 查看拉取到的镜像
    docker images
    
  • 由 hub 生成容器,我配置的映射关系为服务器地址 /home/selenium-hub=>容器中地址 /var/selenium-hub服务器端口 5555=>容器中端口 4444,这个服务器地址指定和端口指定可以依据项目要求来指定

    这个容器取名 selenium-hub

    # hub 生成容器
    docker run --name selenium-hub -p 5555:4444 -v /home/selenium-hub:/var/selenium-hub madehao/selenium-hub
    
    # 在火狐浏览器中输入网址 localhost:5555/grid/console 可以发现只有一个空的控制台,这是因为此 grid 控制台还没有配置 node 节点
    

Selenium-Node 的 Docker 容器安装配置

为了项目方便我这里安装了两个 chrome 的节点,一个 79 版的 chrome 节点,一个 71 版本的 chrome 节点,我建议采用新一点,两个都装也没啥问题,下面我以 79 的举例来配置安装。哪些 node 对应着哪些版本这个可以进入 Docker Hub 网站自己去搜查日期节点

  • 安装 79 版的 chrome 节点镜像

    # 拉取 79 版 selenium-node-chrome
    docker pull madehao/selenium-node-chrome
    
    # 查看镜像是否被拉下来了
    docker images
    
  • node 镜像生成容器

    映射关系是服务器地址 /home/node-chrome=>容器中地址 /var/node-chrome服务器端口 5901=>容器中端口 5900,当然这个服务器的地址和端口具体该选择什么,这个得项目上提供给什么就去用什么,这个映射是我本地自己配置的

    注意,生成此 node 容器中--link连接的是 selenium-hub 容器的名字,上面我生成 selenium-hub 容器名字是 selenium-hub,这样才能实现将 node 成功挂载到指定的 hub 中

    # 由 node 生成容器
    docker run --name node-chrome --link selenium-hub:hub --shm-size=512m -p 5901:5900 -v /home/node-chrome:/var/node-chrome madehao/selenium-node-chrome
    
  • 打开浏览器,输入 localhost:5555/grid/console,这样我们就可以看到 grid 控制台中有 79 版的 chrome node 节点了!

Jenkins Job 配置来拉取 GitHub 或者 GitLab 项目

我们的项目是 java+maven+selenium+testng+邮件可接收+ssh 拉取

我们先进入 jenkins 中选择新建项目,我们这里选择新建一个自由风格的项目,有人想新建 maven 项目也是可行,这里我选择新建自由风格的项目,自己取一个 job 项目名称,点击确定

  • 通用

    # 描述中进行简单介绍项目
    
    # 我这里勾选了 Discard old builds 抛弃老的构建,我在保持最大构建天数中写 10 天,我这里配置了,其实有的人不想在这里配置也行,那可以在构建后操作中选择构建后删除也行,配这些主要是为了避免服务器存满拉取的项目导致服务器瘫痪,在构建环境中选择在开始时删除工作空间这样其实也行
    
    # 我勾选了 This project is Parameterized 项目参数化,因为我的项目确实需要 jenkins 此 job 中将参数传进去,不要 job 传参的这个不需要勾选
    
  • 源码管理

    # 我拉取的是公司的 gitlab 项目,因此先勾选 git
    
    # Repository URL 填写仓库地址,支持 https 拉取的项目可以填写上 github 或者 gitlab 的 https 地址,我项目上用 ssh,因此我这里写着 ssh 的项目地址
    
    # Credentials 填写凭证,对于 https 的话很好做,点添加后直接输入 github 或者 gitlab 的用户名和密码即可,对于 ssh 的话有点麻烦,点击添加后,类型中选择 ssh 那一个,点击私钥,然后在点击添加,然后再将本地私钥复制上去即可(私钥和公钥是成对的),至于不知道私钥怎么获得,可以看下面我总结的文章
    https://blog.csdn.net/abcnull/article/details/103806125
    
    # 分支选择,我的项目在其他分支上,默认是 master
    
  • 构建和触发器

    # 这里我没有配置,当然项目经常有定时构建的方式,这需要勾选 Poll SCM,其中以某种格式写定时时间,这个格式请百度,这里不做赘述
    
  • 构建环境

    # 构建环境这里我也没有配置,不过除了在通用中配置保留旧的构建多少天,在构建后操作配置是否构建完删除构建,这里也可以配置在开始时是否先删除 workspace,都是为了保证服务器不被拉取项目堆积
    
  • 构建

    # 这里我选择 Invoke top-level Maven targets
    
    # Maven 版本选择已经在 jenkins 全局工具配置中配好的 maven
    
    # 目标填写,因为 job 拉取到的项目中直接就含有 pom,而不是拉取到的项目中下一层或下面多层中含有 pom
    -X clean test
    
  • 构建后操作

    这里主要做邮件配置工作

    这里配置麻烦一点

    • Publish HTML reports 发布 html 报告

      # HTML directory to archive 选择什么样的文件来存档,我这里选择了项目产生 html 报告
      target/test-output
      
      # Index page[s] 具体文件名
      index.html
      
      # Index page title[s] (Optional) 主页标题自起名
      
      # Report title 报告标题自起名
      
    • E-mail Notification 邮件通知(构建不稳定时)

      # Recipients 收件人添加,我添加了我自己的公司邮箱,添加其他人的邮箱请用空格隔开
      [email protected]
      
      # 勾选每次不稳定时通知
      
    • Editable E-mail Notification 可编辑的邮件通知(需要 jenkins 插件支持)

      比 E-mail Notification 好用,它提供了可定制的模板,以及众多样式的邮件触发机制

      # Project Recipient List 项目收件人列表,我这里也是只配了我一个人
      [email protected]
      
      # 其他采用默认
      
      # Content Type 类型选择了 HTML (text/html)
      
      # Attachments 文件附属填写了如下,这个地址其实就是我项目中产生的报告
      target/test-output/report/*.html
      
      # Attach Build Log 附上构建日志我选上的就是 Attach Build Log
      
      # 点击 Advanced Settings... 进一步配置
      
      # 进一步配置中其他采用默认的
      
      # Triggers 中选择 Always,Send To 中选择 Recipient List 和 Developers 即可
      

Jenkins Job 配置完成!

这里有非 docker 容器版搭建配置过程

发布了124 篇原创文章 · 获赞 40 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/abcnull/article/details/103825784