Jenkins详细使用教程

news2024/9/20 18:53:54

目录

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/bash

echo "部署的目录和项目名称"
DIR="/data/app"
projectName="my-boot"

echo "待部署的应用服务器,可多台"
# 部署项目的ip 
server_ips="xxxxxxxx"
for server_ip in ${server_ips[@]}
do

echo "ssh连接进行备份操作"
ssh -Tq -oStrictHostKeyChecking=no root@${server_ip} <<EOF
mkdir -p $DIR/backup/${projectName}
mkdir -p $DIR/${projectName}
if [ -f "$DIR/${projectName}/${projectName}.jar" ];then
  mv $DIR/${projectName}/${projectName}.jar  $DIR/backup/${projectName}/${projectName}-`date "+%Y%m%d_%H%M%S"`.jar 
fi
EOF

echo "拷贝jar包到目标服务器的tmp目录"
scp -q -oStrictHostKeyChecking=no ${WORKSPACE}/target/*.jar root@${server_ip}:/tmp/${projectName}.jar

echo "ssh远程连接进行发布操作"
ssh -q -oStrictHostKeyChecking=no root@${server_ip} <<EOF
mv /tmp/${projectName}.jar $DIR/${projectName}/${projectName}.jar

EOF

done

echo "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 ]];then
        sleep 3
        tail -n 10 release_out.log
        sleep 5
        tail -n 50 release_out.log
fi
aaa=`grep "Started" release_out.log | awk '{print $1}'`
if [[ -n "${aaa}" ]];then
    echo "Application started ok"
    exit 0
else
    echo "Application started error"
    exit 1
fi

 10.4 关闭的脚本

#!/bin/bash

APP_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.coloradmin.cn/o/1952694.html

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

相关文章

[C++] vector入门迭代器失效问题详解

文章目录 vector介绍**vector iterator 的使用** vector迭代器失效问题由扩容或改变数据引起的迭代器失效reserve的实现&#xff08;野指针&#xff09;insert实现&#xff08;迭代器位置意义改变&#xff09;insert修改后失效的迭代器 it迭代器失效 erase后的问题总结&#xf…

代码随想录||day25 非递减子序列,全排列问题

491非递减子序列 力扣题目链接 题目描述&#xff1a; 给你一个整数数组 nums &#xff0c;找出并返回所有该数组中不同的递增子序列&#xff0c;递增子序列中 至少有两个元素 。你可以按 任意顺序 返回答案。 数组中可能含有重复元素&#xff0c;如出现两个整数相等&#x…

【C++】透析类和对象(下)

有不懂的可以翻阅我之前文章&#xff01; 个人主页&#xff1a;CSDN_小八哥向前冲 所属专栏&#xff1a;CSDN_C入门 目录 拷贝构造函数 运算符重载 赋值运算符重载 取地址运算符重载 const成员函数 取地址重载 再探构造函数 初始化列表 类型转换 static成员 友元 内…

LLMs之Llama 3.1:Llama 3.1的简介、安装和使用方法、案例应用之详细攻略

LLMs之Llama 3.1&#xff1a;Llama 3.1的简介、安装和使用方法、案例应用之详细攻略 导读&#xff1a;2024年7月23日&#xff0c;Meta重磅推出Llama 3.1。本篇文章主要提到了Meta推出的Llama 3.1自然语言生成模型。 背景和痛点 >> 过去开源的大型语言模型在能力和性能上一…

vmware虚拟机安装linux没有IP地址

直接设置固定IP 1、在虚拟机菜单栏选择编辑&#xff0c;然后点击虚拟网络编辑器 2、选择Vmnet8 Net网络连接方式&#xff0c;随意设置子网IP 3、点击NAT设置页面&#xff0c;查看子网掩码和网关&#xff0c;修改静态IP会用到 4、打开电脑控制面板–网络和Internet–网络连…

Visual Studio 智能代码插件:Fitten Code

Fitten Code 是由非十大模型驱动的AI编程助手&#xff0c;它可以自动生成代码&#xff0c;提升开发效率&#xff0c;协助调试 Bug&#xff0c;节省时间。还可以对话聊天&#xff0c;解决编程碰到的问题。 Fitten Code 免费且多种编程语言&#xff0c;包括 Python、C、Javascri…

【CG】计算机图形学(Computer Graphics)基础(其贰)

0 学习视频 B站GAMES101-现代计算机图形学入门-闫令琪 ※ 接上文【CG】计算机图形学&#xff08;Computer Graphics&#xff09;基础&#xff08;其壹&#xff09; 7 光线追踪 7.1 为什么需要光线追踪&#xff1f; 光栅化无法妥善处理全局效果 &#xff08;软&#xff09;阴…

sizeof和strlen区别

如图&#xff0c;sizeof来计算的时候&#xff0c;得出的是计算机用多少个字节来表示一个地址 而strlen来计算的时候&#xff0c;只是计算出他的有效字符长度 打印出的不同地址就是其不同的区别

数据中心同步指南 : 数据中心架构师和其他网络专家需要了解有关 5G 同步的知识

随着 5G 的推出&#xff0c;电信基础设施的设计方式正在发生巨大变化。由于网络运营商希望创建更开放的网络基础设施生态系统&#xff0c;部分基础设施&#xff08;如基带处理&#xff09;被虚拟化并移至电信数据中心。影响数据中心架构的另一个与 5G 相关的趋势是移动边缘计算…

20240727 每日AI必读资讯

&#x1f310;OpenAI向Google宣战&#xff0c;重磅推出AI搜索引擎SearchGPT &#xff01; - 将 AI 与实时网络信息结合 提供生成式UI结果 - SearchGPT 结合网络最新信息可以直接回答问题&#xff0c;同时注明相关来源链接。 - 还可以像与人对话一样提出后续问题&#xff0c;…

YOLOv8 改进 | 注意力机制 | 处理原始SE通道信息丢失问题的ESE【含分割,检测,OBByaml文件】

秋招面试专栏推荐 &#xff1a;深度学习算法工程师面试问题总结【百面算法工程师】——点击即可跳转 &#x1f4a1;&#x1f4a1;&#x1f4a1;本专栏所有程序均经过测试&#xff0c;可成功执行&#x1f4a1;&#x1f4a1;&#x1f4a1; 专栏目录 &#xff1a;《YOLOv8改进有效…

开放式耳机哪个品牌值得入手?五大年度黑马产品推荐

近几年开放式耳机获得了越来越多消费者的青睐&#xff0c;其中十分重要的原因就是&#xff0c;它能在不降低佩戴体验感的同时&#xff0c;让我们在不同的环境中尽情享受音乐。对于刚刚接触开放式耳机的朋友们来说&#xff0c;挑选一款在自己不踩雷的开放式耳机并非易事&#xf…

关于同一型号单片机使用不同版本的Keil5.pack包导致编译找不到对应.h问题

1.单片机型号:STM32G070CBTX 2.过程分析 拿到一个完整的工程&#xff0c;打开后编译报错&#xff0c;一些.h文件找不到&#xff0c;导致一些宏定义报错&#xff0c;如下图所示: 刚开始怀疑是安装的pack问题&#xff0c;又去ARM官网上下载最新的STM32G0xx_DFP.1.5.0版本的pack包…

吴恩达的TranslationAgent学习

TranslationAgent构成 整个[TranslationAgent (github.com)]在流程上分为短文本的一次性翻译和长文本的分chunk翻译&#xff08;按照Token进行划分&#xff09;。 但是不论长文本翻译还是短文本翻译&#xff0c;总体流程遵循执行、纠正再执行的逻辑循环实现。 这种按照自省思路…

Android ContentResolver.loadThumbnail转Kotlin

Android ContentResolver.loadThumbnail转Kotlin loadThumbnail原先是Java实现的&#xff0c;现在抠出来转Kotlin实现。 private fun loadThumbnail(uri: Uri, size: Size, signal: CancellationSignal): Bitmap {return myLoadThumbnail(mContext?.contentResolver!!, uri, s…

基于Qt的视频剪辑

在Qt中进行视频剪辑可以通过多种方式实现&#xff0c;但通常需要使用一些额外的库来处理视频数据。以下是一些常见的方法和步骤&#xff1a; 使用FFmpeg FFmpeg是一个非常强大的多媒体框架&#xff0c;可以用来处理视频和音频数据。你可以使用FFmpeg的命令行工具或者其库来实现…

Qemu和宿主机不使用外网进行文件传输

简介 目前Qemu虚拟机和宿主机交互&#xff0c;最方便的方式是进行网络传输&#xff0c;但也有不能使用外网的情况&#xff0c;这时候使用挂载是比较好的方式。 Linux使用 宿主机&#xff1a;Linux Qemu&#xff1a;Linux 传输方式&#xff1a;挂载 参考&#xff1a;在QEMU虚拟…

深圳市索迪迈科技有限公司:车载视频监控领域的精英

位于科技创新前沿的深圳市&#xff0c;索迪迈科技有限公司是一家专业从事车载视频监控设备研发、生产、销售的高新技术企业。公司自成立起&#xff0c;一直专注于车载设备领域的研发、生产、经营、服务一体化&#xff0c;为市场提供卓越的车载监控产品。 自主专业&#xff0c;专…

MySQL练习(4)

作业要求&#xff1a; 实现过程&#xff1a; 1.新建数据库 2.新建表 3.处理表 &#xff08;1&#xff09;修改student 表中年龄 (sage) 字段属性&#xff0c;数据类型由 int 改变为 smallint 。 &#xff08;2&#xff09;为 Course 表中 Cno 课程号字段设置索引,并查看索引。…