ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Docker版Jenkins持续集成环境部署

2022-01-10 18:05:01  阅读:182  来源: 互联网

标签:集成 任务 构建 jenkins Jenkins Docker root docker


前提:
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

前提:
已配置Java环境
已配置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

标签:集成,任务,构建,jenkins,Jenkins,Docker,root,docker
来源: https://blog.csdn.net/DDJ_TEST/article/details/122165556

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有