当前位置: 首页 > article >正文

Jenkins 使用入门教程

Jenkins 使用入门教程

一、Jenkins 环境准备

1.jdk

2.git

3.maven

二、JenKins 安装

Linux 安装 Jenkins 教程

2.1 使用 war 安装
  • jenkins官网下载 war 包,上传到服务器
2.2 创建工作目录,设置环境变量
  • 创建 /usr/local/jenkins 工作目录
mkdir /usr/local/jenkins
  • /etc/profile 文件中,新增 jenkins的环境变量
export JENKINS_HOME=/usr/local/jenkins

Tip

执行 source /etc/profile 立刻生效

2.3 启动 jenkins
  • 将 jenkins.war 移动到 /usr/local/jenkins 路径下
mv jenkins.war /usr/local/jenkins
  • 配置运行参数执行
java -jar /usr/local/jenkins/jenkins.war  --httpPort=10001 -Djenkins.home=/usr/local/jenkins
  • 完整 demo
java -jar jenkins.war --httpPort=10001 -Djenkins.install.runSetupWizard=false -Djenkins.model.Jenkins.slaveAgentPort=50000 -Djenkins.home=/path/to/your/jenkins_home -Xrs /path/to/your/config.xml

Tip

  • --httpPort=8080 指定 Jenkins 使用的 HTTP 端口。
  • -Djenkins.install.runSetupWizard=false 禁止在启动时运行设置向导。
  • -Djenkins.model.Jenkins.slaveAgentPort=50000 指定 Jenkins Agent 使用的端口(你可以根据需要更改这个端口号)。
  • -Djenkins.home=/path/to/your/jenkins_home 指定 Jenkins 的工作目录(即 Jenkins 主目录)。
  • -Xrs /path/to/your/config.xml 指定 Jenkins 的配置文件路径。

请确保将 /path/to/your/jenkins_home 替换为你的 Jenkins 工作目录的实际路径,将 /path/to/your/config.xml 替换为你的配置文件的实际路径。

如果你想要禁用 AJP13 协议,你可以完全忽略 --ajp13Port 参数,因为 Jenkins 默认不会启用它。

最后,如果你在运行 Jenkins 时遇到任何错误,请检查 Jenkins 的日志文件,通常位于 Jenkins 工作目录下的 logs 文件夹中,以获取更详细的错误信息。

成功启动

2024-03-18 02:50:43.688+0000 [id=34]	INFO	jenkins.install.SetupWizard#init: 

*************************************************************
*************************************************************
*************************************************************

Jenkins initial setup is required. An admin user has been created and a password generated.
Please use the following password to proceed to installation:

321942d4982d4d4ea9981d9c5b7fdfc5

This may also be found at: /usr/local/jenkins/secrets/initialAdminPassword

*************************************************************
*************************************************************
*************************************************************

Tip

阿里云安全组开放端口 10001,防火墙也需要开放端口 10001

三、JenKins 初始化

3.1 选择推荐方式安装插件

image-20240318113516176

3.2 创建管理员

image-20240318114220926

用户名:jenkins

密码:jenkins213465

全名:fox_jenkins

邮箱:xxxx@qq.com

3.3 全局工具配置

登录 jenkins

进入 Manage Jenkins > Tools 路径下,配置 jdk、git、maven 在服务器上的安装路径

  • jdk 配置,如果安装了不同版本的jdk,可以添加多个jdk,路径填写jdk安装路径 /usr/local/jdk1.8.0_202

image-20240318134710094

  • 同理配置 git 的安装路径 /usr/local/git/bin/git

image-20240322161110110

  • 配置 maven 的安装路径 /usr/local/maven

image-20240318134918834

  • 记得配置 mavensetting 文件路径 /usr/local/maven/conf/setting.xml

image-20240318135215395

  • node 配置 (可选)

需要安装 Node.js 插件

image-20240422093715912

3.4 ssh 密钥生成配置

我们gitlab、gitee、github 上拉取代码是需要凭证的,比如用户名密码或SSH秘钥验证。这边采用的秘钥验证方式,所以需要配置秘钥的凭证才能去gitlab、gitee、github上拉取对应代码

可参考 Linux 配置 SSH 密钥教程

  • 生成ssh 密钥对

.ssh 密钥对 目录一般位于 /root/.ssh 路径下,使用 ssh-keygen -t rsa -C "fox@qq.com" 生成密钥对

ssh-keygen -t rsa -C "fox@qq.com"

# -f 指定生成文件名称
ssh-keygen -t rsa -f xxx_rsa  -C "xxx"

ssh-keygen -t rsa -f git_rsa  -C "fox@qq.com"
  • 查看 ssh 公钥
[root@linux-1 .ssh]# cat id_rsa.pub 
ssh-rsa AAAAB3NzaC1yAABAQC7gbTbLz6n+K4A2V8E3Bdzku8ePytzTtb0McF20lkaqVSioBOR0CB8OgGiokLSJE2qCkRk3zTpIfvByJorJGYYIl8e8XbBFWCcfXZURVzqC2cH1ld4OG8DZMNkNbY6dlpHz1m4TUvqetxT87rgQh1ggHQSYB8DCxpjfIWscxXlVkBsZswDHB4cfOOPuIGF8O+APu1rgterYB1+a2jsGGMyJQKkkVL5N/wvF3B fox@qq.com

Tip

  1. ssh-keygen: 这是一个用于创建、管理和转换身份验证密钥的工具,经常用于 SSH 连接。
  2. -t rsa: 这指定了要生成的密钥类型。在这里,你选择了 RSA 密钥。RSA 是一种常用的公钥加密算法,它生成一对密钥:一个公钥和一个私钥。公钥用于加密数据,私钥用于解密。
  3. -C "fox@qq.com": 这个选项允许你为密钥对添加一个注释(通常是一个电子邮件地址)。这在你拥有多个密钥对时特别有用,因为你可以通过这个注释来区分它们。在这里,你为密钥对添加了注释 “fox@qq.com”。
  4. -f "xxx_rsa": 指定生成的文件名称
3.5 配置全局凭据 (SSH)
3.5.1 配置全局SSH
  • 进入 Dashboard > 凭据管理 > 添加凭据

image-20240322162055572

  • 选择类型 SSH Username with private key > 范围选择 全局 (Jenkins,nodes,items,all child items,etc) >

Username 填写创建 SSH密钥的 Linux 用户 (这里填 root),Private Key 填写 SSH 私钥

image-20240322162329806

进入 Manage Jenkins > 凭据管理 > 添加凭据 > SSH

  • 选择 SSH 类型,填写SSH的私钥即可完成
3.6 系统配置 (远程服务器)

配置远程服务器,项目打包之后,可以推送到指定的远程服务器上

  • 进入 系统管理 > 系统配置 选择新增 SSH Servers

image-20240419092552692

  • 填写新增的服务器实例名称、IP、登录用户、密码、远程的根目录

image-20241231103229405

Tip

这里使用远程服务器的用户和密码的方式,登录连接到远程服务器。指定远程服务器的基础目录,这里为 /即远程用户的主目录,如果有指定目录比如 /test , 那么在配置任务,指定当前远程服务器时,会自动在填写的路径上,加上 /test 前缀路径。

四、测试部署

4.1 构建 maven 项目
4.1.1 简单构建
  • 新增任务 > 选择 构建maven项目 > 输入任务名称 > 完成创建

image-20240322163610278

  • 进入 新建的maven 任务的 configuration 页面

选择项目使用的JDK版本(全局工具配置jdk),填写仓库git地址,使用的SSH的私钥(全局凭证配置SSH私钥),选择拉取的git分支

image-20240322164003842

Tip

这里需要部署 jenkins 的服务器,信任名单 ssh -T git@gitee.com,不让,无法拉取git项目源码

image-20240322163459320

执行项目编译打包的命令 clean package -U -Dmaven.test.skip=true

image-20240322164645161

  • 配置完成,构建任务
4.1.2 复杂构建 (推送jar 到指定远程服务器下)
  • 同简单构建一致、配置git地址和构建命令

  • Post Steps 步骤下,选择 Run regardless of build result 下的 Send files or execute commands over SSH

image-20240419094713473

Tip

项目完成编译打包之后,可以推送到指定的远程服务器上,然后并执行远程服务器脚本,重启服务

  • 指定远程服务器,勾选 Verbose output in console (将远程服务器上脚本执行等输出,打印到jenkins,方便查看),选择推送的源文件、上传的远程服务器目录、以及上传完成之后,需要执行远程服务器的命令或者脚本。

image-20241231103445528

Tip

指定远程服务器,指定上传的源文件为当前任务编译打包之后的jar文件,移除到 target 前缀,并上传到远程服务器的指定目录下,(如果在配置远程服务器时,有配置基础目录,这里会自动加上前缀),最后再执行远程服务器的命令或者脚本。

Tip

修改maven的setting配置文件的镜像,改为阿里云镜像或者其他国内镜像,提高下载依赖的速度

4.2 构建 node 项目

需要安装node.js 插件,并在全局工具配置中进行配置

4.2.1 简单构建
  • 新增任务 > 选择 构建自由风格的软件项目 > 输入任务名称 > 完成创建

image-20240422094024770

  • 源码管理中,添加项目git地址和SSH密码

image-20240422094329332

  • 构建环境中,勾选 Provide Node … 配置 Node

image-20240422095133211

  • 构建前执行脚本,安装依赖并打包
echo ">>>>>>>>>>> 开始构建 >>>>>>>>>>>"
npm install
npm run build
zip -r dist.zip dist # 压缩
echo ">>>>>>>>>>> 构建完成 >>>>>>>>>>>"

image-20240422094624639

4.2.2 复杂构建 (推送到指定远程服务器下)
  • 同简单构建一致、配置git地址和构建命令

  • Post Steps 步骤下,选择 Run regardless of build result 下的 Send files or execute commands over SSH

  • 指定远程服务器,勾选 Verbose output in console (将远程服务器上脚本执行等输出,打印到jenkins,方便查看),选择推送的源文件、上传的远程服务器目录、以及上传完成之后,需要执行远程服务器的命令或者脚本。

image-20241231103547555

五、安装插件

  • maven integration plugin

安装构建maven项目的插件

  • Publish Over SSH

推送部署包到其他服务器

  • Role-based Authorization Strategy

角色权限分配

  • node js

安装node js 插件

  • Android Emulator

安卓SDK 插件

  • PreSCM Steps

六、用户权限角色管理

安装 Role-based Authorization Strategy 插件,需要重启 Jenkins

6.1 安装权限授权插件
  • 进入 系统管理 > 全局安全配置 目录下 ,授权策略 选择 Role-Based Startegy,保存之后,系统管理下会出现Manage and Assign Roles 新的目录

image-20240419111037608

  • 进入 系统管理 > Manage and Assign Roles 目录下

image-20240419103615234

6.2 创建管理员
  • 进入 系统管理 > 管理用户 创建新的管理员 tbbserver

image-20240419111558714

6.3 配置权限
  • 普通用户未配置角色,是没有任何查看权限的

image-20240419111528728

  • 进入 Manage and Assign Roles > Manage Roles 目录,在 Global roles 下创建 只读角色 base_read_role 勾选 全部 的 read 权限

image-20240419112134980

  • 进入 Manage and Assign Roles > Assing Roles 目录,在 Global roles 下添加新的管理员用户 tbbserver 分配 base_read_role 角色

image-20240419112202167

  • 配置可读角色之后,当前 tbbserver 用户,可以有部分目录查看权限。

image-20240419112446087

  • 创建 Item roles 角色,给模糊匹配的任务,配置权限

常用模糊匹配规则:

cpp-.*				#将匹配名称以cpp-开头的所有job

^git_.*feature_.*	#以git_开头,中间任意字符,feature_后面跟任意字符

"^upgrade_(aa|bb)_.*"		#(aa|bb)可以匹配aa或者bb

(dev.*|test.*)				#匹配dev.*或者test.*

(?!)cpp-.*					#不区分大小写

^foo/bar.*					#匹配文件夹 

image-20240419142745145

  • tbbserver 用户分配 item role 角色

image-20240419142935036

  • 用户 tbbserver 可以查看到模糊匹配的任务列表

image-20240419143025200

七、异常

  1. 启动 jenkins.war 报错 Fontconfig head is null 表示字体配置的头信息为空
java.lang.RuntimeException: Fontconfig head is null, check your fonts or fonts configuration
	at java.desktop/sun.awt.FontConfiguration.getVersion(FontConfiguration.java:1269)
	at java.desktop/sun.awt.FontConfiguration.readFontConfigFile(FontConfiguration.java:224)
	at java.desktop/sun.awt.FontConfiguration.init(FontConfiguration.java:106)
	at java.desktop/sun.awt.X11FontManager.createFontConfiguration(X11FontManager.java:706)
	at java.desktop/sun.font.SunFontManager$2.run(SunFontManager.java:358)
	at java.desktop/sun.font.SunFontManager$2.run(SunFontManager.java:315)
	at java.base/java.security.AccessController.doPrivileged(AccessController.java:318)
	at java.desktop/sun.font.SunFontManager.<init>(SunFontManager.java:315)
	at java.desktop/sun.awt.FcFontManager.<init>(FcFontManager.java:35)
	at java.desktop/sun.awt.X11FontManager.<init>(X11FontManager.java:56)

解决方法

  • 执行 yum install fontconfig 下载字体配置工具
# 执行命令
yum install fontconfig
# 生成配置文件
/etc/fonts/fonts.conf

2.node js的证书过期异常

+ npm install
npm ERR! code CERT_HAS_EXPIRED
npm ERR! errno CERT_HAS_EXPIRED
npm ERR! request to https://registry.npm.taobao.org/vue-loader failed, reason: certificate has expired

npm ERR! A complete log of this run can be found in:
npm ERR!     /root/.npm/_logs/2024-04-22T01_12_49_446Z-debug.log
Build step 'Execute shell' marked build as failure

解决办法

  • 清除npm缓存
npm cache clean --force
  • 禁用SSL
npm config set strict-ssl false
  • 修改镜像源
npm config set registry https://registry.npm.taobao.org/
npm config get registry

http://www.kler.cn/a/460417.html

相关文章:

  • 物联网开发利器:基于web的强大的可拖拽组态软件
  • xdoj校验和
  • 深入浅出:Spring Boot 自定义消息转换器的实现与应用
  • 家政上门小程序如何创建?家政服务怎么能少了小程序帮手
  • 利用多GPU,推理transformer模型,避免显存溢出
  • 深入解析Android JNI:以Visualizer为例
  • 聊天机器人Rasa面试内容整理-Rasa 是什么?
  • VR动感单车身心调适系统产品特点
  • YK人工智能(三)——万字长文学会torch深度学习
  • vue3中开发一个不定高的虚拟滚动组件
  • SpringBoot + Thymeleaf + Bootstrap5 整合 MyBatis-Plus 和 MySQL 实现动态分类标签渲染教程
  • 郑州时空-TMS运输管理系统 GetDataBase 信息泄露漏洞复现
  • 深信服云桌面系统的终端安全准入设置
  • JavaWeb开发(三)Servlet技术-手动、自动创建Servlet
  • Elasticsearch-搜索推荐:Suggest
  • 记一次 .NET某汗液测试机系统 崩溃分析
  • HTML5 开关(Toggle Switch)详细讲解
  • 如何将联系人从 iPhone 转移到华为 [4 种方法]
  • 【SQLi_Labs】Basic Challenges
  • 网络游戏之害
  • 智能工厂的设计软件 应用场景的一个例子:为AI聊天工具添加一个知识系统 之9 重新开始 之2
  • 半导体数据分析: 玩转WM-811K Wafermap 数据集(一) AI 机器学习
  • 机器学习DAY9:聚类(K-means、近邻传播算法、谱聚类、凝聚聚类、兰德指数、调整互信息、V−mearure、轮廓系数)
  • Python爬虫入门实例:Python7个爬虫小案例(附源码)
  • 解锁节日季应用广告变现潜力,提升应用广告收入
  • Flink读写Kafka(DataStream API)