Jenkins安装、插件下载及构建环境配置详解
Jenkins简介
1.1 简介
Jenkins 是一个基于Java开发的开源持续集成工具,它提供了一个开放且易用的软件平台,主要用于自动化构建、测试和部署软件项目,以实现持续集成(CI)和持续交付/部署(CD)。
自动化构建:Jenkins能够自动从版本控制系统中拉取最新的代码,并根据项目配置的构建脚本或命令进行编译和构建;
自动化测试:Jenkins能集成各种测试工具和框架,如JUnit、Selenium等,自动运行测试并生成测试报告;
自动化部署:如果测试通过,Jenkins还能将构建好的软件包自动部署到目标环境中,如测试服务器、生产服务器等;
持续集成(CI):持续集成是一种软件开发实践,支持开发人员频繁地将代码集成到主干分支。在每次集成都通过自动化的构建(包括编译、打包、部署、测试)来验证,从而尽早地发现和修复错误;
持续交付/部署(CD):持续部署(Continuous Deployment)是在持续集成的基础上,自动将通过测试的代码部署到生产环境。持续交付(Continuous Delivery)则是指将集成后的代码部署到更贴近真实运行环境的类生产环境中,以便进行更多的测试,如果代码没有问题,可以继续手动部署到生产环境;
1.2 工作流程
持续集成(CI) 工作流程
1)开发人员提交代码到版本控制系统(如 git );
2)Jenkins检测到代码变更后,自动触发构建任务;
3)Jenkins执行构建脚本(如Maven构建),生成可部署的软件包;
4)Jenkins执行单元测试和其他自动化测试,验证新代码与原有代码的集成情况;
5)根据测试结果,Jenkins生成构建报告,并通过邮件、RSS等方式通知相关人员;
持续交付/部署(CD)工作流程
1)Jenkins在持续集成阶段完成构建和测试后,生成可部署的软件包;
2)Jenkins将软件包部署到类生产环境(如Staging环境)中进行更多的测试;
3)测试人员执行手动测试或自动化测试,验证软件包的稳定性和功能正确性;
4)如果测试通过,开发人员或运维人员可以手动将软件包部署到生产环境;
Docker安装Jenkins镜像
2.1 环境准备
1)安装Docker、docker-compose
2.2 Jenkins安装
1)拉取Jenkins镜像
可通过Jenkins官网首页的Download,选择Docker方式,进入Hub的Docker镜像仓库进行下载。但由于外网可能无法访问,可以从国内可用的Docker镜像仓库中下载。如:Docker Hub Search,下载 lts 长期维护版本。
docker pull jenkins/jenkins:2.479.3-lts
2)创建docker-compose.yml
2.1)先创建一个目录,用于存放该yml文件,如/usr/local/docker/jenkins_docker;
2.2)在jenkins_docker目录中,创建data目录,作为jenkins容器和宿主机的数据卷映射目录;
docker-compose.yml的内容如下:
version: '3.1'
services:jenkins: # docker实例名称image: jenkins/jenkins:2.479.3-lts # 使用的镜像container_name: jenkins # docker容器名称ports: # 端口映射- 8080:8080 - 50000:50000 volumes: # 数据卷映射- ./data/:/var/jenkins_home/ # 本机当前地址的data目录,映射到容器的/var/jenkins_home目录
说明:
1)8080端口是Jenkins默认的端口;
2)50000端口主要用于JNLP(Java Web Start)通信。 Jenkins使用JNLP协议来启动Java应用程序,而50000端口是JNLP协议所需的端口;
3)/var/jenkins_home:默认情况下,Jenkins将其所有数据存储在文件系统的此目录中;
3)启动容器
docker-compose up -d
4)查看日志
docker logs -f jenkins # 查看jenkins启动的初始密码

密码如果忘记,也可以从jenkins容器的 /var/jenkins_home/secrets/initialAdminPassword 文件中查看。
2.3 登录Jenkins
1)在浏览器中访问Jenkins
http://IP:8080

首次登录使用Jenkins提供的初始密码,如果忘记,在界面有提示密码的位置。
2)选择“选择插件来安装”

3)安装插件,直接点击“安装”即可

在插件安装过程中,可能很多插件会按照失败,即使全部失败也没有关系。后续可在后台管理中根据需要安装插件。
如果插件安装失败,如果一直安装失败,可以重新设置下载地址。修改的文件在容器的/var/jenkins_home/hudson.model.UpdateCenter.xml。由于在docker-compose.yml对该目录做了数据卷映射,所以该文件也在宿主机的 /var/local/docker/jenkins_docker/data目录中。修改的信息如下:
<?xml version='1.1' encoding='UTF-8'?>
<sites><site><id>default</id><url>http://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json</url></site>
</sites>
4)创建新用户

插件安装完之后(没安装成功也没有关系,点击下一步进行用户创建),进入用户创建。
5)实例配置

自动识别jenkins的url,点击“保存并完成”即可。
6)进入Jenkins

Jenkins 插件安装
3.1 后台插件管理
1)进入插件管理界面

通过Manage Jenkins菜单,选择Plugins,进入插件管理界面。
2)选择插件,并安装

a)Available plugins:可用未安装的插件列表,可进行搜索,选择要安装的创建。可以搜索Chinese,查找中文插件;
b)Installed plugins:已安装的插件列表;
c)选择要安装的插件后点击“安装”即可;
d)Advanced settings:高级设置;
3.2 高级插件安装
1)从官网后台下载需要安装的插件

输入要下载的插件,进行搜索。
2)下载插件


查找一个合适的版本,下载对应的hpi文件。
3)管理后台安装插件

在插件管理后台,选择“Advanced settings”,选中下载的hpi(如果不下载,直接在url中输入url地址也可以),点击“部署”,进入插件安装流程。

Jenkins Maven 构建环境配置
对于使用Maven构建的Java项目,需要Maven及JDK。
4.1 资料准备
1)下载JDK(以下以1.8为例)、Maven,并上传到服务器;
2)Maven 配置,修改Maven的settings.xml文件,添加阿里仓库地址、配置JDK;
2.1)添加阿里仓库。在<mirrors>标签中添加如下:
<mirror><id>nexus-aliyun</id><mirrorOf>central</mirrorOf><name>Nexus aliyun</name><url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
2.2)配置JDK,以下以1.8为例。在<profiles>标签中添加如下:
<profile><id>jdk8</id><activation><activeByDefault>true</activeByDefault><jdk>1.8</jdk></activation><properties><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target><maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion></properties></profile>
4.2 将Maven和JDK解压到Jenkins容器
在安装Jenkins容器时,将data目录映射到容器的/var/jenkins_home目录,所以只需将Maven和JDK放在data目录即可。本例为/usr/local/docker/jenkins_docker/data目录。
4.3 在Jenkins 后台配置Maven和JDK
1)进入“全局工具配置”

2)Maven和JDK配置
在全局工具配置中,默认可安装或配置JDK、Git、Gradle、Ant、Maven。
在全局工具配置中,除了上面的安装项以外,还可以通过安装插件,扩展更多的功能。如SonarQube Scanner插件,进行代码质量检查。
2.1)JDK安装

a)JDK可自动安装,如果已经下载并上传到Jenkins容器,则取消“自动安装”的选择性,输入jdk的目录;
b)如果输入的目录错误,会自动提示;
2.2)Maven安装

Maven的安装和JDK的安装一样。
结尾
以上为本篇分析的全部内容。
关于本篇内容你有什么自己的想法或独到见解,欢迎在评论区一起交流探讨下吧。
相关文章:
Jenkins安装、插件下载及构建环境配置详解
Jenkins简介 1.1 简介 Jenkins 是一个基于Java开发的开源持续集成工具,它提供了一个开放且易用的软件平台,主要用于自动化构建、测试和部署软件项目,以实现持续集成(CI)和持续交付/部署(CD)。…...
ESP32,uart安装驱动uart_driver_install函数剖析,以及intr_alloc_flags 参数的意义
在 uart_driver_install 函数中,参数 RX_BUF_SIZE * 2 指定了接收缓冲区(RX buffer)的大小。这个参数对于 UART 驱动程序来说非常重要,因为它决定了可以存储多少接收到的数据,直到应用程序读取它们为止。下面是对该函数…...
Ubuntu把应用程序放到桌面
有时候我们下载的软件是一个文件夹,通常需要进入进入指定文件夹下去执行.sh 文件来启动,下面来个实例如何把idea放到桌面 打开文件目录/usr/share/applications/或者~/.local/share/applications/目录。第一个目录是全局的,所有用户都可以使…...
什么是端口映射
端口映射 端口映射(Port Mapping)是一种网络技术,用于将外部网络请求转发到内部网络的特定设备或服务。它通常用于以下场景: 外部访问内部服务:允许外部用户通过公网IP访问内网中的设备或服务。多设备共享IP…...
数据结构《MapSet哈希表》
文章目录 一、搜索树1.1 定义1.2 模拟实现搜索 二、Map2.1 定义2.2 Map.Entry2.3 TreeMap的使用2.4 Map的常用方法 三、Set3.1 定义3.2 TreeSet的使用3.3 Set的常用方法 四、哈希表4.1 哈希表的概念4.2 冲突4.2.1 冲突的概念4.2.2 冲突的避免1. 选择合适的哈希函数2. 负载因子调…...
【QT】QComboBox:activated信号和currentIndexChanged信号的区别
目录 1、activated1.1 原型1.2 触发机制1.3 使用场景1.4 连接信号和槽的方法1.4.1 方式一1.4.2 方式二 2、currentIndexChanged2.1 原型2.2 触发机制2.3 使用场景2.4 连接信号和槽的方法 1、activated 1.1 原型 [signal] void QComboBox::activated(int index) [signal] void…...
【Block总结】ELGCA模块,池化-转置(PT)注意力和深度卷积有效聚合局部和全局上下文信息
ELGCA结构 论文题目:ELGC-Net: Efficient Local-Global Context Aggregation for Remote Sensing Change Detection 论文链接:https://arxiv.org/pdf/2403.17909 官方github:https://github.com/techmn/elgcnet 高效局部-全局上下文聚合器&…...
MERN全栈脚手架(MongoDB、Express、React、Node)与Yeoman详解
MERN 全栈脚手架是一种用于快速构建基于 MongoDB、Express、React 和 Node.js 的全栈应用的框架或模板。它帮助开发者快速启动项目,减少了从零开始配置的时间。以下是关于 MERN 全栈脚手架的详细解析。 一、MERN 技术栈简介 MongoDB: 文档型数据库,用于…...
基于springboot+vue+微信小程序的宠物领养系统
基于springbootvue微信小程序的宠物领养系统 一、介绍 本项目利用SpringBoot、Vue和微信小程序技术,构建了一个宠物领养系统。 本系统的设计分为两个层面,分别为管理层面与用户层面,也就是管理者与用户,管理权限与用户权限是不…...
如何使用策略模式并让spring管理
1、策略模式公共接口类 BankFileStrategy public interface BankFileStrategy {String getBankFile(String bankType) throws Exception; } 2、策略模式业务实现类 Slf4j Component public class ConcreteStrategy implements BankFileStrategy {Overridepublic String ge…...
react中hooks之useRef 用法总结
1. 基本概念 useRef 是 React 的一个 Hook,返回一个可变的 ref 对象,其 .current 属性被初始化为传入的参数。这个对象在组件的整个生命周期内保持不变。 2. 主要用途和特性 2.1 获取 DOM 元素实例 function TextInputWithFocusButton() {const inpu…...
使用 Docker 部署 Java 项目(通俗易懂)
目录 1、下载与配置 Docker 1.1 docker下载(这里使用的是Ubuntu,Centos命令可能有不同) 1.2 配置 Docker 代理对象 2、打包当前 Java 项目 3、进行编写 DockerFile,并将对应文件传输到 Linux 中 3.1 编写 dockerfile 文件 …...
如何在Ubuntu上安装和配置Git
版本控制系统(VCS)是软件开发过程中不可或缺的工具之一,它帮助开发者跟踪代码变更、协作开发以及管理不同版本的项目。Git作为当前最流行的分布式版本控制系统,因其高效性和灵活性而广受青睐。本文将指导你如何在Ubuntu操作系统上…...
FPGA 21 ,深入理解 Verilog 中的基数,以及二进制数与十进制数之间的关系( Verilog中的基数 )
目录 前言 一. 基数基础 1.1 基数介绍 2.1 基数符号 3.1 二进制数 二. 二进制与十进制数 三. 二进制数 3.1 定义寄存器类型变量 3.2 定义线网类型变量 3.3 赋值操作 3.4 解析二进制数为十进制数 四. 代码示例 五. 注意事项 六. 更多操作 前言 在Verilog中&#…...
【redis】redis-cli命令行工具的使用
redis-cli命令行工具是一个功能强大的Redis客户端,它允许用户与Redis数据库进行交互和管理。 以下是一些常用参数的使用说明: 基本连接参数 -h, --host <hostname>:指定要连接的Redis服务器的主机名或IP地址。如果未指定,…...
使用Matplotlib显示中文的方法
1 问题提出 使用图1所示的代码进行matplotlib绘图时,因为其默认不支持中文,此时无法显示正确内容,如图2所示。 图1 matplotlib绘图绘图代码 图2 matplotlib无法显示中文 2 问题解决 2.1 设置全局字体 在图1所示的代码中,第13…...
SQL Server2022详细安装教程
1. 打开SQL Server官网:SQL Server 下载 | Microsoft 2. 选择Developer版 3. 下载好安装包,打开,选择自定义 4. 选择下载位置,最好不要在C盘即主磁盘即可。等待下载 5. 下载成功之后会弹出这个框 6. 点击“安装”&#…...
家里温度随心控,假期出行更舒适~
春节假期马上到来啦!这是放松身心、陪伴家人的最佳时机~ 但旅途结束的温差变化、空气质量问题是否让你有些担忧呢? 别担心!有了约克VRF中央空调,让你的假期更加舒心无忧~ 清新空气,自在出游…...
压力测试详解
压力测试 压力测试是一种软件测试,用于验证软件应用程序的稳定性和可靠性。压力测试的目标是在极其沉重的负载条件下测量软件的健壮性和错误处理能力,并确保软件在危急情况下不会崩溃。它甚至可以测试超出正常工作点的测试,并评估软件在极端…...
从epoll事件的视角探讨TCP:三次握手、四次挥手、应用层与传输层之间的联系
目录 一、应用层与TCP之间的联系 二、 当通信双方中的一方如客户端主动断开连接时,仅是在客户端的视角下连接已经断开,在服务端的眼中,连接依然存在,为什么?——触发EPOLLRDHUP事件:对端关闭连接或停止写…...
深入剖析AI大模型:大模型时代的 Prompt 工程全解析
今天聊的内容,我认为是AI开发里面非常重要的内容。它在AI开发里无处不在,当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗",或者让翻译模型 "将这段合同翻译成商务日语" 时,输入的这句话就是 Prompt。…...
突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合
强化学习(Reinforcement Learning, RL)是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程,然后使用强化学习的Actor-Critic机制(中文译作“知行互动”机制),逐步迭代求解…...
Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例
使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件,常用于在两个集合之间进行数据转移,如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model:绑定右侧列表的值&…...
Qt Widget类解析与代码注释
#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码,写上注释 当然可以!这段代码是 Qt …...
聊聊 Pulsar:Producer 源码解析
一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台,以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中,Producer(生产者) 是连接客户端应用与消息队列的第一步。生产者…...
Opencv中的addweighted函数
一.addweighted函数作用 addweighted()是OpenCV库中用于图像处理的函数,主要功能是将两个输入图像(尺寸和类型相同)按照指定的权重进行加权叠加(图像融合),并添加一个标量值&#x…...
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...
质量体系的重要
质量体系是为确保产品、服务或过程质量满足规定要求,由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面: 🏛️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限,形成层级清晰的管理网络…...
学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2
每日一言 今天的每一份坚持,都是在为未来积攒底气。 案例:OLED显示一个A 这边观察到一个点,怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 : 如果代码里信号切换太快(比如 SDA 刚变,SCL 立刻变&#…...
3-11单元格区域边界定位(End属性)学习笔记
返回一个Range 对象,只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意:它移动的位置必须是相连的有内容的单元格…...
