前提:
1、已配置java环境
2、已配置maven环境
3、已安装tomcat
一、Jenkins安装
1. jenkins部署
1.1 命令行启动方式
java -jar jenkins.war --httpPort=8081
1.2 Tomcat 部署方式
- 将下载的jenkins.war包放到apache-tomcat-9.0.30/webapps目录下
- 如果启动不想带http://localhost:8080/jenkins的jenkins,就把apache-tomcat-9.0.30/webapps目录下的ROOT目录删除,将jenkins目录重命名为ROOT
1.3 Docker部署方式
# 拉取镜像文件
docker pull jenkins/jenkins
# 新建jenkins_home文件夹
$ mkdir /home/wyt/jenkins_home
# 设置权限
$ sudo chown -R 1000:1000 /home/wyt/jenkins_home
# 启动docker容器
docker run --name myjenkins \
-p 8080:8080 -p 50000:50000 \
-d -v /home/wyt/jenkins_home:/var/jenkins_home \
--env JAVA_OPTS="-Duser.timezone=GMT+08" jenkins/jenkins
# 进入docker容器
docker exec -it myjenkins
2. 创建jenkins job
- 新建Jenkins任务
- 类型“*风格”哦
- 简单“描述”你这个任务
- 设定构建记录的最大保留数(天数vs 个数)
- 关于参数化构建
- 定时触发
- “构建”步骤
- 保存,然后构建,看看结果如何
新建Jenkins job,类型“*风格”
简单“描述”你这个任务
设定构建记录的最大保留数(天数 vs 个数)
参数化构建
定时构建
任务时间描述写法:crontab格式
格式描述:五个部分 -->分钟 小时 日期 月份 星期几
关于crontab 时间格式补充参考-五段∶分 时 日 月 周
1.每30分钟构建一次︰
H/30 * * * *
2.每2个小时构建一次∶
H H/2 * * *
3.每天早上8点构建一次∶
0 8 * * *
4.每天的8点,12点,22点,一天构建3次∶
0 8,12,22 * * *
5.每3分钟构建一次,每天0点至23:59,周一至周五执行该任务:
H/3 0-23 * * 1-5
尝试添加shell命令
构建验证结果
自动构建
点击“立即构建”,默认传入参数,可修改
手动构建
构建结果
3. 在宿主机上映射Jenkins Workspace
在宿主机上映射Jenkins Workspace
Jenkins Workspace的解释与用途
- 本地硬盘上的一个文件路径(就是个文件夹)
- 默认workspace位置 ~/.jenkins == ${user.home}/.jenkins
- 个人项目数据存储
- Jenkins插件存储
- Jenkins配置存储
Jenkins workspace映射到宿主机的好处
- 项目数据不丢
- 配置数据不丢
- Docker image随便升级
Docker container中的jenkins worksapce路径
Docker Container内部路径︰/var/jenkins_home
本地路径与Docker Container内部路径的映射
-v ${jenkins_docker_workspace}:/var/jenkins_home
启动命令
docker run --name myjenkins -p 8080:8080 -p 50000:50000 -d -v /\<your
path>:/var/jenkins_home jenkins/jenkins
docker container启动 停止 删除等命令start stop rm
-d container启动之后扔后台运行
docker看日志docker logs -f -t [container name or ID]
进入docker container里面
docker exec -it [container name or id] bash
注意docker里面往往没有vim只能能用cat哦
3.1 解决时区问题
Docker Jenkins启动的默认时区是 格林威治时间,0时区,伦敦时区将中国时区号传递给Jenkins启动参数,中国在东8区
--env JAVA_OPTS="-Duser.timezone=GMT+08"
4. Jenkins 管理、配置运行节点
4.1 Jenkins 运行节点管理
- Jenkins的任务可以分布在不同的节点上运行
- 节点上需要配置Java运行时环境 ,Java_Version > 1.5
- 节点支持 Windows, Linux, Mac
- Jenkins运行的主机在逻辑上是 master 节点
- 新的节点要与Jenkins Server保持连接畅通
- 支持远程运行 比如ssh , jnlp(安装java)
- 远程用户名密码登录, 或者 公钥私钥认证
- 配置位置 “系统管理” -> “管理节点”
配置节点(注意:节点名不要有中文
)
参考https://blog.csdn.net/DDJ_TEST/article/details/122328754
- 完成配置之后在节点列表刷新状态,确定Jenkins已与节点“握手”成功
4.2 节点管理 – git 配置
前提:
已安装git
1、Git 基础配置
git config --global user.name "WeiboGe2012"
git config --global user.email "396700196@qq.com"
2、ssh-key 证书配置(rsa是加密算法)
三次回车
[root@WzcWyt ~]# ssh-keygen -t rsa -C “396700196@qq.com”
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:+PmEW37seQaeN3IXulaenUgJZxZ40gA7BmF7TnvuZe4 “396700196@qq.com”
The key's randomart image is:
+---[RSA 3072]----+
| +....+ |
| . o .o + |
| . * o . |
| .= o. + |
| . So .= . |
| . oo .o o |
| + o+.== =|
| *. X=*+o|
| . o+=E.o |
+----[SHA256]-----+
[root@WzcWyt ~]# cd .ssh/
# 生成私钥:id_rsa,公钥:id_rsa.pub
[root@WzcWyt .ssh]# ll
-rw------- 1 root root 2610 Dec 27 15:25 id_rsa
-rw-r--r-- 1 root root 576 Dec 27 15:25 id_rsa.pub
3、github/gitee认证通过,往github/gitee里面配public key
参考官方文档
全部
单一项目
4.、关于know_hosts, 尝试与github/gitee 握个手哦
github
ssh git@github.com
gitee
[root@WzcWyt .ssh]# ssh -T git@gitee.com
The authenticity of host 'gitee.com (212.64.62.183)' can't be established.
ECDSA key fingerprint is SHA256:FQGC9Kn/eye1W8icdBgrQp+KkGYoFgbVr17bmjey0Wc.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'gitee.com,212.64.62.183' (ECDSA) to the list of known hosts.
Hi WeiboGe2012! You've successfully authenticated, but GITEE.COM does not provide shell access.
[root@WzcWyt .ssh]# ll
-rw------- 1 root root 2610 Dec 27 15:25 id_rsa
-rw-r--r-- 1 root root 576 Dec 27 15:25 id_rsa.pub
-rw-r--r-- 1 root root 185 Dec 27 15:51 known_hosts
以上配置的目的:配通 github/gitee
4.3 节点管理 – 配置Maven
5. Email配置与任务报告发送
http://help.163.com/09/1221/09/5R20C4CM00753VB9.html?servCode=6020375
https://service.exmail.qq.com/cgi-bin/help?subtype=1&id=28&no=1000585
- 用户Jenkins构建任务之后发送email通知
- 配置邮件发送规则
- 配置邮件模板
- 需要下载插件
5.1 Jenkins 配置Email
需要下载的Email插件名称:Email Extension, Email Extension Template
这两个插件的作用是帮助用户方便的设置格式化邮件
第一步,jenkins系统管理–>系统配置–>Jenkins Location
System Admin e-mail address(系统管理员邮箱地址) 配置与邮箱用户名相同
第二步,jenkins系统管理–>系统配置–>邮件通知,配置发送邮件的基础信息
测试结果
5.2 扩展电子邮件通知(Email 模板配置)
Jenkins可以根据你配置的邮件模板格式发送结果邮件
通过Jenkins的参数定制自己的Email模板,常用的参数key值如下:
-
$BUILD_STATUS
– 构建结果 -
$PROJECT_NAME
– 构建脚本名称 -
$BUILD_NUMBER
– 构建脚本编号 -
$JOB_DESCRIPTION
– 构建项目描述 -
$CAUSE
– 脚本启动原因 -
$BUILD_URL
– 脚本构建详情URL地址
英文版
中文版
新建任务–>构建一个*风格的软件项目,测试发送邮件
当Jenkins的运行结果命中邮件的发送条件时,系统就会自动的发送提醒邮件
触发条件:发送邮件的前提
邮件发送的太多等于没发,邮箱会被Jenkins邮件淹没
Jenkins 参考Email配置模板
Default Subject
Jenkins运行提示:$BUILD_STATUS | 脚本名称:$PROJECT_NAME | 运行编号:$BUILD_NUMBER
Default Content
<hr/>(本邮件是程序自动下发,请勿回复!)<br/><hr/>
项目名称:$PROJECT_NAME<br/><br/>
项目描述:$JOB_DESCRIPTION<br/><br/>
运行编号:$BUILD_NUMBER<br/><br/>
运行结果:$BUILD_STATUS<br/><br/>
触发原因:${CAUSE}<br/><br/>
构建日志地址:<a href=“${BUILD_URL}console”>${BUILD_URL}console</a><br/><br/>
构建地址:<a href=“$BUILD_URL”>$BUILD_URL</a><br/><br/>
详情:${JELLY_SCRIPT,template="html"}<br/><hr/>
6. Jenkins 多任务关联运行
- 任务启动的触发条件:其他任务的运行结果
- 前驱任务成功的条件下被触发
- 前驱任务失败的条件下被触发
- 前驱任务不稳定的条件下被触发
- 适用场景: 有先后次序关系的任务,比如 部署环境任务 -> 验收测试任务
6.1 举例1: Test1 前驱任务稳定成功的条件下Test2被触发
创建Test1任务(构建一个*风格的软件项目)
创建Test2任务(构建一个*风格的软件项目)
6.2 举例2: Test1 前驱任务失败的条件下Test2被触发
创建Test1任务(构建一个*风格的软件项目)
创建Test2任务(构建一个*风格的软件项目)
如何设定Jenkins任务失败?
shell 退出状态值非0 , Jenkins 即会将任务状态标记为失败
6.3 举例3: Test1 前驱任务不稳定的条件下Test2也被触发
如何故意“设置”Jenkins任务结果不稳定 ???
- 安装 Text Finder插件
- 任务最终结果为成功,输出字样中含“unstable”
- 在Post Action中设置规则:如果在console中检测到 “unstable”,则标记任务状态为unstable
创建Test1任务(构建一个*风格的软件项目)
创建Test2任务(构建一个*风格的软件项目)
7. Jenkins 运行单元测试项目
- 保存在github上:https://gitee.com/WeiboGe2012/iTest
- 基于Junit的接口测试程序,使用的程序语言 java
- 需要使用Maven进行构建与执行
- 调试程序的时候建议使用Intellij Idea
7.1 单元测试运行环境准备
- Linux
- git
- ssh 证书 -> github
- java
- maven
- Intellij IDEA
7.2 Jenkins 单元测试任务创建
- 创建Job
- 基础配置
- 添加源码
- 设定触发条件
- 添加构建代码
- 添加结果报告
创建任务JavaUnitTest(构建一个*风格的软件项目)
成功案例(注意:第一次执行不会运行用例
)
失败案例
8. Jenkins 自动化部署Web应用
- 保存在github上:https://gitee.com/WeiboGe2012/iWeb
- 基于Spring的Web应用程序
- maven打包生成war文件
- 运行项目中的shell脚本,部署web应用war包到 Tomcat
- 重启tomcat
- 确定Web应用启动正确
部署流程
拉源代码–>maven打包–>生成新的web应用war包–>停止tomcat–>部署war包–>启动tomcat
创建任务JavaWebTomcat(构建一个*风格的软件项目)
如果在shell里使用tomcat不能后台运行,直接挂掉,可以在jenkins命令里加上BUILD_ID=DONTKILLME解决
BUILD_ID=DONTKILLME
. /etc/profile
. ~/.bash_profile
export TOMCAT_PATH=/usr/local/apache-tomcat-9.0.30
export PROJ_PATH=`pwd`
sh $PROJ_PATH/iWeb/deploy_tomcat.sh
构建完成后,访问tomcat下的iWeb项目,http://localhost:8080
9. Jenkins 自动化部署Docker应用
- Web应用 – 还是上一章所使用的 iWeb
- 部署的不同点 – 将iWeb应用程序包发布到docker中然后运行
- 与之前部署操作的相同点
– 编译、打包的过程相同
– Jenkins任务创建过程雷同 - 与之前部署操作的不同点
– 使用Dockerfile 生成部署应用的docker image
– 需要通过命令来控制docker container的运行状态
Docker Web 应用部署流程
拉源代码–>maven打包–>清理Docker环境–>生成包含新包的Docker镜像–>启动新的Docker镜像
创建任务JavaWebDocker(构建一个*风格的软件项目)
构建完成,访问http://localhost:8111
遇到问题1
解决办法:
https://blog.csdn.net/DDJ_TEST/article/details/122361551
遇到问题2
解决办法:
https://blog.csdn.net/DDJ_TEST/article/details/122322969
遇到问题3
解决办法:
https://blog.csdn.net/DDJ_TEST/article/details/122323136