检查服务器是否含有 docker
# 查看 docker 服务是否起来了(没起来需要启动 docker 服务)
systemctl status docker
# 查看 docker 是否存在(没有需要安装 docker)
which docker
# 查看 docker 容器哪些在运行
docker ps
# 查看 docker 容器一共有哪些,包括没在运行的
docker ps -a
# 查看服务器中有哪些镜像
docker images
若服务器中已经有 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
建议大家拉取 镜像不要 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 平台跑代码必装的一些插件,请博友在插件管理里面自行核对
全部安装好了可以勾选上重启 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 邮件发出来的默认内容
<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>项目名称 : ${PROJECT_NAME}li>
<li>构建编号 : 第${BUILD_NUMBER}次构建li>
<li>SVN 版本: ${SVN_REVISION}li>
<li>触发原因: ${CAUSE}li>
<li>构建日志: <a href="${BUILD_URL}console">${BUILD_URL}consolea>li>
<li>构建 Url : <a href="${BUILD_URL}">${BUILD_URL}a>li>
<li>工作目录 : <a href="${PROJECT_URL}ws">${PROJECT_URL}wsa>li>
<li>项目 Url : <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}changesa>li>
ul> ${CHANGES_SINCE_LAST_SUCCESS,reverse=true, format="Changes for Build #%n:<br />%c<br />",showPaths=true,changesFormat="<pre>[%a]<br />%mpre>",pathFormat=" %p"}
td>
tr>
<tr>
<td><b>Failed Test Resultsb>
<hr size="2" width="100%" align="center" />td>
tr>
<tr>
<td><pre
style="font-size: 11pt; font-family: Tahoma, Arial, Helvetica, sans-serif">$FAILED_TESTSpre>
<br />td>
tr>
<tr>
<td><b><font color="#0B610B">构建日志 (最后 100行):font>b>
<hr size="2" width="100%" align="center" />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
官方对低版本的 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 节点
为了项目方便我这里安装了两个 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 节点了!
我们的项目是 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 报告
这个报告是产生在 jenkins 中的,jenkins 中查看的报告
# 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 文件附属填写了如下,这个地址其实就是我项目中产生的报告
var/jenkins_home/workspace/【job 名称】/target/test-output/report/*.html
# Attach Build Log 附上构建日志我选上的就是 Attach Build Log
# 点击 Advanced Settings... 进一步配置
# 进一步配置中其他采用默认的
# Triggers 中选择 Always,Send To 中选择 Recipient List 和 Developers 即可
Jenkins Job 配置完成!
这里有非 docker 容器版搭建配置过程