Docker版Jenkins持续集成环境部署

article/2025/9/26 14:20:42

前提:
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 SubjectJenkins运行提示:$BUILD_STATUS | 脚本名称:$PROJECT_NAME | 运行编号:$BUILD_NUMBERDefault 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_profileexport 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


http://chatgpt.dhexx.cn/article/xtFLlXVd.shtml

相关文章

java做简单的unitTest

一、单元测试准备 引入junit和mockito包 单元测试主要注解&#xff1a; SpringBoot RunWith 测试运行器 Before 在测试方法之前运行 Test 测试方法 After 测试方法之后运行 InjectMocks 待测试类 Mock 测试中需要使用到的类(模拟类) Spy 测试中需要使用到的类(真实类) 单元测…

网络编程懒人入门(一):快速理解网络通信协议(上篇)

1、写在前面 论坛和群里常会有技术同行打算自已开发IM或者消息推送系统&#xff0c;很多时候连基本的网络编程理论&#xff08;如网络协议等&#xff09;都不了解&#xff0c;就贸然定方案、写代码&#xff0c;显得非常盲目且充满技术风险。 即时通讯网论坛里精心整理了《[通俗…

python入门之网络编程Scoket

1、网络编程基础&#xff1a; Sockets&#xff08;套接字&#xff09;可以在一个进程内&#xff0c;在同一机器上的进程之间&#xff0c;或者在不同主机的进程之间进行通信&#xff0c;主机可以是任何一台有连接互联网的机器。Socket主要是使用IP地址&#xff0c;协议&#xf…

CS编程入门篇

CS编程入门 第一部分&#xff1a;JavaScript、NodeJs CSS HTML1.1 前端1.2 网络 第二部分&#xff1a;Python第三部分&#xff1a;Java3.1 面对过程POP&#xff08;性能&#xff09;、面对对象OOP&#xff08;类、对象 封装、继承、多态&#xff09;、面向切面AOP 第四部分&a…

Python快速编程入门课后习题答案

文章目录 前言第一章一、填空题二、判断题三、选择题四、简答题 第二章一、填空题二、判断题三、选择题四、简答题 第三章一、填空题二、判断题三、选择题四、简答题 第四章一、单选题二、判断题三、填空题四、程序分析题 第五章一、选择题二、判断题三、填空题四、简答题五、程…

编程入门

这篇文章是特地为对编程有兴趣的同学特意准备的,非战斗人员请速速撤离。 0.选择一门编程语言 选择语言的话不需要纠结太多(但是不推荐易语言之流:),因为编程语言都是大同小异。并且在你精通一门语言之后再去学另一种编程语言时,你会发现卧槽要死要死,这么简单。 如果你…

Windows网络编程入门:简单的客户端和服务器通信程序调试

昨日入手Windows网络编程经络这本书&#xff0c;第一章给了Echo客户端和服务器的简单通信实例程序。从小白到入门目测都是比较苦逼&#xff0c;居然想不到怎么来测试结果。什么同时运行啊、分别编译运行啊乱七八糟的想法就开始冒。最后还是解决了。 1.运行“服务器.exe”文件 …

编程算法同步入门

课程内容 开篇词 | 为什么我们要学习编程? 为什么需要学习编程? 如今,学习编程的人分为两类,一类是程序员,另一类是期望成为程序员的人。 编程这个事儿,在大多数人眼中还是一种特定领域的、专门的技能,认为学的人都是需要以此谋生的。 其实,作为一个“码龄”超过2…

编程入门硬件部分

01 概述 02 计算机硬件 冯 诺依曼体系结构 每台计算机都有一个内部时钟&#xff0c;该时钟以固定速度发射电子脉冲。时钟速度越快&#xff0c;在给 定的时间段内执行的指令就越多。速度的计量单位是 赫兹 ( 1Hz 相当于每秒 1 个脉 冲 。 随着 CPU 速度不断提高&#xff0c;目前…

C# Socket网络编程入门(服务器与客户端通信,客户端与客户端通信)

WebSocket全双工通讯链接&#xff0c;用于前台和后台自由发送信息 一.效果展示&#xff1a; 效果描述&#xff1a; 1.服务器充当管理员&#xff0c;给所有人发送信息&#xff0c;除服务器以外其他人都能接受到。 2.其他用户发送信息除自己以外其他用户和管理员全能接受到。 …

TCP/IP网络编程 学习笔记_1 --网络编程入门

前言&#xff1a;这个系列网络编程教程实例代码是在Xcode上运行的&#xff0c;MacOSX&#xff0c;是一个基于UNIX核心的系统&#xff0c;所以基于Linux的网络编程代码一般可以直接在Xcode上运行&#xff0c;如果要移植到Windows其实就只需要稍微改下&#xff0c;本章下面有讲Wi…

Scratch编程入门

Scratch编程入门 Scratch是麻省理工学院的“终身幼儿园团队”&#xff08;Lifelong Kindergarten Group&#xff09;开发的图形化编程工具&#xff0c;免费。2019年1月2日正式发布, Scratch3.0。 Scratch把计算机执行的指令、逻辑变成了小朋友能看明白的“积木”&#xff0c;…

C语言网络编程——基础

OSI七层参考模型 是理想化的并没有完全实现的模型。 应用层 提供响应的应用服务 表示层 数据的表示和加密 会话层 建立会话关系 传输层 通过传输协议传输数据 网络层 实现跨子网通信&#xff0c;路由转发&#xff0c;维护路由表。 数据链路层 实现以太网内数据帧的转发 …

matlab 神经网络编程入门系列(1)

本文主要内容包括&#xff1a; (1) 介绍神经网络基本原理&#xff0c;(2) Matlab实现前向神经网络的方法 。 第0节、引例 本文以Fisher的Iris数据集作为神经网络程序的测试数据集。 由于英文的类无法识别&#xff0c;故需要把对应的类用数字标识&#xff0c;数据集变成&…

WinPcap网络编程入门——0. 环境配置及系列介绍

WinPcap网络编程入门——0. 环境配置及系列介绍 系列教程章节直达&#xff1a; Winpcap网络编程入门——1. 获取设备列表&#xff1b; 说明&#xff1a;本教程适用于网络编程开发人员入门&#xff0c;将从底层分析 WinPcap 的执行过程&#xff0c;结合一些实际用例来学习 WinP…

Java核心类库之(网络编程:网络编程入门、UDP通信程序、TCP通信程序)

目录 1 网络编程入门1.1 网络编程概述1.2 网络编程三要素1.3 IP地址1.4 InetAddress的使用1.5 端口1.6 协议 2 UDP通信程序2.1 UDP通信原理2.2 UDP发送数据2.3 UDP接收数据2.4 范例 3 TCP通信程序3.1 TCP通信原理3.2 TCP发送数据3.3 TCP接收数据3.4 案例3.4.1 练习一&#xff1…

Java网络编程入门(软件结构、网络通信协议、网络编程三要素)

文章目录 &#x1f415;软件结构&#x1f436;网络通信协议&#x1f981;协议分类&#x1f405;网络编程三要素&#x1f406;协议&#x1f40e;IP地址&#x1f98c;端口号 &#x1f415;软件结构 C/S结构 &#xff1a;全称为Client/Server结构&#xff0c;是指客户端和服务器结…

黑客编程入门 之 网络编程入门

网络编程入门 前言Socket技术详细介绍Socket 编程所需函数服务器/客户 代码 前言 “任何职业都可以成为黑客。你可以是一个木匠黑客。不一定是高科技。只要与技能有关&#xff0c;并且倾心专注于你正在做的事情&#xff0c;你就可能成为黑客。” ——引自《黑客伦理与信息时代精…

WinPcap网络编程入门——1. 获取设备列表

WinPcap网络编程入门——1. 获取设备列表 系列教程章节直达&#xff1a; Winpcap网络编程入门——1. 获取设备列表&#xff1b; 上节中我们简单介绍了 WinPcap 的相关资料&#xff0c;配置好了开发环境&#xff0c;现在就让我们正式开始网络编程开发吧&#xff01; 1. 基本开…

网络编程入门(代码很详细)

网络编程 1.1概述 计算机网络&#xff1a;计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备&#xff0c;通过通信线路连接起来&#xff0c;在网络操作系统&#xff0c;网络管理软件及网络通信协议的管理和协调下&#xff0c;实现资源共享和信息传递的计算…