Jenkins详细使用教程

目录

1. 什么是Jenkins?

2. 为什么使用Jenkins?

3. 安装Jenkins

3.1 下载相关文件

 3.2 解压Linux版本的JDK

3.3 配置JDK环境

3.4 运行jenkins.war

3.5 安装完成

4. 访问Jenkins

 5. 修改密码

6. 集成JDK

7. Jenkins集成Git

7.1 使用Jenkins拉取Git仓库中的代码

8. Jenkins集成Maven

8.1 在Jenkins所在的服务器安装Maven

 8.2 配置环境变量

 8.3 修改maven配置文件(本地仓库和阿里云远程仓库地址)

 8.4 Jenkins拉取Maven项目

8.4.1 安装maven插件

 8.4.2 jenkins集成maven软件

9. 自动拉取

9.1 内外穿透

9.2 jenkins安装gitee插件

9.3 修改item任务的配置

 9.4 修改gitee仓库的配置

10.  自动化部署

10.1 免密复制操作

10.2 在Jenins远程复制的脚本

10.3 启动项目的shell脚本

 10.4 关闭的脚本

 10.5 在jenkins配置中引入关闭和启动脚本


1. 什么是Jenkins?

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

2. 为什么使用Jenkins?

 总的来说就是当你在idea写好代码上传到git上,jenkins帮你拉取文件,并且可以部署到Linux上,以便于测试。

3. 安装Jenkins

必须在linux系统上安装了jdk,而且jdk的版本是[11~20)之间。如果你的jdk版本是8的话,前面一切正常,但到了后面安装插件就会报错。

3.1 下载相关文件

http://mirrors.jenkins.io/war-stable/latest/jenkins.war

 3.2 解压Linux版本的JDK

tar -zxvf xxxx.tar.gz

3.3 配置JDK环境

  1. vi /etc/profile 
  2. 在文件的最后加上:export JAVA_HOME=/usr/app/jdk17
                                    export PATH=$JAVA_HOME/bin:$PATH
  3. 环境配置好后:source /etc/profile。

先运行yum install fontconfig:fontconfig 是一个灵活的字体配置和选择系统,用于定制字体查找规则并提高字体的可访问性和可读性。

3.4 运行jenkins.war

nohup java -jar /usr/app/jenkins.war  --httpPort=8777 >/usr/app/jenkins.log 2>&1 &

上面命令是在Linux系统中以后台方式启动Java应用程序(具体来说是Jenkins)而不占用终端会话。 

  1. nohup:这个命令意味着“不挂断”。它使得启动的进程不会因为终端会话结束而被终止。
  2. java -jar /usr/app/jenkins.war:这部分启动了Java应用程序。java -jar是运行Java Web应用程序的标准方式,/usr/app/jenkins.war是Jenkins应用的WAR文件路径。
  3. --httpPort=8777:这是传递给Jenkins应用的一个参数,指定了HTTP服务监听的端口为8777。
  4. >/usr/app/jenkins.log:这将标准输出重定向到/usr/app/jenkins.log文件,记录Jenkins运行时的所有输出信息。
  5. 2>&1:这将标准错误输出(通常为文件描述符2)重定向到与标准输出相同的地方(这里是指向jenkins.log)。这样做的目的是将所有输出(包括错误信息)都合并到同一个日志文件中。
  6. &:最后的符号&表示命令应该在后台运行,立即返回控制台,使用户可以继续执行其他命令,而Jenkins应用则在后台持续运行。

3.5 安装完成

查看日志:  

tail  -100 jenkins.log

 出现下面这种,说明安装完成。

4. 访问Jenkins

 即可访问jenkins安装的Linux的地址:8777:

运行得到管理员密码:

 等待安装所有需要的依赖:

 等待进度条满:

  创建用户:

 5. 修改密码

 在页面下方有password。

6. 集成JDK

找到Tools:

 添加JDK:

7. Jenkins集成Git

因为jenkins自动从git远程仓库拉取代码,所以要在jenkins所在的服务器上安装git。

yum install -y git

 再找到Tools:

 找到Git:

 如果你的Linux安装了git这里就不会报红了。

7.1 使用Jenkins拉取Git仓库中的代码

创建Item:

 完成新建:

 创建完毕后,找到源码管理:

 输入你的仓库地址:

 添加jenkins:

 填写好后,点至保存:

 现在jenkins无法自动拉取代码。(当仓库中的代码发生改变时无法自动拉取)

 结果:

8. Jenkins集成Maven

由于Jenkins本身不能对代码进行打包,所以我们需要集成maven,而且我们的项目几乎100%都是maven构建的项目。

8.1 在Jenkins所在的服务器安装Maven

 8.2 配置环境变量

  1. vi /etc/profile 
  2. 在文件的最后加上:export MAVEN_HOME=安装路径
                                     export PATH=$MAVEN_HOME/bin:$PATH
  3. 环境配置好后:source /etc/profile

查看:

 8.3 修改maven配置文件(本地仓库和阿里云远程仓库地址)

 8.4 Jenkins拉取Maven项目

8.4.1 安装maven插件

 8.4.2 jenkins集成maven软件

 找到Git,配置Git:

9. 自动拉取

gitee仓库的代码,默认gitee不允许内网拉取。这里设计一个知识点叫做内网穿透

9.1 内外穿透

通常个人电脑无论是连接WIFI上网还是用网线上网,都是属于局域网里边的,外网无法直接访问到你的电脑,内网穿透可以让你的局域网中的电脑实现外网访问功能。

使用nat:

NATAPP1分钟快速新手图文教程 - NATAPP-内网穿透 基于ngrok的国内高速内网映射工具

9.2 jenkins安装gitee插件

9.3 修改item任务的配置

 生成Gitee WebHook 密码:

 9.4 修改gitee仓库的配置

 添加WebHook:

10.  自动化部署

用shell脚本。

jenkins软件需要大量集成第三方很多软件(maven、git、jdk...),如果我们的项目也部署到该服务器下,势必导致项目性能弱。

所以把jenkins所在的服务下打包好的项目远程复制到其他服务器上,在其他服务器进行项目的启动和关闭。

scp xxx.jar  root@远程ip:/远程路径

第一次部署的时候需要输入密码。

10.1 免密复制操作

配置ssh免密登录

免密登录主要是方便jenkins服务器的root用户到应用服务器的root用户上的jar包拷贝,部署本就是jar包拷贝的过程。

jenkins服务器上使用root用户生成秘钥注意此处是root用户。

$ ssh-keygen -t rsa
# 3次回车

 运行后会在当前用户的根目录生成一个.ssh文件夹

ssh文件夹中的文件描述

  • id_rsa : 生成的私钥文件

  • id_rsa.pub : 生成的公钥文件

接下来需要将公钥导入到认证文件中:

$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

如果希望ssh公钥生效需满足至少下面两个条件:

  • .ssh目录的权限必须是700

  • .ssh/authorized_keys文件权限必须是600

给对应文件授权:

$ chmod 700 ~/.ssh
$ chmod 600 ~/.ssh/authorized_keys

authorized_keys文件拷贝到另一台应用服务器的root用户.ssh目录下:

  1. 应用服务器上用root用户创建/root/.ssh文件夹  mkdir -p /root/.ssh
  2. jenkins服务器上将pub公钥文件拷贝到应用服务器的.ssh目录下

scp -p ~/.ssh/id_rsa.pub root@应用服务器ip:/root/.ssh/authorized_keys

jenkins服务器上进行免密连接测试:

ssh 应用服务器ip

 总结:

  1. 在jenkin所在的服务器使用ssh-keygen -t rsa。
  2. 把公钥加载到认证文件中cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys。
  3. 修改.ssh [700]和authorized_keys [600]的权限。
  4. 把jenkins服务器上公钥远程复制到免密的服务器上。mkdir -p /root/.ssh scp -p ~/.ssh/id_rsa.pub root@应用服务器ip:/root/.ssh/authorized_keys。

10.2 在Jenins远程复制的脚本

#!/bin/bashecho "部署的目录和项目名称"
DIR="/data/app"
projectName="my-boot"echo "待部署的应用服务器,可多台"
# 部署项目的ip 
server_ips="xxxxxxxx"
for server_ip in ${server_ips[@]}
doecho "ssh连接进行备份操作"
ssh -Tq -oStrictHostKeyChecking=no root@${server_ip} <<EOF
mkdir -p $DIR/backup/${projectName}
mkdir -p $DIR/${projectName}
if [ -f "$DIR/${projectName}/${projectName}.jar" ];thenmv $DIR/${projectName}/${projectName}.jar  $DIR/backup/${projectName}/${projectName}-`date "+%Y%m%d_%H%M%S"`.jar 
fi
EOFecho "拷贝jar包到目标服务器的tmp目录"
scp -q -oStrictHostKeyChecking=no ${WORKSPACE}/target/*.jar root@${server_ip}:/tmp/${projectName}.jarecho "ssh远程连接进行发布操作"
ssh -q -oStrictHostKeyChecking=no root@${server_ip} <<EOF
mv /tmp/${projectName}.jar $DIR/${projectName}/${projectName}.jarEOFdoneecho "success"

 作用:把jenkins打包的jar远程copy到指定的服务器下。

10.3 启动项目的shell脚本

#!/bin/bash
APP_ID="my-boot"
APP_DIR="/data/app"nohup java -jar ${APP_DIR}/${APP_ID}/${APP_ID}.jar > release_out.log &
start_ok=false
if [[ $? = 0 ]];thensleep 3tail -n 10 release_out.logsleep 5tail -n 50 release_out.log
fi
aaa=`grep "Started" release_out.log | awk '{print $1}'`
if [[ -n "${aaa}" ]];thenecho "Application started ok"exit 0
elseecho "Application started error"exit 1
fi

 10.4 关闭的脚本

#!/bin/bashAPP_ID=my-boot
ps aux | grep ${APP_ID} | grep -v "grep" | awk '{print "kill -9 "$2}' | sh

 10.5 在jenkins配置中引入关闭和启动脚本

sh $DIR/${projectName}/stop.sh
sh $DIR/${projectName}/start.sh

 

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

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

相关文章

C语言——运算符及表达式

C语言——运算符及表达式 运算符运算符的分类&#xff08;自增运算符&#xff09;、--&#xff08;自减运算符&#xff09;赋值运算符逗号运算符&#xff08;顺序求值运算符&#xff09; 表达式 运算符 运算符的分类 C语言的运算符范围很宽&#xff0c;除了控制语句和输入输出…

Internet Download Manager2024免费流行的下载加速器

1. Internet Download Manager&#xff08;IDM&#xff09;是一款流行的下载加速器&#xff0c;多线程下载使速度更快。 2. 用户界面友好&#xff0c;易于操作&#xff0c;支持多种浏览器集成和自动捕获下载。 3. 恢复中断的下载&#xff0c;动态文件分割技术提高效率。 4. 定…

Vue3与Element-plus配合 直接修改表格中的一项数据——控制输入框的显示与隐藏

利用控制与隐藏输入框,直接修改表格中的每一项数据。 <!-- 表格模块 --> <div><el-table :data"tablelist" style"width: 100%"><el-table-column align"center" prop"deposit" label"接单押金">&l…

『 Linux 』信号的写入与保存

文章目录 信号的发送信号的保存sigset_t 类型与信号集操作函数阻塞信号集(信号屏蔽字)操作函数未决信号集操作函数验证阻塞信号集与未决信号集 信号的发送 $ kill -l1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10)…

【音视频】RTSP、RTMP与流式传输

文章目录 前言RTSP与RTMPRTSP&#xff08;Real-Time Streaming Protocol&#xff09;RTMP&#xff08;Real-Time Messaging Protocol&#xff09;主要差异 什么是流式传输&#xff1f;流式传输的特点流式传输与传统下载的区别 使用VLC播放RTSP监控 总结 前言 在现代网络环境中…

一天搞定React(3)——Hoots组件【已完结】

Hello&#xff01;大家好&#xff0c;今天带来的是React前端JS库的学习&#xff0c;课程来自黑马的往期课程&#xff0c;具体连接地址我也没有找到&#xff0c;大家可以广搜巡查一下&#xff0c;但是总体来说&#xff0c;这套课程教学质量非常高&#xff0c;每个知识点都有一个…

学习笔记之Java篇(0726)

2、封装 1、封装的使用细节 2、开发中封装的简单规则&#xff1a; 属性一般使用private访问权限。 属性私有后&#xff0c;提供相应的get/set方法来访问相关属性&#xff0c;这些方法通常是public修饰后&#xff0c;以提供属性的赋值与读取操作&#xff08;注意&#xff1a;b…

情绪稳定的人有什么特点?

第一部分&#xff1a;至纯之人&#xff0c;大器晚成 1.1 单纯&#xff0c;不是天真 你知道吗&#xff1f;那些能够成就大事的人&#xff0c;往往在人性上非常单纯。他们对外界的需求很低&#xff0c;更多的是向内寻求。这样的人&#xff0c;他们的内心世界像一片净土&#xff…

二叉树 N0=N2+1

N0 叶子节点&#xff0c;度为 0 的节点&#xff1b; N1 度为 1 的节点&#xff1b; N2 度为 2 的节点 度为 0 的节点为&#xff1a;H、I、J、K、G 度为 1 的节点&#xff1a;E、F 度为 2 的节点&#xff1a;A、B、D、C N0 N2 1&#xff0c;即&#xff1a;度为 0 的叶子节点 …

力扣高频SQL 50 题(基础版)第四题

文章目录 力扣高频SQL 50 题&#xff08;基础版&#xff09;第四题584.寻找用户推荐人题目说明思路分析实现过程准备数据实现方式结果截图 力扣高频SQL 50 题&#xff08;基础版&#xff09;第四题 584.寻找用户推荐人 题目说明 表: Customer -------------------- | Colu…

虚拟机配置RabbitMQ集群教程

RabbitMQ是常用的一款消息中间件&#xff0c;那么如何在我们虚拟机中创建其集群呢&#xff1f;跟着博主这篇文章让你一步到位 本篇搭建的是三台机器为一个集群&#xff01;假设大家虚拟机都为初始化状态&#xff0c;从0开始&#xff08;注意集群搭建需要CentOS8以上环境&#x…

【五】MySql8基于m2芯片arm架构Ubuntu24虚拟机安装

文章目录 1. 更新系统包列表2. 安装 MySQL APT Repository3. 更新系统包列表4. 安装 MySQL Server5. 运行安全安装脚本6. 验证 MySQL 安装7. 配置远程连接7.1 首先要确认 MySQL 配置允许远程连接&#xff1a;7.2 重启 MySQL 服务&#xff1a;7.3 检查 MySQL 用户权限&#xff1…

详解数据结构之二叉树(二叉链,使用递归)

详解数据结构之二叉树(二叉链&#xff0c;使用递归实现) 二叉链 二叉链&#xff0c;二叉树的链式结构&#xff0c;其中数据域data存放节点的值&#xff0c;指针域left和right分别存放左孩子节点的地址、右孩子节点的地址。 typedef int BinaryTDataType; typedef struct Bin…

ChatGPT的原理和成本

ChatGPT就是人机交互的一个底层系统&#xff0c;某种程度上可以类比于操作系统。在这个操作系统上&#xff0c;人与AI之间的交互用的是人的语言&#xff0c;不再是冷冰冰的机器语言&#xff0c;或者高级机器语言&#xff0c;当然&#xff0c;在未来的十来年内&#xff0c;机器语…

K8S 部署peometheus + grafana 监控

安装说明 如果有下载不下来的docker镜像可以私信我免费下载。 系统版本为 Centos7.9 内核版本为 6.3.5-1.el7 K8S版本为 v1.26.14 动态存储&#xff1a;部署文档 GitHub地址 下载yaml 文件 ## 因为我的K8S 版本比较新&#xff0c;我下载的是当前的最新版本&#xff0c;你的要…

go语言day18 reflect反射

Golang-100-Days/Day16-20(Go语言基础进阶)/day19_Go语言反射.md at master rubyhan1314/Golang-100-Days (github.com) 7-19 接口&#xff1a;底层实现_哔哩哔哩_bilibili 一、interface接口 接口类型内部存储了一对pair(value,Type) type interface { type *Type // 类型信…

Linux:传输层(2) -- TCP协议(2)

目录 1. 流量控制 2. 滑动窗口 3. 拥塞控制 4. 延迟应答 5. 捎带应答 6. 面向字节流 7. 粘包问题 8. TCP异常情况 1. 流量控制 接收端处理数据的速度是有限的. 如果发送端发的太快 , 导致接收端的缓冲区被打满 , 这个时候如果发送端继续发送 , 就会造成丢包, 继而引…

7月24日JavaSE学习笔记

序列化版本控制 序列化&#xff1a;将内存对象转换成序列&#xff08;流&#xff09;的过程 反序列化&#xff1a;将对象序列读入程序&#xff0c;转换成对象的方式&#xff1b;反序列化的对象是一个新的对象。 serialVersionUID 是一个类的序列化版本号 private static fin…

dsp c6657 SYS/BIOS学习笔记

1 SYS/BIOS简介 SYS/BIOS是一种用于TI的DSP平台的嵌入式操作系统&#xff08;RTOS&#xff09;。 2 任务 2.1 任务调度 SYS/BIOS任务线程有0-31个优先级&#xff08;默认0-15&#xff0c;优先级0被空闲线程使用&#xff0c;任务最低优先级为1&#xff0c;最高优先级为15&am…

Java | Leetcode Java题解之第264题丑数II

题目&#xff1a; 题解&#xff1a; class Solution {public int nthUglyNumber(int n) {int[] dp new int[n 1];dp[1] 1;int p2 1, p3 1, p5 1;for (int i 2; i < n; i) {int num2 dp[p2] * 2, num3 dp[p3] * 3, num5 dp[p5] * 5;dp[i] Math.min(Math.min(num2…