Jenkins第一讲

news2024/11/19 1:49:13

目录

一、Jenkins

1.1 敏捷开发与持续集成

1.1.1 敏捷开发

1.1.2 持续集成

1.2 持续集成工具

1.2.1 jenkins和hudson

1.2.2 技术组合

1.2.3 部署方式对比

1.3 安装Jenkins

1.3.1 下载Jenkins的war包

1.3.2 开启Jenkins

1.4 Jenkins全局安全配置

1.5 使用Jenkins部署项目

1.5.1 准备linux的安装环境

1.5.2 安装git

1.5.3 安装maven

1.6 Jenkins的全局工具配置

1.6.1 配置maven的setting.xml

1.6.2 配置jdk的环境

1.6.3 配置git的环境

1.6.4 配置maven的环境

1.6.5 下载maven插件

1.7 创建任务

1.8 项目出现问题

1.9 插件下载失败

一、Jenkins

1.1 敏捷开发与持续集成

1.1.1 敏捷开发

敏捷开发以用户的需求进化为核心,采用迭代、循序渐进的方法进行软件开发。在敏捷开发中,软件项目在构建初期被切分成多个子项目,各个子项目的成果都经过测试,具备可视、可集成和可运行使用的特征。换言之,就是把一个大项目分为多个相互联系,但也可独立运行的小项目,并分别完成,在此过程中软件一直处于可使用状态。

1.1.2 持续集成

因为开发部门同时维护多个版本,多个版本的发布,测试需要大量人力,所以要有一个专业的持续集成工具来管理持续重复的工作。

需求(产品部)文档 -->开发-->测试-->上线  

1.2 持续集成工具

1.2.1 jenkins和hudson

1) Jenkins是一个持续集成(CI)工具。它可以持续编译,运行你的代码;运行单元测试(UT)或集成测试;将运行结果发送至邮件,或展示成报告。

2) Jenkins起源于Hudson。Hudson在商业软件的路上继续前行,而Jenkins则作为开源软件,从hudson分支出来。 因此现在的jenkins和hudson非常类似,但是随着二者各自的发展,已经有了一些不同。

1.2.2 技术组合

Jenkins 可以整合 GitHub 或 Subversion
Husband 也可以整合 GitHub 或 Subversion
二者既然是同源的工具软件,操作和指导思想就是接近的

1.2.3 部署方式对比

javaEE项目部署方式对比

1)手动化部署

2)自动化部署

“自动化”的具体体现:向版本库提交新的代码后,应用服务器上自动部署,用户或测试人员使用的马上就是最新的应用程序。

搭建上述持续集成环境可以把整个构建、部署过程自动化,很大程度上减轻工作量。  
对于程序员的日常开发来说不会造成任何额外负担,自己把代码提交上去之后,服务器上运行的马上就是最新版本,一切都发生在无形中。

1.3 安装Jenkins

Jenkins的war包要安装在tomcat的webapps目中,所以在进行安装之前,需要测试tomcat能否正常使用

开启tomcat后在浏览器进行访问,可以访问到官网即可

#可以只查询进程的第二列
[root@localhost tomcat]# ps -ef|grep tomcat|awk '{print $2}'
52016
52057

1.3.1 下载Jenkins的war包

https://mirrors.tuna.tsinghua.edu.cn/jenkins/war-stable/2.332.2/?C=N&O=D
或者
https://mirrors.tuna.tsinghua.edu.cn/jenkins/war/2.336/

1.3.2 开启Jenkins

 将war放到tomcat下面的webapps里,启动tomcat,并访问 [ ip地址:端口号/jenkins ]
 例如:192.168.111.127:8080/jenkins

访问后出现下图

下载的时间会比较长,在等待的时间里可以了解更改一下如何更改jenkins的默认访问地址

但是请不要更改,因为浏览器里的老爷爷还在努力下载插件

访问Jenkins的访问地址的工作目录
vim /root/.jenkins/hudson.model.UpdateCenter.xml

进入jenkins的工作目录,打开hudson.model.UpdateCenter.xml将 url 中的 
​
https://updates.jenkins.io/update-center.json
​
更改为https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json是国内的清华大学的镜像地址。
​
或者更改为http://updates.jenkins.io/update-center.json,即去掉 https 中的 s 。

 

 

 

1.4 Jenkins全局安全配置

1.5 使用Jenkins部署项目

1.5.1 准备linux的安装环境

linux中需要安装jdk,tomcat,git,maven;已经安装过jdk和tomcat,所以这里重点讲述如何安装git和maven

1.5.2 安装git

1、安装依赖环境

Yum(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及CentOS中的Shell前端软件包管理器。基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装。

安装命令:
yum install -y curl-devel expat-devel gettext-devel openssl-devel zlib-devel yum install -y gcc perl-ExtUtils-MakeMaker
​
​
Dependency Updated:
  curl.x86_64 0:7.29.0-59.el7_9.1           expat.x86_64 0:2.1.0-15.el7_9        gettext.x86_64 0:0.19.8.1-3.el7           gettext-libs.x86_64 0:0.19.8.1-3.el7       
  libcurl.x86_64 0:7.29.0-59.el7_9.1        libdb.x86_64 0:5.3.21-25.el7         libdb-utils.x86_64 0:5.3.21-25.el7        libssh2.x86_64 0:1.8.0-4.el7               
​
Complete!    #代表安装完成

2、删除已经有的git

删除系统自带的git
yum -y remove git
​
Dependency Removed:
  gettext-devel.x86_64 0:0.19.8.1-3.el7          perl-Git.noarch 0:1.8.3.1-23.el7_8                                               
Complete!  #代表卸载成功

3、安装tar包并解压

下载地址:https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.9.3.tar.gz
​
tar -zxvf git-2.9.3.tar.gz

4、编译

进入解压目录   cd git-2.9.3
​
make prefix=/usr/lwl/soft/git all
make prefix=/usr/lwl/soft/git install

5、配置环境变量

export GIT_HOME=/usr/lwl/soft/git
export PATH=$GIT_HOME/bin:$PATH
​
配置完环境变量之后,要让配置文件生效
source /etc/profile

6、查看git版本

[root@localhost git-2.9.3]# git --version
git version 2.9.3

1.5.3 安装maven

1、安装压缩包并解压

下载地址:https://downloads.apache.org/maven/maven-3
​
tar -zxvf apache-maven-3.6.3-bin.tar.gz

2、配置环境变量

 export MAVEN_HOME=/usr/lwl/soft/maven/apache-maven-3.6.3
​
 export PATH=$MAVEN_HOME/bin:$PATH
 
 配置完环境变量,使配置文件生效
 source /etc/profile

3、查看maven版本号

mvn -v 或者是  mvn -version
​
[root@localhost maven]# mvn -v
#版本号是3.6.3
Apache Maven 3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f)
Maven home: /usr/lwl/soft/maven/apache-maven-3.6.3
Java version: 1.8.0_362, vendor: Red Hat, Inc., runtime: /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.362.b08-1.el7_9.x86_64/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-957.el7.x86_64", arch: "amd64", family: "unix"

4、安装插件

mvn help:system
​
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  02:26 min
[INFO] Finished at: 2023-02-22T03:32:23-05:00
[INFO] ------------------------------------------------------------------------

1.6 Jenkins的全局工具配置

1.6.1 配置maven的setting.xml

1.6.2 配置jdk的环境

1.6.3 配置git的环境

1.6.4 配置maven的环境

1.6.5 下载maven插件

1.7 创建任务

1、创建任务

2、源码管理

注意:url的地址的配置需要说明
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
 ssh-keygen -t rsa -b 4096 -C "qq@qq.com"
这条命令的目的是为了让本地机器ssh登录远程机器上的Gitee账户无需输入密码
1、ssh-keygen:
SSH 为 Secure Shell 的缩写,SSH 为建立在应用层基础上的安全协议。SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。
从客户端来看,SSH提供两种级别的安全验证:
        第一种级别(基于口令的安全验证):只要你知道自己帐号和口令,就可以登录到远程主机。所有传输的数据都会被加密,但是不能保证你正在连接的服务器就是你想连接的服务器。可能会有别的服务器在冒充真正的服务器,也就是受到“中间人”这种方式的攻击。
        第二种级别(基于密匙的安全验证)ssh-keygen:需要依靠密匙,你必须为自己创建一对密匙,并把公用密匙放在需要访问的服务器上。如果你要连接到SSH服务器上,客户端软件就会向服务器发出请求,请求用你的密匙进行安全验证。服务器收到请求之后,先在该服务器上你的主目录下寻找你的公用密匙,然后把它和你发送过来的公用密匙进行比较。如果两个密匙一致,服务器就用公用密匙加密“质询”(challenge)并把它发送给客户端软件。客户端软件收到“质询”之后就可以用你的私人密匙解密再把它发送给服务器。用这种方式,你必须知道自己密匙的口令。但是,与第一种级别相比,第二种级别不需要在网络上传送口令。第二种级别不仅加密所有传送的数据,而且“中间人”这种攻击方式也是不可能的(因为他没有你的私人密匙)。但是整个登录的过程可能需要10秒。
        ssh-keygen有很多的参数,比如这里的-t -b -C都是他的一些参数。
2、-t rsa:t是type的缩写
-t即指定密钥的类型,密钥的类型有两种,一种是RSA,一种是DSA:
        RSA:RSA加密算法是一种非对称加密算法,是由三个麻省理工的牛人弄出来的,RSA是他们三个人姓的开头首字母组合。
        DSA:Digital Signature Algorithm (DSA)是Schnorr和ElGamal签名算法的变种。
为了让两个linux机器之间使用ssh不需要用户名和密码。所以采用了数字签名RSA或者DSA来完成这个操作。ssh-keygen默认使用rsa密钥,所以不加-t rsa也行,如果你想生成dsa密钥,就需要加参数-t dsa。
3、-b 4096:b是bit的缩写
-b 指定密钥长度。对于RSA密钥,最小要求768位,默认是2048位。命令中的4096指的是RSA密钥长度为4096位。
DSA密钥必须恰好是1024位(FIPS 186-2 标准的要求)。
4、-C "邮箱":C是comment的缩写
-C表示要提供一个新注释,用于识别这个密钥,所以“”里面不一定非要填邮箱,可以是任何内容,邮箱仅仅是识别用的key
总结:当你创建ssh的时候:-t 表示密钥的类型 ,-b表示密钥的长度,-C 用于识别这个密钥的注释 ,这个注释你可以输入任何内容,很多网站和软件用这个注释作为密钥的名字
去.ssh文件夹里面找到id_rsa.pub文件并将这个文件里面的信息复制到gitee里面
​
5、生成的公钥放在这个文件中
vim /root/.ssh/id_rsa.pub

 

 3、构建触发器

#每十五分钟构建一次
H/15 * * * *

4、Pre steps

构建之前的步骤

当我们在使用maven进行构建时,忽略对应的测试类,
clean package -U -Dmaven.test.skip=true

5、post steps

BUILD_ID=DONTKILLME
jenkins启动之后会自动退出当前的进程 加上上面一句话表示不自动退出
​
#脚本内容
BUILD_ID=DONTKILLME
echo "部署的目录和项目名称"
sh /usr/lwl/test/build.sh
echo "success"

对应脚本中的内容是

#! /bin/bash
echo "部署的目录和项目名称"
DIR="/usr/lwl/project"
projectName="demo"
echo "待部署的应用服务器"
server_ips="192.168.111.127" 
#所有的参数列表
for server_ip in ${server_ips[@]}
do
echo "进行备份操作" 
# 创建文件夹 
mkdir -p $DIR/backup/${projectName}
  if [ -f "$DIR/${projectName}/${projectName}.jar" ];then
# 备份原来的项目
date=` date +%Y%m%d-%H-%M-%S `
    mv $DIR/${projectName}/${projectName}.jar $DIR/backup/${projectName}/${projectName}.jar-${date}
  fi
echo "拷贝jar包到目标服务器的目录下"
cp ${WORKSPACE}/target/*.jar $DIR/${projectName}/${projectName}.jar
echo "连接进行发布操作"
​
echo "开始关闭jar"
l=`ps -ef|grep demo.jar|grep -v grep|awk '{print $2}'`
for i in $l
do
 kill -9 $i
done
sleep 5s
echo "启动jar"
nohup java -jar $DIR/demo/demo.jar --server.port=9999 > release_out.log 2>&1 &start_ok=false
done

最后保存配置即可

1.8 项目出现问题

1、如果SpringBoot项目pom文件中打包时打成war包,改成jar包即可

2、配置全局安全时的时候 ,写错了一个字符

1.9 插件下载失败

这个插件网址是否可以在网页中打开

http://mirror.xmission.com/jenkins/updates/current/update-center.json

如可以,把这个网址粘贴到“Jenkins/插件管理/高级/升级站点” 提交。

原来的地址是:http://updates.jenkins.io/update-center.json

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

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

相关文章

InfluxDB docker安装与界面的使用

influxdb github主页:https://github.com/influxdata/influxdb chronograf github主页:https://github.com/influxdata/chronograf Docker安装InfluxDB docker run -p 8086:8086 --name influxdb-dev influxdb:latest这里博主安装的是2.2.1版本 然后…

Python学习-----排序问题2.0(sort()函数和sorted()函数)

目录 前言: 1.sort() 函数 示例1:阿斯克码比较 示例2:(设置reverse,由大到小排序) 示例3:基于key排序(传入一个参数) 示例4:key的其他应用 2.sorted() …

平时技术积累很少,面试时又会问很多这个难题怎么破?别慌,没事看看这份Java面试指南,解决你的小烦恼!

前言技术面试是每个程序员都需要去经历的事情,随着行业的发展,新技术的不断迭代,技术面试的难度也越来越高,但是对于大多数程序员来说,工作的主要内容只是去实现各种业务逻辑,涉及的技术难度并不高&#xf…

Allegro如何画Photoplot_Outline操作指导

Allegro如何画Photoplot_Outline操作指导 在用Allegro进行PCB设计的时候,最后进行光绘输出前,Photoplot_Outline是必备一个图形,所有在Photoplot_Outline中的图形将被输出,Photoplot_Outline以外的图形都将不被输出。 如何绘制Photoplot_Outline,具体操作如下 点击Shape点…

视觉人培训团队把它称之为,工业领域人类最伟大的软件创造,它的名字叫Halcon

目前为止,世界上综合能力强大的机器视觉软件,,它的名字叫Halcon。 视觉人培训团队把它称之为,工业领域人类最伟大的软件创造,它的名字叫Halcon。 持续不断更新最新的图像技术,软件综合能力持续提升。 综…

常量和变量——“Python”

各位CSDN的uu们你们好呀,今天,小雅兰的内容是Python的一些基础语法噢,会讲解一些常量和变量的知识点,那么,现在就让我们进入Python的世界吧 常量和表达式 变量和类型 变量是什么 变量的语法 变量的类型 常量和表达式 …

go面向对象思想封装继承多态

go貌似都没有听说过继承,当然这个继承不像c中通过class类的方式去继承,还是通过struct的方式,所以go严格来说不是面向对象编程的语言,c和java才是,不过还是可以基于自身的一些的特性实现面向对象的功能,面向…

TCP 的演化史-byte stream 和 packet

不想写太多代码,我想直接抄一个 TCP sack 实现,参考了 lwIP TCP,很遗憾:TCP: Implement handling received SACKs 无奈不得不自己实现 sack option 的处理。由于 tso/gso/lro/gro,在软件层面难免遇到下面的情况&#…

Java 如何学习?这份5000页Java学习手册值得拥有,适合零基础自学也适合查漏补缺!

学习技巧 在以前大部分人学习都是先去找本书,先看看,再试,要是不懂了在去网上去查,再在继续啃着书本。但现在向书学习和在网上学习这掌握的效果是不同的,要学会用适合自己的学习方式。 目前的学习要是能看进去书本&a…

【5】linux命令每日分享——touch创建文件

大家好,这里是sdust-vrlab,Linux是一种免费使用和自由传播的类UNIX操作系统,Linux的基本思想有两点:一切都是文件;每个文件都有确定的用途;linux涉及到IT行业的方方面面,在我们日常的学习中&…

飞桨 Tensor 介绍

Tensor 介绍 一、Tensor 的概念介绍 飞桨使用张量(Tensor) 来表示神经网络中传递的数据,Tensor 可以理解为多维数组,类似于 Numpy 数组(ndarray) 的概念。与 Numpy 数组相比,Tensor 除了支持运…

C语言 深度剖析数据在内存中的存储

目录数据类型详细介绍整形在内存中的存储:原码,反码,补码大小端字节序介绍及判断浮点型在内存中的存储解析数据类型详细介绍整形:1.为什么char类型也会归类到整形家族当中去呢?字符存储和表示的时候本质上使用的是ASCI…

【华为OD机试模拟题】用 C++ 实现 - 最大相连男生数(2023.Q1)

最近更新的博客 【华为OD机试模拟题】用 C++ 实现 - 货币单位换算(2023.Q1) 【华为OD机试模拟题】用 C++ 实现 - 选座位(2023.Q1) 【华为OD机试模拟题】用 C++ 实现 - 停车场最大距离(2023.Q1) 【华为OD机试模拟题】用 C++ 实现 - 重组字符串(2023.Q1) 【华为OD机试模…

integrationobjects/OPC AE Client ActiveX Crack

使用 OPC AE 客户端 ActiveX 进行快速 OPC 警报和事件客户端编程! OPC AE Client ActiveX包括多个 OPC ActiveX 控件,可以轻松嵌入到最流行的 OLE 容器中。这允许用户与任何 OPC AE 服务器连接并实时检索警报和事件。 这种易于使用的 OPC AE ActiveX 简化…

论文笔记|固定效应的解释和使用

DeHaan E. Using and interpreting fixed effects models[J]. Available at SSRN 3699777, 2021. 虽然固定效应在金融经济学研究中无处不在,但许多研究人员对作用的了解有限。这篇论文解释了固定效应如何消除遗漏变量偏差并影响标准误差,并讨论了使用固…

【C语言进阶】文件的顺序读写、随机读写、文本文件和二进制文件、文件读取结束的判定以及文件缓冲区相关知识

​ ​📝个人主页:Sherry的成长之路 🏠学习社区:Sherry的成长之路(个人社区) 📖专栏链接:C语言进阶 🎯长路漫漫浩浩,万事皆有期待 文章目录1.文件操作1.1 概述…

优思学院:《改变世界的机器・精益生产之道》是什么著作?

《改变世界的机器》(The Machine That Changed the World)是一本经典的商业管理书籍,由詹姆斯P温斯顿(James P. Womack)、丹尼尔T琼斯(Daniel T. Jones)和丹尼尔罗斯(Daniel Roos&am…

带组态物联网平台源码 代码开源可二次开发 web MQTT Modbus

物联网IOT平台开发辅助文档 技术栈:JAVA [ springmvc / spring / mybatis ] 、Mysql 、Html 、 Jquery 、css 使用协议和优势: TCP/IP、HTTP、MQTT 通讯协议 1.1系统简介 IOT通用物联网系统平台带组态,是一套面向通用型业务数据处理的系统…

Spring MVC 源码- HandlerAdapter 组件(五)之 HttpMessageConverter

HandlerAdapter 组件HandlerAdapter 组件,处理器的适配器。因为处理器 handler 的类型是 Object 类型,需要有一个调用者来实现 handler 是怎么被执行。Spring 中的处理器的实现多变,比如用户的处理器可以实现 Controller 接口或者 HttpReques…

数据结构预算法之买卖股票的最好时机(三)动态规划

目录:一.题目知识点:动态规划二.动态规划数组思路确定1.dp数组以及下标的含义2.确定递推公式3.dp数组如何初始化4.确定遍历顺序5.举例推导dp数组一.题目知识点:动态规划动态规划算法的基本思想是:将待求解的问题分解成若干个相互联…