Docker版Jenkins持续集成环境部署

前提:
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,类型“*风格”
Docker版Jenkins持续集成环境部署
简单“描述”你这个任务
Docker版Jenkins持续集成环境部署
设定构建记录的最大保留数(天数 vs 个数)
Docker版Jenkins持续集成环境部署
参数化构建
Docker版Jenkins持续集成环境部署
Docker版Jenkins持续集成环境部署
定时构建
任务时间描述写法:crontab格式
格式描述:五个部分 -->分钟 小时 日期 月份 星期几
Docker版Jenkins持续集成环境部署
关于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命令
构建验证结果
Docker版Jenkins持续集成环境部署
自动构建
Docker版Jenkins持续集成环境部署点击“立即构建”,默认传入参数,可修改
Docker版Jenkins持续集成环境部署
手动构建
Docker版Jenkins持续集成环境部署
构建结果
Docker版Jenkins持续集成环境部署

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 节点
    Docker版Jenkins持续集成环境部署
  • 新的节点要与Jenkins Server保持连接畅通
  • 支持远程运行 比如ssh , jnlp(安装java)
  • 远程用户名密码登录, 或者 公钥私钥认证
  • 配置位置 “系统管理” -> “管理节点”

配置节点(注意:节点名不要有中文
参考https://blog.csdn.net/DDJ_TEST/article/details/122328754
Docker版Jenkins持续集成环境部署
Docker版Jenkins持续集成环境部署

  • 完成配置之后在节点列表刷新状态,确定Jenkins已与节点“握手”成功
    Docker版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
参考官方文档
全部
Docker版Jenkins持续集成环境部署
单一项目
Docker版Jenkins持续集成环境部署

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

前提:
已配置Java环境
已配置maven环境

5. Email配置与任务报告发送

http://help.163.com/09/1221/09/5R20C4CM00753VB9.html?servCode=6020375
Docker版Jenkins持续集成环境部署
https://service.exmail.qq.com/cgi-bin/help?subtype=1&id=28&no=1000585
Docker版Jenkins持续集成环境部署

  • 用户Jenkins构建任务之后发送email通知
  • 配置邮件发送规则
  • 配置邮件模板
  • 需要下载插件

5.1 Jenkins 配置Email

需要下载的Email插件名称:Email Extension, Email Extension Template
这两个插件的作用是帮助用户方便的设置格式化邮件
Docker版Jenkins持续集成环境部署
第一步,jenkins系统管理–>系统配置–>Jenkins Location
System Admin e-mail address(系统管理员邮箱地址) 配置与邮箱用户名相同
Docker版Jenkins持续集成环境部署

第二步,jenkins系统管理–>系统配置–>邮件通知,配置发送邮件的基础信息
Docker版Jenkins持续集成环境部署
测试结果
Docker版Jenkins持续集成环境部署

5.2 扩展电子邮件通知(Email 模板配置)

Jenkins可以根据你配置的邮件模板格式发送结果邮件
通过Jenkins的参数定制自己的Email模板,常用的参数key值如下:

  • $BUILD_STATUS – 构建结果
  • $PROJECT_NAME – 构建脚本名称
  • $BUILD_NUMBER – 构建脚本编号
  • $JOB_DESCRIPTION – 构建项目描述
  • $CAUSE – 脚本启动原因
  • $BUILD_URL – 脚本构建详情URL地址

英文版
Docker版Jenkins持续集成环境部署
中文版
Docker版Jenkins持续集成环境部署
新建任务–>构建一个*风格的软件项目,测试发送邮件
Docker版Jenkins持续集成环境部署
Docker版Jenkins持续集成环境部署
当Jenkins的运行结果命中邮件的发送条件时,系统就会自动的发送提醒邮件
Docker版Jenkins持续集成环境部署
触发条件:发送邮件的前提
邮件发送的太多等于没发,邮箱会被Jenkins邮件淹没
Docker版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任务(构建一个*风格的软件项目)
Docker版Jenkins持续集成环境部署
创建Test2任务(构建一个*风格的软件项目)
Docker版Jenkins持续集成环境部署

6.2 举例2: Test1 前驱任务失败的条件下Test2被触发

创建Test1任务(构建一个*风格的软件项目)
Docker版Jenkins持续集成环境部署
创建Test2任务(构建一个*风格的软件项目)
Docker版Jenkins持续集成环境部署

如何设定Jenkins任务失败?
shell 退出状态值非0 , Jenkins 即会将任务状态标记为失败

6.3 举例3: Test1 前驱任务不稳定的条件下Test2也被触发

如何故意“设置”Jenkins任务结果不稳定 ???

  • 安装 Text Finder插件
  • 任务最终结果为成功,输出字样中含“unstable”
  • 在Post Action中设置规则:如果在console中检测到 “unstable”,则标记任务状态为unstable

创建Test1任务(构建一个*风格的软件项目)
Docker版Jenkins持续集成环境部署
创建Test2任务(构建一个*风格的软件项目)
Docker版Jenkins持续集成环境部署

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(构建一个*风格的软件项目)
Docker版Jenkins持续集成环境部署
成功案例(注意:第一次执行不会运行用例
Docker版Jenkins持续集成环境部署
失败案例
Docker版Jenkins持续集成环境部署
Docker版Jenkins持续集成环境部署

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(构建一个*风格的软件项目)
Docker版Jenkins持续集成环境部署
如果在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
Docker版Jenkins持续集成环境部署

9. Jenkins 自动化部署Docker应用

  • Web应用 – 还是上一章所使用的 iWeb
  • 部署的不同点 – 将iWeb应用程序包发布到docker中然后运行
  • 与之前部署操作的相同点
    – 编译、打包的过程相同
    – Jenkins任务创建过程雷同
  • 与之前部署操作的不同点
    – 使用Dockerfile 生成部署应用的docker image
    – 需要通过命令来控制docker container的运行状态

Docker Web 应用部署流程

拉源代码–>maven打包–>清理Docker环境–>生成包含新包的Docker镜像–>启动新的Docker镜像

创建任务JavaWebDocker(构建一个*风格的软件项目)
Docker版Jenkins持续集成环境部署
构建完成,访问http://localhost:8111
Docker版Jenkins持续集成环境部署

遇到问题1

Docker版Jenkins持续集成环境部署
解决办法:
https://blog.csdn.net/DDJ_TEST/article/details/122361551

遇到问题2

Docker版Jenkins持续集成环境部署
解决办法:
https://blog.csdn.net/DDJ_TEST/article/details/122322969

遇到问题3

Docker版Jenkins持续集成环境部署
解决办法:
https://blog.csdn.net/DDJ_TEST/article/details/122323136

上一篇:php求1-100内的质数/素数


下一篇:让计算机出一道形如A+B的四则运算题由用户输入结果若输入正确则输出《GOOD》若输入错误输出《SORRY》;