从零开始:使用Jenkins实现高效自动化部署
在这篇文章中我们将深入探讨如何通过Jenkins构建高效的自动化部署流水线,帮助团队实现从代码提交到生产环境部署的全流程自动化。无论你是Jenkins新手还是有一定经验的开发者,这篇文章都会为你提供实用的技巧和最佳实践,助你在项目部署中走得更远、更快。
目录
初识持续集成
Jenkins安装教程
Jenkins安装
更改工作目录
插件安装
中文设置
Jenkins基本使用
新建Job任务
初识持续集成
持续集成:指的是频繁地(一天多次)将代码集成到主干,它的好处注意有一下两个
1)快速发现错误:没完成一点更新就集成到主干,可以快速发现错误定位错误也比较容易
2)防止分支大幅偏离主干:如果不是经常集成主干又在不断更新,会导致以后集成的难度变大,甚至难以集成
持续集成强调开发人员提交了新代码之后,立即进行构建、单元测试,根据测试结果我们可以确定新代码和原有代码能否正确地集成在一起,如下图所示:

持续交付:指的是频繁地将软件的新版本交付给质量团队或者用户以供评审,如果评审通过代码就进入生产阶段,持续交付可以看作持续集成的下一步。它强调的是不管怎么更新软件是随时随地可以交付的。持续交付在持续集成的基础上,将集成后的代码部署到更贴近真实运行环境的「类生产环境」(production-likeenvironments)中,比如我们完成单元测试后可以把代码部署到连接数据库的Staging环境中更多的测试,如果代码没有问题可以继续手动部署到生产环境中。

持续部署:持续交付的下一步指的是代码通过评审以后自动部署到生产环境,持续部署的目标是代码在任何时刻都是可部署的,可以进入生产阶段。持续部署的前提是能自动化完成测试、构建、部署等步骤。

持续集成操作流程:根据持续集成的设计,代码从提交到生产整个过程有以下几步:
1)提交:流程的第一步是开发者向代码仓库提交代码,所有后面的步骤都始于本地代码的一次提交(commit)
2)测试(第一轮):代码仓库对commit操作配置了钩子(hook)只要提交代码或者合并进主干就会跑自动化测试,测试的种类主要有以下几种,第一轮至少要跑单元测试:
单元测试:针对函数或模块的测试
集成测试:针对整体产品的某个功能的测试,又称功能测试
端对端测试:从用户界面直达数据库的全链路测试
3)构建:通过第一轮测试代码就可以合并进主干就算可以交付了,交付后就先进行构建(build)再进入第二轮测试,所谓构建指的是将源码转换为可以运行的实际代码,比如安装依赖,配置各种资源(样式表、JS脚本、图片)等等,常见构建工具如下所示:
Jenkins;Travis;Codeship;Strider,其中Jenkins和Strider是开源软件,Travis和Codeship对于开源项目可以免费使用。它们都会将构建和测试,在一次运行中执行完成
4)测试(第二轮):构建完成就要进行第二轮测试,如果第一轮已经涵盖了所有测试内容第二轮可以省略,当然这时构建步骤也要移到第一轮测试前面,第二轮是全面测试,单元测试和集成测试都会跑,有条件的话也要做端对端测试。所有测试以自动化为主,少数无法自动化的测试用例就要人工跑。需要强调的是新版本的每一个更新点都必须测试到,如果测试的覆盖率不高,进入后面的部署阶段后很可能会出现严重的问题。
5)部署:通过了第二轮测试当前代码就是一个可以直接部署的版本(artifact),将这个版本的所有文件打包(tarfilename.tar*)存档,发到生产服务器,生产服务器将打包文件解包成本地的一个目录,再将运行路径的符号链接(symlink)指向这个目录然后重新启动应用,这方面的部署工具有Ansible,Chef,Puppet等
6)回滚:一旦当前版本发生问题就要回滚到上一个版本的构建结果,最简单的做法就是修改一下符号链接指向上一个版本的目录
Jenkins安装教程
Jenkins:原名Hudson,2011年改为现在的名字,它是一个开源的实现持续集成的软件工具且能实施监控集成中存在的错误,提供详细的日志文件和提醒功能,还能用图表的形式形象地展示项目构建的趋势和稳定性,其官方网址:官网 以及其插件地址:插件 ,如下图所示:

其主要特点如下所示:
1)开源和免费的:Jenkins是完全开源的,任何人都可以自由下载、使用和修改源代码。这使得它在开发者社区中非常受欢迎。
2)支持多种插件:Jenkins拥有庞大的插件生态系统,支持与各种工具和平台的集成,比如 Git、Docker、Kubernetes、Maven、Gradle 等,极大地扩展了其功能。
3)自动化构建与部署:Jenkins可以自动化整个构建、测试和部署过程,确保每次代码提交都能经过完整的质量检查,并自动部署到指定环境中,从而减少了人工干预和错误。
4)可扩展性强:通过插件机制和分布式构建架构,Jenkins可以轻松地扩展到多个节点适应不同规模的团队和项目。
5)易于配置和使用:Jenkins提供了友好的图形用户界面(GUI)和Web界面,用户可以通过简单的配置界面创建和管理流水线,无需复杂的命令行操作。
6)支持多种编程语言和平台:Jenkins不依赖于特定的编程语言或平台,支持Java、Python、Ruby、Node.js等多种开发语言,几乎可以与任何开发环境兼容。
7)强大的社区支持:由于其广泛的使用,Jenkins拥有一个活跃的开发者社区,提供了大量的文档、教程和技术支持,帮助用户解决问题。
8)持续集成与持续交付(CI/CD):Jenkins在持续集成和持续交付方面非常出色,能够自动化从代码集成到最终交付的整个流程,有助于提高开发效率和软件质量。
Jenkins安装
接下来我们开始正式的安装Jenkins,来到官网点击下载然后安装文档版本即可,根据自身情况选择不同的安装平台,这里我就以windows平台举例,如下选择该平台进行下载安装即可:

下载完文件之后,我们双击文件进行下载,这里推荐非系统盘(C盘)文件路径进行下载即可:

接下来进入账户选择界面,没有账户的直接选择第一个即可,然后点击下一步:

然后下一步来到端口的选择,默认是8080,可以点击下面的测试端口按钮校验是否端口被占用:

下一步来到了jdk版本的选择,请先确保你电脑上是有jdk版本的,如果没有得提前安装配置一下:

选择完jdk版本之后,这里直接默认下一步然后点击Install进行安装即可:

然后完成之后我们来到浏览器,输入localhost:8080就会进行到一个默认的界面如下,界面中告诉了我们初始密码已经被保存到本地的某个文件当中,我们找到该密码然后粘贴到输入框中即可:

输入完密码之后来到了插件选择的界面, 因为在安装插件的过程中可能由于插件过大导致页面卡住,所以这里我们选择第二个自定义插件的安装:


然后接下来开始创建第一个管理员账户,因为是本地操作,账户密码简单来就行:admin和123456

接下来开始进入到实例配置中,因为是本地安装所以域名就是默认的localhost,后期如果要安装到服务器的话,在服务器中域名直接设置服务器的ip地址即可:

点击保存继续之后,接下面就会进入到我们的Jenkins操作控制台了,如下所示:

更改工作目录
上面的安装过程中,默认我们的Jenkins工作目录安装到C盘了,这里我们需要重新更改其工作目录,如下找到我们原本设置安装Jenkins的目录当中,找到下面的文件,然后将原本的C盘的工作目录更改为我们自定义的D盘目录:

然后来到我们之前找输入密码的C盘文件的那个目录当中,将这个目录下的所有文件全部copy到我们设置的工作目录当中:

然后我们打开任务管理器,搜索Jenkins服务,对该服务进行重新启动:

然后重新在浏览器中打开我们的Jenkins平台,输入账户密码之后来到管理系统界面,可以看到外面的工作目录已经生效了:

插件安装
之前我们是没有安装插件然后进行安装Jenkins的,这是因为如果我们直接安装插件是特别的卡的,需要我们配置一下安装的国内镜像源才可以流畅的下载插件,镜像源如下所示:
https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
配置镜像源:然后我们在Jenkins平台中安装如下目录找到配置镜像源的地方,进行保存即可:

修改服务器配置:接下来还需要修改一下对应的服务器配置,进行jenkins工作目录下的/updates/default.json,将其中的文件内容进行一些替换,如下所示:
updates.jenkins-ci.org/download替换为mirrors.tuna.tsinghua.edu.cn/jenkins
有些jenkins版本当中,是将
updates.jenkins.io/download替换为mirrors.tuna.tsinghua.edu.cn/jenkins

然后把www.google.com换成www.baidu.com,如下所示:

重新启动服务:接下来我们就需要重新启动Jenkins服务,重新登录Jenkins之后,进入插件管理中心就可以爽快的安装各种插件了:

点击安装之后可以看到我们的安装速度是非常快的, 几秒钟之后相关的依赖就已经安装成功了:

中文设置
接下来我们可以安装一个语言的插件,然后对我们的平台进行中文设置,插件安装如下所示,安装完插件之后进行重启即可,重启方法在URL的后面加上restart,例如http://localhost:8080/restart,然后选择Configure System找到Locale选项输入zh_CN勾选下面的选项,点击Apply和save即可:

如果上述方法没有效果,直接安装下面的这个插件,重启即可:

可以看到我们的平台已经部分实现中文化了,还是可以的:

Jenkins基本使用
Jenkins中有3大重要概念:
1)Job(任务/工程):在Jenkins平台中都是以Job(任务/工程)为单位去完成一件事情的。
2)plugin(插件):Jenkins提供平台集成各种插件来完成一个Job,想用jenkins平来做什么先找找有没有相应的插件,比如windows命令、Linux命令的支持、SVN和Git代码获取、邮件发送,测试报告集成等都需要安装相应的插件才能够在jenkins当中使用这些功能
3)workspace(工作空间):Jenkins是通过文件形式来存储和管理数据的,在安装Jenkins要指定一个Jenkins_Home目录,所有Jenkins相关的数据都存放在此目录下,workspace即给jenkins指定一个专门的目录来存储其所有的配置和数据。Jenkins的workspace是根目录,其下每个Job都有属于自己的workspace,每个job的workspace当中用来存放本任务涉及到的数据/文件,以及任务执行完成后生成的数据/文件,相当于给每一个job开辟了一个独立的文件夹
新建Job任务
接下来我们新建一个Job任务来实现一个前端编译打包的功能:

下面选择任务的类型,第一个就是自定义项目配置,其他配置是按照安装的插件进行设置的,这里我没有安装插件就只有一个自定义配置,那我们选择它好了:

然后我们点击确定之后,创建的任务主要分为以下六个步骤进行:
1)General(常规):在这个部分设置任务的一些基本信息,为任务添加描述通常用于说明这个任务的功能和用途,以及设置一些包的保存情况:

2)源码管理(Source Code Management):配置该Job需要从哪里获取源代码,可以选择不同的源码管理工具,通常Git是最常用的,配置Git仓库的URL和认证信息可以指定分支、标签或提交,还可以设置是否在构建之前执行拉取代码操作或是通过定时更新源代码:

3)Triggers(构建触发器):设置任务触发的条件可以选择多种触发方式,例如每周、每天或每小时运行一次,通常使用Cron表达式,当Git仓库中的代码发生变动(如推送代码时)自动触发构建,通过其他系统的API或脚本触发该任务

这里我们可以选择按照日期定时发送任务,例如:
定时任务:
分钟:0-59
小时:0-23
一月的天数:1-31
月份:1-12
一周的天数:0-7(0和7表示周天)例如:
1)每天晚上20点整自动执行
0 20 ***2)一周1,3,5晚上20点整执行
0 20 ** 1,3,53)每周周1 —— 周5晚上20点整执行
0 20 ** 1-54)一周内每2天,晚上20点整执行
0 20 *** /2

4)Environment(环境变量):在这里可以为构建设置环境变量供后续的构建步骤使用,可以为构建过程设置一些环境变量(例如路径、版本信息等),配置代理、身份验证、代理服务器等环境信息,确保构建能够顺利执行:

5)Build Steps(构建步骤):定义任务在执行过程中要进行的具体操作,可以选择多种构建工具和构建方式,根据需要选择其他的构建工具,执行构建、打包、发布等操作:

6)构建后操作(Post-build Actions):构建完成后执行的一系列操作,通常是部署、通知等,比如触发其他 Jenkins 任务,或者执行外部脚本:

相关文章:
从零开始:使用Jenkins实现高效自动化部署
在这篇文章中我们将深入探讨如何通过Jenkins构建高效的自动化部署流水线,帮助团队实现从代码提交到生产环境部署的全流程自动化。无论你是Jenkins新手还是有一定经验的开发者,这篇文章都会为你提供实用的技巧和最佳实践,助你在项目部署中走得…...
Lua限流器的3种写法
学而不思则罔,思而不学则殆 引言 上篇文章讲解了Lua脚本,事务和Pipline之间的使用方式和性能差距,本篇文章将聚焦Lua脚本,我将用三种写法来展现如何实现一个Redis限流器 固定窗口限流 固定窗口限流也是最简单的限流算法&#x…...
hive的几种复杂数据类型
Hive的几种复杂数据类型 Hive 提供了几种复杂数据类型,能够支持更灵活和多样的数据存储。这些复杂数据类型对于处理嵌套数据或不规则数据特别有用。主要包括以下几种: 文章目录 Hive的几种复杂数据类型1. 数组(ARRAY)2. 结构体&a…...
序列化/反序列化与TCP通信协议
深入理解序列化/反序列化与TCP通信协议 一、序列化与反序列化 1.1 基本概念 序列化(Serialization): 将数据结构或对象状态转换为可存储/传输格式的过程反序列化(Deserialization): 将序列化后的数据恢复为原始数据结构的过程 …...
Ollama 本地部署 体验 deepseek
下载安装ollama,选择模型 进行部署 # 管理员命令行 执行 ollama run deepseek-r1:70b浏览器访问http://ip:11434/ 返回 Ollama is runninghttp://ip:11434/v1/models 返回当前部署的模型数据 下载安装CherryStudio,本地对话UI 客户端 在设置中 修改API地址&#x…...
Linux探秘坊-------4.进度条小程序
1.缓冲区 #include <stdio.h> int main() {printf("hello bite!");sleep(2);return 0; }执行此代码后,会 先停顿两秒,再打印出hello bite,但是明明打印在sleep前面,为什么会后打印呢? 因为ÿ…...
postgreSQL16.6源码安装
1.获取源码 从PostgreSQL: File Browser获取tar.bz2或者tar.gz源码 2.解压 tar xf postgresql-version.tar.bz2 roothwz-VMware-Virtual-Platform:/usr/local# tar xf postgresql-16.6.tar.bz2 roothwz-VMware-Virtual-Platform:/usr/local# ll 总计 24324 drwxr-xr-x 12 ro…...
树莓派上 基于Opencv 实现人脸检测与人脸识别
一,需求 基于树莓派4b,usb1080p摄像头,实现人脸检测与人脸识别。尝试了海陵科的模组和百度的sdk。海陵科的模组无法录入人脸,浪费了100多块钱。百度的sdk 在树莓派上也无法录入人脸,官方解决不了。最后只能用opencv自…...
vscode怎么更新github代码
vscode怎么更新github代码 打开终端: 在 VS Code 中,使用快捷键 Ctrl (Mac 上是 Cmd) 打开终端。 导航到项目目录: 确保你当前所在的终端目录是你的项目目录。如果不是,可以使用 cd 命令导航到项目目录,例如…...
Golang Web单体项目目录结构最佳实践
在Golang 开发Web 项目的过程中,如何组织目录结构是一项至关重要的任务。合理的目录结构不仅能提高代码的可维护性,还能为团队协作提供清晰的代码规范。 为什么要设计合理的目录结构? 在 Golang 项目中,代码的组织方式会影响开发…...
Zookeeper 作注册中心 和nacos 和eruka 有什么差异 ?基于什么理论选择?
目录 三者的差异 1. 设计定位与功能特性 2. 服务注册与发现机制 3. 可用性与容错性 4. 性能 选择依据 1. 业务场景 2. 可用性和一致性需求 3. 性能需求 三者的差异 1. 设计定位与功能特性 Zookeeper 设计定位:最初是为分布式应用提供协调服务的,本身并不是专门作为…...
mac下dify+deepseek部署,实现私人知识库
目前deepseek 十分火爆,本地部署实现私有知识库,帮助自己日常工作,上一篇使用工具cherry studio可以做到私人知识库。今天学习了一下,使用Dify链接deepseek,实现私人知识库,也非常不错,这里分享…...
CSS 实现下拉菜单效果实例解析
1. 引言 在 Web 开发过程中,下拉菜单是一种常见且十分实用的交互组件。很多前端教程都提供过简单的下拉菜单示例,本文将以一个简洁的实例为出发点,从 HTML 结构、CSS 样式以及整体交互逻辑三个层面进行详细解析,帮助大家理解纯 C…...
C# 比较两个List集合内容是否相同
在 C# 中,要比较两个 List<T> 集合的内容是否相同,可以通过以下几种方法: 一、非自定义类的元素比较 1. 使用 SequenceEqual 方法(顺序和内容都相等) 顺序和内容都相等:使用 SequenceEqual。 usin…...
x64、aarch64、arm与RISC-V64:详解四种处理器架构
x64、aarch64、arm与RISC-V64:详解四种处理器架构 x64架构aarch64架构ARM架构RISC-V64架构总结与展望在计算机科学领域,处理器架构是构建计算机系统的基石,它决定了计算机如何执行指令、管理内存和处理数据。x64、aarch64、arm与RISC-V64是当前主流的四种处理器架构,它们在…...
vscode卡住---回退版本解决
一、回退 今日本人打开vscode,发现慢到起飞,最终卡到起飞 删除缓存: C:\Users\python\AppData\Roaming\Code 重启发现回到刚安装时的界面,但是插件还在。启动速度快了,但是一打开terminal就卡。 关闭vscode,重装&…...
Java使用aspose实现pdf转word
Java使用aspose实现pdf转word 一、下载aspose-pdf-21.6.jar包【下载地址】,存放目录结构如图;配置pom.xml。 <!--pdf to word--> <dependency><groupId>com.aspose</groupId><artifactId>aspose-pdf</artifactId>…...
国产编辑器EverEdit - 迷你查找
1 迷你查找 1.1 应用场景 某些场景下,用户不希望调出复杂的查找对话框,此时可以使用迷你查找窗口。 1.2 使用方法 选择主菜单查找 -> 迷你查找,或使用快捷键Ctrl Alt F,会在右上角弹出迷你查找窗口,如下图所示…...
嵌入式音视频开发(一)ffmpeg框架及内核解析
系列文章目录 嵌入式音视频开发(零)移植ffmpeg及推流测试 嵌入式音视频开发(一)ffmpeg框架及内核解析 文章目录 系列文章目录前言一、ffmpeg的内核1.1 框架解析1.2 内核解析1.3 FFmpeg内部数据流1.3.1 典型的解码流程1.3.2 典型的…...
javaEE-11.javaScript入门
目录 一.什么是javaScript 二.快速实现 三.JS引入方式 1.行内引入: 2.内部引入: 3.外部引入: 四.基础语法 1.变量 变量命名规则: 2.数据类型 3.运算符 五.JS对象 1.数组 创建数组: 2.操作数组 3.函数 函数注意事项: 函数参数: 4.对象 1.使用字面量 创建对象:…...
畅游Diffusion数字人(16):由音乐驱动跳舞视频生成
畅游Diffusion数字人(0):专栏文章导航 前言:从Pose到跳舞视频生成的工作非常多,但是还没有直接从音乐驱动生成的工作。最近字节跳动提出了MuseDance,无需复杂的动作引导输入(如姿势或深度序列),从而使不同专业水平的用户都能轻松进行灵活且富有创意的视频生成。 目录 贡…...
OnlyOffice docker 运行(详细)
下载镜像 推荐使用 GitHub Action 方式下载: Action 地址:https://github.com/Shixuebin/DockerTarBuilder 教程地址:https://www.bilibili.com/video/BV1EZ421M7mL/ docker 镜像安装 docker load -i xxx.tar镜像运行 docker run -i -t -…...
DeepSeek 助力 Vue 开发:打造丝滑的步骤条
前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 目录 Deep…...
领略算法真谛:差分
嘿,各位技术潮人!好久不见甚是想念。生活就像一场奇妙冒险,而编程就是那把超酷的万能钥匙。此刻,阳光洒在键盘上,灵感在指尖跳跃,让我们抛开一切束缚,给平淡日子加点料,注入满满的pa…...
【Python深入浅出】Python3中os模块:开启系统交互的万能钥匙
目录 一、引言:os 模块初印象二、os 模块基础操作2.1 文件与目录操作2.1.1 创建操作2.1.2 读取操作2.1.3 删除操作2.1.4 信息获取 2.2 系统信息获取与环境变量管理2.2.1 系统信息获取2.2.2 环境变量管理 2.3 进程管理与工作目录操作2.3.1 进程管理2.3.2 工作目录操作…...
【图片转换PDF】多个文件夹里图片逐个批量转换成多个pdf软件,子文件夹单独合并转换,子文件夹单独批量转换,基于Py的解决方案
建筑设计公司在项目执行过程中,会产生大量的设计图纸、效果图、实景照片等图片资料。这些资料按照项目名称、阶段、专业等维度存放在多个文件夹和子文件夹中。 操作需求:为了方便内部管理和向客户交付完整的设计方案,公司需要将每个项目文件…...
在Linux上如何让ollama在GPU上运行模型
之前一直在 Mac 上使用 ollama 所以没注意,最近在 Ubuntu 上运行发现一直在 CPU 上跑。我一开始以为是超显存了,因为 Mac 上如果超内存的话,那么就只用 CPU,但是我发现 Llama3.2 3B 只占用 3GB,这远没有超。看了一下命…...
程序诗篇里的灵动笔触:指针绘就数据的梦幻蓝图<8>
大家好啊,我是小象٩(๑ω๑)۶ 我的博客:Xiao Xiangζั͡ޓއއ 很高兴见到大家,希望能够和大家一起交流学习,共同进步。 今天我们复习前面学习的指针知识 目录 关于指针数组和数组指针的区别指针数组(Array of Poi…...
快速集成DeepSeek到项目
DeepSeek API-KEY 获取 登录DeekSeek 官网,进入API 开放平台 2. 创建API-KEY 复制API-KEY进行保存,后期API调用使用 项目中集成DeepSeek 这里只展示部分核心代码,具体请查看源码orange-ai-deepseek-biz-starter Slf4j AllArgsConstructo…...
DeepSeek做赛车游戏
赛车模型 2D生成图片 任意AI图片软件SD,MJ 图片生成3D模型 车身 车轮 场景 Rodin,Tripo和Meshy 询问deepSeek如何开发 拷贝代码 将汽车运行代码拖到汽车上 再让AI写个摄像头跟随代码 再去提问deepseek控制轮胎和一些处理细节...
