Jenkins 使用入门教程

Jenkins 使用入门教程

一、Jenkins 环境准备

1.jdk

2.git

3.maven

二、JenKins 安装

Linux 安装 Jenkins 教程

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

Tip

执行 source /etc/profile 立刻生效

2.3 启动 jenkins
  • 将 jenkins.war 移动到 /usr/local/jenkins 路径下
shell 复制代码
mv jenkins.war /usr/local/jenkins
  • 配置运行参数执行
shell 复制代码
java -jar /usr/local/jenkins/jenkins.war  --httpPort=10001 -Djenkins.home=/usr/local/jenkins
  • 完整 demo
shell 复制代码
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 文件夹中,以获取更详细的错误信息。

成功启动

shell 复制代码
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 选择推荐方式安装插件
3.2 创建管理员

用户名: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
  • 同理配置 git 的安装路径 /usr/local/git/bin/git
  • 配置 maven 的安装路径 /usr/local/maven
  • 记得配置 mavensetting 文件路径 /usr/local/maven/conf/setting.xml
  • node 配置 (可选)

需要安装 Node.js 插件

3.4 ssh 密钥生成配置

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

可参考 Linux 配置 SSH 密钥教程

  • 生成ssh 密钥对

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

shell 复制代码
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 公钥
shell 复制代码
[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 > 凭据管理 > 添加凭据
  • 选择类型 SSH Username with private key > 范围选择 全局 (Jenkins,nodes,items,all child items,etc) >

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

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

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

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

  • 进入 系统管理 > 系统配置 选择新增 SSH Servers
  • 填写新增的服务器实例名称、IP、登录用户、密码、远程的根目录

Tip

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

四、测试部署

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

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

Tip

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

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

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

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

Tip

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

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

Tip

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

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

4.2 构建 node 项目

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

4.2.1 简单构建
  • 新增任务 > 选择 构建自由风格的软件项目 > 输入任务名称 > 完成创建
  • 源码管理中,添加项目git地址和SSH密码
  • 构建环境中,勾选 Provide Node ... 配置 Node
  • 构建前执行脚本,安装依赖并打包
shell 复制代码
echo ">>>>>>>>>>> 开始构建 >>>>>>>>>>>"
npm install
npm run build
zip -r dist.zip dist # 压缩
echo ">>>>>>>>>>> 构建完成 >>>>>>>>>>>"
4.2.2 复杂构建 (推送到指定远程服务器下)
  • 同简单构建一致、配置git地址和构建命令

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

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

五、安装插件

  • 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 新的目录
  • 进入 系统管理 > Manage and Assign Roles 目录下
6.2 创建管理员
  • 进入 系统管理 > 管理用户 创建新的管理员 tbbserver
6.3 配置权限
  • 普通用户未配置角色,是没有任何查看权限的
  • 进入 Manage and Assign Roles > Manage Roles 目录,在 Global roles 下创建 只读角色 base_read_role 勾选 全部 的 read 权限
  • 进入 Manage and Assign Roles > Assing Roles 目录,在 Global roles 下添加新的管理员用户 tbbserver 分配 base_read_role 角色
  • 配置可读角色之后,当前 tbbserver 用户,可以有部分目录查看权限。
  • 创建 Item roles 角色,给模糊匹配的任务,配置权限

常用模糊匹配规则:

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

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

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

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

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

^foo/bar.*					#匹配文件夹 
  • tbbserver 用户分配 item role 角色
  • 用户 tbbserver 可以查看到模糊匹配的任务列表

七、异常

  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 下载字体配置工具
shell 复制代码
# 执行命令
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缓存
shell 复制代码
npm cache clean --force
  • 禁用SSL
shell 复制代码
npm config set strict-ssl false
  • 修改镜像源
shell 复制代码
npm config set registry https://registry.npm.taobao.org/
npm config get registry
相关推荐
霍格沃兹测试开发学社测试人社区35 分钟前
如何利用 Jenkins 实现高效的邮件告警
运维·软件测试·测试开发·jenkins
花姐夫Jun2 小时前
基于CentOS的Docker + Nginx + Gitee + Jenkins部署总结
nginx·docker·centos·jenkins
大霞上仙2 小时前
jenkins入门
运维·jenkins
霍格沃兹测试开发学社测试人社区1 天前
Jenkins 环境安装与配置
运维·软件测试·测试开发·jenkins
.生产的驴1 天前
Docker 安装Elasticsearch搜索引擎 搜索优化 词库挂载 拼音分词 插件安装
运维·elasticsearch·搜索引擎·docker·性能优化·jenkins·推荐算法
测试也算程序员?2 天前
如何用jmeter工具进行性能测试
测试工具·jmeter·单元测试·jenkins·测试用例·压力测试·postman
优秀的颜2 天前
Jenkins(持续集成与自动化部署)
ci/cd·自动化·jenkins
我明天再来学Web渗透2 天前
【2024年-12月-18日-开源社区openEuler实践记录】openeuler - jenkins:开源项目持续集成与交付的幕后引擎
运维·开发语言·分布式·ci/cd·架构·开源·jenkins
limin3223 天前
Jenkins推送镜像到Nexus
运维·jenkins
若依-咬一口甜3 天前
DevOps流程CICD之Jenkins使用操作
jenkins·devops·ci·cd