【敏捷开发】jenkins「CI持续集成 CD持续部署」- 部署vue和go项目 - 待定

news2025/7/13 12:09:20

文章目录

  • 前言
  • 一、安装jenkins
    • 1. 部署中的痛点
    • 2. 什么是jenkins
    • 3. jenkins的安装和配置
      • (1)下载
      • (2)安装
  • 二、上传到运行服务器
    • 1. jenkins构建服务器流程
    • 2. 安装jenkins常用插件
    • 3. 通过freestyle构建项目
    • 4. 将构建服务器上的代码上传到运行服务器
  • 三、通过pipeline实现持续集成


前言

Jenkins是一种开源自动化服务器,用于快速构建,测试和部署软件。它是一个基于Java的Web应用程序,可用于自动化构建,测试和部署软件的各个阶段。

Jenkins的核心功能是持续集成(CI),它使开发人员能够频繁地将代码更改集成到共享存储库中,并在每个更改中进行构建,测试和分析。Jenkins还支持持续交付(CD)和持续部署(CD),这意味着它可以将软件交付到生产环境中,而无需人工干预。

Jenkins具有丰富的插件生态系统,可以扩展其功能。它还支持多种版本控制系统(如Git,SVN等),并且可以与其他工具(如JIRA,SonarQube等)集成,从而提高整个软件交付流程的效率和可靠性。

使用Jenkins可以自动化大部分软件交付流程,减少人工干预的错误,并提高软件的质量和稳定性。

敏捷开发中的持续集成痛点
要理解敏捷开发,最好的切入点是知道:什么不是敏捷开发?

早些年,我参与过一个不小的项目,客户是一著名电视台。系统是用来支持当时大火的选秀节目,具体模块有场外观众短信支持,候选人得票情况的可视化显示,现场嘉宾的打分等子模块。总之,是一个功能蛮多,交互蛮复杂的系统。

因为在当年,选秀是一个新形态,所以作为开发人员,当然也不知道客户(电视台)想要的是什么东西。

但最糟糕的是,连电视台自己也不知道想要的东西具体长啥样?而且因为是搞艺术的,想象力自然丰富,

因此提的需求大概就是:
“要酷,要震撼,要能调动观众的积极性…”等等。总之就是需求很模糊,说不清楚。
但当时还不流行所谓的“敏捷开发”,常规的开发流程如下:

  1. 需求分析
  2. 设计
  3. 编码
  4. 测试
  5. 交付

这也就是我们常说的“瀑布模型”。
可以现象,在该流程下,居于核心的就是需求分析。一旦需求分析出现大的偏差,之后的设计、编码、测试,即使做的再好,也是徒劳。因为你最后交付的根本不是用户想要的。
但是软件是这种东西,因为看不见摸不着。因而在具体的东西出来之前,大概率,用户根本就不知道自己想要的是什么。就好像电视台的工作人员,只知道 “酷、炸、炫”是他的需求,但如果再往具体处问,就不知道该说啥了。
但没办法,公司要挣钱,项目就一定要推下去,因此需求调研人员只能硬着头皮上。
虽然和电视台人员没少聊,但总体来说,也是言辞不详。最后的结果是,参考电视台的说辞,加上自己的猜测,再参考国外同类节目,晕晕沉沉弄了一个《需求分析》出来。
然后把《需求分析》传给了电视台,也不知道对方到底认真看了没有,反正最后的回复是:“没错,就是它,尽快出东西!”。
于是接下来,大家加班加点2个月,第一版终于出来了。欢天喜地给电视台看,本来大家的期望是掌声和赞美。但没想到,对方看了之后非常失望,说根本就不是他想要的东西。我们和对方争辩说,《需求分析》你也认可了,怎么可能不是你想要的东西呢?
结果对方也很委屈,答道:“《需求分析》我是看了,但这肯定不是想要的东西,你看这点…,这点…。”
原来,就这个《需求分析》来说,没想到同样的文字,不同人真会有不同的理解,甚至是完全相反的理解。
但这就是软件开发,因为看不见摸不着,高度定制,没有工业化标准。因此对用户来说,直到第一次看到实物(可运行的软件),才会逐渐在脑子中清晰他想要的是什么的东西。这就是软件开发的本质所在,没有任何人真的有错。但当时并不明白这个道理。
虽然很生气,奈何项目不小,对方又居于绝对强势。不爽归不爽,但回过头来,只有继续加班加点,吭哧吭哧的重新设计,重新编码。
因此,一个最初预期30个人月的项目,最终竟投入了100个人月还不止。
好在无论如何,最后,客户还是认可了我们的产品。但其中付出的辛苦,只有在身在其中,才会有真正明白。当然,人吃一个亏,总归会有些进步的。
因此,为避免再出现《需求分析》争议的情况,在之后项目中,在需求分析阶段,如果有可能,我们就会尽量的在《需求分析》中增加图示。如果项目不大,甚至会先做出一个原型出来。
当然,这些做法效果肯定是有的。但也并没有从根本上解决问题。之后的项目还是会有返工的情况出现,区别只是严重程度的大小而已。
而我后来明白,这种情况(返工),只要是在“瀑布模型”下,就无法根本避免,因为来自于以下事实:

  1. 只要有沟通,就会有信息的变形,因此《需求分析》是不可靠的。
  2. 即使《需求分析》是可靠的,随着项目的进展,竞争对手的出现,需求也可能过时。
  3. 瀑布模型,这种自上而下的开发方式,无法响应这个快速变化的时代。

而要解决这个问题,就必须引入更轻便的开发方式,这就是“敏捷开发”。
但是普通人可能没想到,敏捷开发并没有定义具体的开发过程,而是起源于一个简单的理念(确实够敏捷的),这就是《敏捷宣言》:
我们一直在实践中探寻更好的软件开发方法,身体力行的同时也帮助他人。由此我们建立了如下价值观:

个体和互动 高于 流程和工具;工作的软件 高于 详尽的文档;客户合作 高于 合同谈判;响应变化 高于遵循计划;也就是说,尽管右项有价值,我们更重视左项的价值。
而之后的各种方法论,其实都是为了践行这个原则。

敏捷冲刺

因为世界是易变的,因此敏捷开发就不提倡像“瀑布模型”那样,一开始就制定整个产品的详细开发计划。
而是提倡“小步快跑”的方式来实行整个产品功能。通过一个小计划接着一个小计划,通过反复迭代,最终
实现产品的自我“进化”,自我完善。
在敏捷开发中,我们把每个小开发计划,称为一个“冲刺”。而实践中,常见的冲刺时间是2周,最多不超
过1个月。
每个“冲刺”前,会有冲刺启动会,之后有总结会,一个冲刺的结束也是下一个冲刺的开始。同时,要在下
一次冲刺开始之前对上一次冲刺进行总结。然后根据总结情况,制定下一次冲刺的具体内容。
能够看出,这种短节奏、快调整的开发过程,相对于“瀑布模型”,最大的好处是灵活多变,反应敏捷。任
何时候,只要市场有变化,就马上调整下一步的开发计划。甚至是彻底放弃,及时止损。

精简文档
从事过开发的朋友都知道,文档是不可靠的。因为只要有文字,就会有曲解。更糟糕的是,面对快速的开
发节奏,文档往往不能及时跟进。而错误的文档还不如没有。
因此,在敏捷开发中,始终强调“可运行的软件胜过一切文档”,也提倡在客户、产品、开发之间,通过软
件本身来沟通。
因为是迭代式(冲刺)开发,因此每前进一步,都会有可运行的软件呈现。而软件是不会说谎的,因此就
从根本上避免了沟通误差的问题。

每日站会
因为敏捷开发强调沟通,因此团队就必须提供时间和场景供大家沟通,每日站会因此而生。
在站会上,任何人(产品经理,测试、工程师)都可以分享昨天他干了什么?有什么困难?有什么需要帮
助的?以及…
总之,就是通过及时的交流,把任何问题解决于无形之中。

敏捷教练
敏捷开发极度强调过程,强调沟通,强调团队合作。因此就需要有一个人站出来,作为敏捷过程的组织
者、督促者、协调者。这个人就是“敏捷教练”。
很重要的一点:敏捷教练不是官。而是接头人,是组织者。需要的不是权威,是责任心。

结对编程
敏捷开发极度强调沟通的价值,也相信在软件开发中,1+1 会大于2,尤其是在解决复杂问题的时候。因
此,在敏捷开发中,如果队员出现某些个人无法解决的难题,他可以申请结对编程。
具体的做法是一个编程,一个人在坐在旁边“指导”,然后过一段时间再交换。
这样,就会极大的避免面临复杂问题是,一个人思路彻底受阻,从陷入思维“死胡同”的情况出现。
.最后
当然,敏捷开发也绝不是解决一切问题的银弹,它也有自己的适用场景,具体来说,敏捷开发特别适合互
联网等市场竞争激烈,需要快速响应的场景。
但对另一些场景来说,强推敏捷流程则就会显得不切实际。
例如在航天航空领域,中途修改开发计划,要么是根本不可能,要么是要付出毁灭级的成本。因此,对这


一、安装jenkins

1. 部署中的痛点

为什么要用Jenkins?我说下我以前开发的痛点,在一些中小型企业,每次开发一个项目完成后,需要打
包部署,可能没有专门的运维人员,只能开发人员去把项目打成一个exe包,可能这个项目已经上线了,
需要把服务关,在部署到服务器上,将项目启动起来,这个时候可能某个用户正在操作某些功能上的东
西,如果你隔三差五的部署一下,这样的话对用户的体验也不好,自己也是烦的很,总是打包拖到服务器
上。希望小型企业工作人员学习一下,配置可能复杂,但是你配置好了之后,你只需要把代码提交到Git
或者Svn上,自动构建部署,非常方便。

2. 什么是jenkins

Jenkins是一个开源的、提供友好操作界面的持续集成(CI)工具,起源于Hudson(Hudson是商用的),主
要用于持续、自动的构建/测试软件项目、监控外部任务的运行(这个比较抽象,暂且写上,不做解
释)。Jenkins用Java语言编写,可在Tomcat等流行的servlet容器中运行,也可独立运行。通常与版本管
理工具(SCM)、构建工具结合使用。常用的版本控制工具有SVN、GIT,构建工具有Maven、Ant、
Gradle。

3. jenkins的安装和配置

这个jenkins我们不会直接安装在 192.168.0.104 我们会在一个新的虚拟机上运行 192.168.0.102,

(1)下载

Jenkins下载地址:http://jenkins-ci.org/ 或 https://mirrors.jenkins-ci.org/redhat/

(2)安装

# 安装java
[root@localhost ~] yum install java-11-openjdk-devel -y
# 查看java版本
[root@localhost ~] java --version
openjdk 11.0.16 2022-07-19 LTS
OpenJDK Runtime Environment (Red_Hat-11.0.16.0.8-1.el7_9) (build 11.0.16+8-LTS)
OpenJDK 64-Bit Server VM (Red_Hat-11.0.16.0.8-1.el7_9) (build 11.0.16+8-LTS, mixed mode, sharing)

安装完之后注册登录


二、上传到运行服务器

1. jenkins构建服务器流程

在这里插入图片描述

2. 安装jenkins常用插件

安装常用插件

  1. 汉化
    在这里插入图片描述

  2. ssh
    在这里插入图片描述

  3. git
    在这里插入图片描述

  4. ssh插件
    在这里插入图片描述

3. 通过freestyle构建项目

在Jenkins的主界面上,点击“新建任务”或者“新建项目”,然后输入一个项目名称,并选择Freestyle项目类型。点击“确定”按钮。

添加git和ssh的凭证
在凭证管理页面中,点击“全局”或“系统”选项卡,根据需要选择要添加凭证的范围。

接着,点击“添加凭证”按钮,选择要添加的凭证类型,例如SSH用户名和密码、Git令牌等。

填写凭证信息,例如凭证ID、用户名、密码等,然后点击“确定”按钮。

在这里插入图片描述

注意:ssh配置中Remote Directory是目标服务器后进入的目录,我设置为了/data
注意:在Jenkins中添加凭证时,请注意保护您的凭证信息,不要将其暴露在公共场合。同时,及时删除不再使用的凭证,以免造成潜在的安全隐患。

配置Freestyle项目

在Freestyle项目的配置界面中,有多个选项可以配置。以下是一些常用的配置选项:

在这里插入图片描述

  • 源代码管理:选择版本控制系统(例如Git、Subversion、Mercurial等),并填写仓库地址和认证信息。
  • 构建触发器:定义何时触发构建操作,例如定期触发、代码提交触发、另一个项目构建完成触发等。
  • 构建环境:定义构建环境,例如构建所需的JDK版本、构建参数、构建工具等。
  • 构建步骤:定义构建操作的步骤,例如构建命令、测试命令、静态分析命令等。
  • 构建后操作:定义构建完成后的操作,例如发送邮件、上传构建产物、部署应用程序等。

根据项目的需求,选择需要配置的选项,填写相应的信息即可。

保存配置

完成Freestyle项目的配置后,点击页面下方的“保存”按钮,保存配置。

执行构建

在项目的主页面上,点击“立即构建”按钮,即可执行构建操作。执行过程中,Jenkins会在控制台输出构建日志,方便查看构建的进展和结果。

在这里插入图片描述

通过以上步骤,您就可以使用Jenkins的Freestyle项目类型来构建您的应用程序。同时,Jenkins还支持其他类型的项目,例如Pipeline项目类型,它可以使用Groovy语言定义流水线式的构建过程,让您更加灵活地管理和执行构建操作。

4. 将构建服务器上的代码上传到运行服务器

根据上面的配置继续构建

在Jenkins的主界面上,点击“凭证”选项卡,然后点击“添加凭证”按钮,在“SSH Username with private key”选项中输入凭证信息,包括用户名、私钥、密码等,然后点击“确定”按钮。

在构建步骤中添加SSH连接命令

在Jenkins的项目配置页面中,进入“构建后操作”选项卡,选择“Send files or execute commands over SSH”选项。

然后填写SSH服务器的IP地址和SSH凭证信息,选择要执行的SSH命令,例如部署应用程序、重启服务等。

  • Name:SSH Server的Name属性就是你希望连接的服务器。
  • Source files:这里输入的是你希望传到服务器的文件夹和文件。路径是相对jenkins的orkspace的项目名称的。例如项
    目名称是Test_Project的go项目,编译打包后的路径为Test_Project文件夹下的target,则Surce files填入target/*.go。
  • Remove prefix:如果Source files为target/*.jar,但是不想把target目录创建到服务器端,这个时候就可以在Remove prefix里填入target
  • Remote directory:这里指定文件将被拷贝到服务器的路径。
    PS:被拷贝文件在服务器上的完整路径=登录服务器账号的默认路径+Remote directory。
  • Exec command:这里就是连接服务器之后需要执行的命令。
    在这里插入图片描述

在命令文本框中,可以使用Jenkins提供的环境变量或者构建参数等,以动态的方式组织SSH命令。

三、通过pipeline实现持续集成

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/396036.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Mybatis工程升级到FlunetMybatis后引发的问题以及解决方法

0. 背景交代为了提高开发速度,我打算将公司原有Mybatis框架升级为FlunetMybatis。可是遇到了一系列问题,下面开始爬坑工程结构示意如下:src/ ├── main │ ├── java.com.demo │ │ ├── Application.java //S…

常见数据模型

目录 1.1两类数据模型 1.2概念模型 1.3数据模型的组成要素 1.4常见数据模型 层次模型 网状模型 关系模型 数据模型是对现实世界数据特征的抽象,也就是说数据模型是用来描述数据、组织数据和对数据进行操作的。数据模型是数据库系统的核心和基础。 1.1两类数…

ip地址的分类及地址范围

IP地址根据网络ID的不同分为5种类型,A类地址、B类地址、C类地址、D类地址和E类地址。1、A类IP地址一个A类IP地址是指, 在IP地址的四段号码中,第一段号码为网络号码,剩下的三段号码为本地计算机的号码。A类IP地址中网络的标识长度为…

一种用于智能建筑云辅助检测的快速传感器放置位置优化方法

随着健康意识的觉醒,人们对居住的建筑提出了一系列与健康相关的要求,以期改善居住条件。在此背景下,BIM(Building Information Modeling)充分利用健康、环境、信息技术等诸多领域的前沿理论和技术,为工程师…

低代码开发的优势是什么?

低代码开发的优势是什么?低代码开发这个概念这两年来经常出现在人们的视野中,市场对于低代码的需求也越来越庞大。 Gartner预测,到2025年,75%的大型企业将使用至少四种低代码/无代码开发工具,用于IT应用开发和公民开发计划。 可…

Java面试题--Spring事务失效

Spring事务失效概述 Spring对事务的管理和处理,是基于AOP和编程范式的。因此Spring事务失效的场景较为丰富,包括但不限于以下常见情况: 异常被吞掉:当事务管理中出现异常但没有被正确捕捉并处理时,事务就会失效。例如…

Sedona 简介

Sedona 可以做什么? 分布式空间数据集 Spatial RDD on SparkSpatial DataFrame/SQL on SparkSpatial DataStream on FlinkSpatial Table/SQL on Flink 处理复杂的空间类型 Vector geometries / trajectoriesRaster images with Map AlgebraVarious input formats: CSV, TSV…

Vue 项目如何迁移小程序

最近我们看到有开发者在社群里提出新的疑惑「我手头已经有一个成熟的 HTML5 项目了,这种项目可以转为小程序在 FinClip 环境中运行吗?」。 经过工作人员的沟通了解,开发者其实是想将已有的 Vue 项目转为小程序,在集成了 FinClip …

(蓝桥真题)扫描游戏(计算几何+线段树二分)

题目链接:P8777 [蓝桥杯 2022 省 A] 扫描游戏 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 样例输入: 5 2 0 1 1 0 3 2 4 3 5 6 8 1 -51 -33 2 样例输出: 1 1 3 4 -1 分析:先考虑如何对物件进行排序,首先&…

【PSO-PID】使用粒子群算法整定PID参数控制起动机入口压力值

最近在学优化算法,接触到了经典寻优算法之粒子群PSO,然后就想使用PSO算法来调节PID参数,在试验成功之后将此控制算法应用到了空气起动系统上,同时与之前的控制器进行对比看看哪种控制效果最好。 0 引言 PID参数整定主要有两种&…

谁说程序员不懂了浪费,女神节安排

Python的PyQt框架的使用一、前言二、女神节文案三、浪漫的代码四、官宣文案一、前言 个人主页: ζ小菜鸡大家好,我是ζ小菜鸡,特在这个特殊的日子献上此文,希望小伙伴们能讨自己的女神欢心。 二、女神节文案 1.生活一半是柴米油盐&#xff0c…

优化设计流程的“闭环”问题

7.优化设计流程的“闭环”问题 交互设计师有一项很重要的工作就是定义任务流程。在接到需求之后,设计师需要把抽象的需求设计成具象的流程,然后再把流程分配到不同的界面,最终形成成品。设计流程不难,但是设计好的流程非常难&…

VisualStudio2022制作多项目模板及Vsix插件

一、安装工作负载 在vs2022上安装“visual studio扩展开发 ”工作负载 二、制作多项目模板 导出项目模板这个我就不再多说了(项目→导出模板→选择项目模板,选择要导出的项目→填写模板信息→完成)。 1.准备模板文件 将解决方案中的多个…

SpringBoot整合ElasticSearch实现模糊查询,排序,分页,高亮

目录 前言 1.框架集成-SpringData-整体介绍 1.1Spring Data Elasticsearch 介绍 2.框架集成Spring Data Elasticsearch 2.1版本说明 2.2.idea创建一个springboot项目 2.3.导入依懒 2.3.增加配置文件 2.4Spring Boot 主程序。 2.5.数据实体类 2.6.配置类 2.7.DAO 数据…

速卖通、亚马逊、ebay打造爆款,借助测评自养号提高转化率

做速卖通、亚马逊、ebay只有打造爆款,才能够挣到钱,如果一年到头,不断测款,不断测试不同的广告打法,那么代表了什么?代表了你的试错成本相当高,一不小心,分分钟就能够把手头上仅有的…

【YOLOv8/YOLOv7/YOLOv5/YOLOv4/Faster-rcnn系列算法改进NO.57】引入可形变卷积

文章目录前言一、解决问题二、基本原理三、​添加方法四、总结前言 作为当前先进的深度学习目标检测算法YOLOv8,已经集合了大量的trick,但是还是有提高和改进的空间,针对具体应用场景下的检测难点,可以不同的改进方法。此后的系列…

SRP合批问题

1)SRP合批问题 ​2)多个Base相机渲染到同一个渲染目标,移动平台花屏的问题 3)粒子系统对GPU Instancing的支持 4)如何修改URP下场景和UI分辨率分离(不需要改颜色空间) 这是第327篇UWA技术知识分…

苹果新专利实现无线技术传输睡眠数据,蓝牙在智能家居中的应用

苹果于 2017 年 5 月收购了芬兰科技公司 Beddit,只是在过去 6 年时间里并没有太大的动作。根据美国商标和专利局本周公示的清单,苹果获得了一项 Beddit 相关的技术专利。 根据专利描述,苹果使用一根或者多根天线,利用电磁辐射的…

详解Java8中如何通过方法引用获取属性名/::的使用

在我们开发过程中常常有一个需求,就是要知道实体类中Getter方法对应的属性名称(Field Name),例如实体类属性到数据库字段的映射,我们常常是硬编码指定 属性名,这种硬编码有两个缺点。 1、编码效率低&#x…

Simulink 自动代码生成电机控制:在某国产ARM0定点MCU上实现自动代码生成无感电机控制

目录 前言 开发流程 定点化的技巧 代码生成运行演示 总结 前言 这次尝试了在国产arm0内核的MCU上实现Simulink自动代码生成永磁同步电机无传感控制。机缘巧合之下拿到了一块国产MCU的电机控制板和一个5000RPM的小电机。最后实现了无传感控制,在这里总结下一些经…