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 选择推荐方式安装插件
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
- 记得配置 maven 的 setting 文件路径
/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"
生成密钥对
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
ssh-keygen
: 这是一个用于创建、管理和转换身份验证密钥的工具,经常用于 SSH 连接。-t rsa
: 这指定了要生成的密钥类型。在这里,你选择了 RSA 密钥。RSA 是一种常用的公钥加密算法,它生成一对密钥:一个公钥和一个私钥。公钥用于加密数据,私钥用于解密。-C "fox@qq.com"
: 这个选项允许你为密钥对添加一个注释(通常是一个电子邮件地址)。这在你拥有多个密钥对时特别有用,因为你可以通过这个注释来区分它们。在这里,你为密钥对添加了注释 “fox@qq.com”。-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
- 构建前执行脚本,安装依赖并打包
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
可以查看到模糊匹配的任务列表
七、异常
- 启动 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