新手入门Jenkins自动化部署入门详细教程

1. 背景

  在实际开发中,我们经常要一边开发一边测试,当然这里说的测试并不是程序员对自己代码的单元测试,而是同组程序员将代码提交后,由测试人员测试;

  或者前后端分离后,经常会修改接口,然后重新部署;

  这些情况都会涉及到频繁的打包部署;

  手动打包常规步骤:

  1.提交代码

  2.问一下同组小伙伴有没有要提交的代码

  3.拉取代码并打包(war包,或者jar包)

  4.上传到Linux服务器

  5.查看当前程序是否在运行

  6.关闭当前程序

  7.启动新的jar包

  8.观察日志看是否启动成功

  9.如果有同事说,自己还有代码没有提交......再次重复1到8的步骤!!!!!(一上午没了)

  那么,有一种工具能够实现,将代码提交到git后就自动打包部署勒,答案是肯定的:Jenkins

  当然除了Jenkins以外,也还有其他的工具可以实现自动化部署,如Hudson等

  只是Jenkins相对来说,使用得更广泛。

2. Jenkins服务器搭建及基本配置

2.1 简介

  Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。

2.2 Jenkins自动化部署实现原理

  

 2.3 Jenkins部署环境

  基本环境:

  1.jdk环境,Jenkins是java语言开发的,因需要jdk环境。

  2.git/svn客户端,因一般代码是放在git/svn服务器上的,我们需要拉取代码。

  3.maven客户端,因一般java程序是由maven工程,需要maven打包,当然也有其他打包方式,如:gradle

  以上是自动化部署java程序jenkins需要的基本环境,请自己提前安装好,下面着重讲解Jenkins的安装部署配置。

2.4 Jenkins安装

  1.下载安装包

  2.在安装包根路径下,运行命令 java -jar jenkins.war --httpPort=8080,(linux环境、Windows环境都一样);

  3.打开浏览器进入链接

  4.填写初始密码,激活系统

  

  5.进入插件安装选择

  这里建议选择,推荐安装的插件,保证基本常用的功能可以使用。

  

  选择后,进入插件安装页面

  

  6.设置初始用户和密码

  

  7.进入系统,安装完成

  注意,如果还是进入不了系统,需要稍等一下,或者刷新页面,如果还是进入不了,需要重新启动jenkinds服务器。

2.5 Jenkins基本配置

2.5.1 系统初始化配置 

  

  1.Configure System (系统设置)

  在系统设置这里,我们只需要设置最后面的一项,配置远程服务器地址,

  即我们代码最终运行的服务器地址信息,就像我们之前手动部署时使用xshell登录Linux服务器一样,

  当然这里是可以配置多台远程Linux服务器的,配置完成后点击保存即可,为后面我们配置自动化部署做准备,配置如下图

  

  2.Configure  Global Security (全局安全配置)

  a.配置用户相关的权限

  

  b.配置钩子程序(当用代码更新时通知)访问权限,避免报403错误

  默认是勾选上了的,这里去掉勾选

  

  3.Global Tool Configuration (全局工具配置 )

  a.配置maven的全局settings路径

  

  b.配置jdk

  

  c.配置git

  

  d.配置maven的安装路径

  

   4.配置必要插件

   主要是检查如下这两个插件是否已安装

  插件1:Publish over SSH
  插件2:Deploy to container Plugin

  

  到这里,我们配置一个自动化部署的的java程序(springBoot+maven+gitHub),基本必要配置就差不多了,后面配置过程中如果需要在配置。

3. Jenkins自动化部署(springBoot+maven+gitHub)项目

 3.1 Jenkins服务器上创建项目和配置

  大体步骤:General(基础配置)--》源码管理--》构建触发器--》构建环境--》构建--》构建后操作

  1.创建一个工程

  

  2.General(基础配置)

  仅需填写标准部分,其他可不填写

  

  3.源码管理

  

  上图中点击“添加”按钮添加一组账号和密码

  

  4.构建触发器

  

  如上图:当前项目的回调地址为:

  http://localhost:8080/job/jenkinsSpringBootDemo/build?token=token_demo2

  只要执行这个地址(在浏览器上访问改地址),该项目就会发起一次构建项目,即拉取代码打包部署操作,

  在实际中,是由git服务器回调改地址,在后面讲git服务器配置时详细讲解 ,

  值得注意的是,如果你是学习测试,使用的是GitHub服务,要确保你的回调地址已经试外网映射过的,即往外网可以访问

  5.构建环境(无需配置)

  6.构建

  

  7.构建后操作

  构建后操作的意思是,jar打包好后,要将jar发送到哪里去,发送后去和启动等

  这里需要提前在需要部署的服务器上配置好路径,写好启动和停止项目的脚本,并设置为可以执行的脚本,

  其实就是我们平时在Linux上手动部署项目操作的脚本

  

  案例中给出的stop.sh脚本如

1 #!/bin/bash
2 echo "Stop Procedure : demo2-0.0.1-SNAPSHOT.jar"
3 pid=`ps -ef |grep java|grep demo2-0.0.1-SNAPSHOT.jar|awk '{print $2}'`
4 echo 'old Procedure pid:'$pid
5 if [ -n "$pid" ]
6 then
7 kill -9 $pid
8 fi

  案例中给出的start.sh脚本如下:

1 #!/bin/bash
2 export JAVA_HOME=/usr/java/jdk1.8.0_131
3 echo ${JAVA_HOME}
4 echo 'Start the program : demo2-0.0.1-SNAPSHOT.jar' 
5 chmod 777 /home/ldp/app/demo2-0.0.1-SNAPSHOT.jar
6 echo '-------Starting-------' 
7 cd /home/ldp/app/
8 nohup ${JAVA_HOME}/bin/java -jar demo2-0.0.1-SNAPSHOT.jar &
9 echo 'start success'

   到此,Jenkinds服务器配置完成,接下来我还有要配置Linux服务器和Git服务器。

3.2 Linux服务器配置

  在Liux服务上,上传上文中的两个脚本,用于启动和停止

  

3.3 GitHub服务器配置

  在GitHub服务器上的指定项目里面配置上文中提到的回调地址

  特别注意:为了保证回调地址网可以使用,

  我已经将地址:

  通过花生壳进行外网映射为:

  所以,下面配置的是外网映射地址。

  

  到这里所有配置搞定,只需修改代码,提交到git,然后访问程序看是否生效。

 4. 测试

   1.测试代码

  

  2.提交代码到git,触发构建

  3.在GitHub服务器上去看,是否已经触发

  

  4.在Jenkins的控制台查看是否,正在构建

  从下图中可以看出,正在构建

  

  5.查看当次构建的控制台日志

  

  说明已经启动成功

  6.查看Linux服务器,是否上传代码

  

  7.在Linux上使用命令jps,查看是否启动

  

  8.浏览器上访问,看是否能用

  

  说明,已经正常启动可以使用。

  9.再次确认是否能自动化部署

  修改代码,重新提交代码,循环1到8步查看。

  如果测试结果是你预期的,那么自动化部署成功。

5. 总结&资料下载

5.1 总结

  自动化部署Jenkins,作为一款工具,有着非常强大的功能,

  上面我们只是讲了生产上做Java自动化部署的一个主要流程,

  其他的功能,大家可以参看官方文档

  但是,本着学习是为了解决生产的原则,

  个人建议,用到Jenkins的什么功能就学什么就可以了,

  没必要把Jenkins的所有功能都学完在使用,

  就如同我们使用word文档一样,并没有系统的他word文档学完后,在开始使用,而是用到什么功能就学习什么功能!

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Python】Python 实现猜单词游戏——挑战你的智力和运气!

文章目录 前言学到什么?导入 random 模块定义生命次数定义神秘单词并进行随机选择定义 clue(猜测进度) 列表,用问号 ? 初始化定义心形符号的 Unicode 编码初始化 guessed_word_correctly 变量定义更新猜测进度函数 update_clue主循环&#…

使用上 Spring 的事件机制

本文主要是简单的讲述了Spring的事件机制,基本概念,讲述了事件机制的三要素事件、事件发布、事件监听器。如何实现一个事件机制,应用的场景,搭配Async注解实现异步的操作等等。希望对大家有所帮助。 Spring的事件机制的基本概念 …

邪恶版ChatGPT来了!

「邪恶版」ChatGPT 出现:每月 60 欧元,毫无道德限制,专为“网络罪犯”而生。 WormGPT 并不是一个人工智能聊天机器人,它的开发目的不是为了有趣地提供无脊椎动物的人工智能帮助,就像专注于猫科动物的CatGPT一样。相反&…

Ansible —— playbook 剧本

Ansible —— playbook 剧本 一、playbook的概述1.playbook简介2.什么是Ansible playbook剧本?3.Ansible playbook剧本的特点4.如何使用Ansible playbook剧本?5.playbooks 本身由以下各部分组成 二、playbook示例1.运行playbook2.定义、引用变量3.指定远…

JAVA 反编译工具

Releases deathmarine/Luyten GitHub 安装exe 打开拖入文件即可

九耶|阁瑞钛伦特:产品经理面试题—产品经理在工作中是如何划分需求优先级的?

产品经理在工作中划分需求优先级是为了指导产品团队的开发和发布流程。以下是产品经理在划分需求优先级时通常考虑的因素: 业务目标:产品经理会与企业领导层或业务方合作,了解公司的战略目标和销售策略。然后,他们会根据这些目标评…

图像 检测 - YOLOv3: An Incremental Improvement (arXiv 2018)

YOLOv3: An Incremental Improvement - 增量改进(arXiv 2018) 摘要1. 引言2. 处理2.1 边界框预测2.2 类别预测2.3 跨规模预测2.4 特征提取器2.5 训练 3. 我们的做法4. 我们尝试过但没有成功的事情5. 这一切意味着什么References 声明:此翻译仅…

Netty:从ByteBuf中读出数据

介绍 Netty的ByteBuf数据位置索引是0开始的。 可以用ByteBuf的getByte(int index)方法从指定位置读出一字节,这个操作不会改变ByteBuf的readerIndex 或者 writerIndex 的位置。如果index小于0,或者index 1大于ByteBuf的容量,就会抛出IndexO…

下载列表视频的具体操作

主要是介绍怎样获取上篇博客需要的HAR文件和请求域名

Vulnhub靶机DC-2 writeup

靶机介绍 靶机介绍:https : //download.vulnhub.com/dc/DC-2.zip ​ 信息搜集 获取IP地址 扫描靶机的IP的方法 1. nmap -sP 192.168.142.0/24 #nmap进行ping扫描发现存活主机 2. arp-scan -l #基于ARP发现内网存活主机 3. netdiscover -r 192.168.142.0/24 -…

Java导出数据到Excel

Java导出数据到Excel分3步处理 1、构建Workbook 数据 2、设置Workbook 格式 3、导出到Excel 1、构建Workbook 数据 public static void buildData(Workbook wb, List<Person> list) {Sheet sheetName wb.createSheet("sheetName");Row row sheetName.creat…

Java 中的 7 种重试机制

随着互联网的发展项目中的业务功能越来越复杂&#xff0c;有一些基础服务我们不可避免的会去调用一些第三方的接口或者公司内其他项目中提供的服务&#xff0c;但是远程服务的健壮性和网络稳定性都是不可控因素。 在测试阶段可能没有什么异常情况&#xff0c;但上线后可能会出…

C++---list常用接口和模拟实现

list---模拟实现 list的简介list函数的使用构造函数迭代器的使用list的capacitylist element accesslist modifiers list的模拟实现构造函数&#xff0c;拷贝构造函数和迭代器begin和endinsert和eraseclear和析构函数 源码 list的简介 list是用双向带头联表实现的一个容器&…

【Python】从同步到异步多核:测试桩性能优化,加速应用的开发和验证

目录 测试工作中常用到的测试桩mock能力 应用场景 简单测试桩 http.server扩展&#xff1a;一行命令实现一个静态文件服务器 性能优化&#xff1a;使用异步响应 异步响应 能优化&#xff1a;利用多核 gunicorn 安装 gunicorn 使用 gunicorn 启动服务 性能优化&#…

PHP 前后端分离,运行配置

H5 WEB目录:安装 yarn install、npm install &#xff08;依赖包&#xff09; 在电脑&#xff1a;安装nodejs Composer下载 &#xff1a;https://getcomposer.org/

Amazon Aurora Serverless v2 正式发布:针对要求苛刻的工作负载的即时扩展

我们非常兴奋地宣布&#xff0c;Amazon Aurora Serverless v2 现已面向 Aurora PostgreSQL 和 MySQL 正式发布。Aurora Serverless 是一种面向 Amazon Aurora 的按需自动扩展配置&#xff0c;可让您的数据库根据应用程序的需求扩展或缩减容量。 亚马逊云科技开发者社区为开发者…

SAP 集成以及PO异步接口调优

前言&#xff1a;目前国内的SAP相关的技术文档实在是少得可怜&#xff0c;PO相关的就更少了&#xff0c;基本上都是需要摸索&#xff0c;官方的技术专家很多时候的回复都是说了又似乎没说。。。 背景&#xff1a;由于目标系统接收数据缓慢或者是异步线程出现异常导致错误积压。…

动手学深度学习(一)预备知识

目录 一、数据操作 1. N维数组样例 2. 访问元素 3. 基础函数 &#xff08;1&#xff09; 创建一个行向量 &#xff08;2&#xff09;通过张量的shape属性来访问张量的形状和元素总数 &#xff08;3&#xff09;reshape()函数 &#xff08;4&#xff09;创建全0、全1、…

c语言基础知识帮助理解(函数递归详解)

"从前有座山&#xff0c;山里有座庙&#xff0c;庙里有个老和尚和一个小和尚。有一天老和尚对小和尚说:“从前有座山.山里有座庙&#xff0c;庙里有个老和尚和一个小和尚&#xff0c;有一天老和尚对小和尚说&#xff1a;“从前有座山.山里有座庙&#xff0c;庙里有个老和尚…

微信小程序tab加列表demo

一、效果 代码复制即可使用&#xff0c;记得把图标替换成个人工程项目图片。 微信小程序开发经常会遇到各种各样的页面组合&#xff0c;本demo为list列表与tab组合&#xff0c;代码如下&#xff1a; 二、json代码 {"usingComponents": {},"navigationStyle&q…