主题
Jenkins 常规配置
一、Jenkins常规配置
1.1 系统配置
1.1.1 全局安全配置
1、
访问控制
CSRF Protection:防止跨站请求伪造攻击2、
代理兼容性
:配置Jenkins通过代理服务器访问,通常Jenkins使用一个TCP端口和JNLP节点代理通讯。3、
授权策略
默认是登录用户可以做任何事情;后面有说到基于RBAC的授权策略,这里先不介绍。具体的可以参考,Jenkins 插件章节的Role-Based Strategy
插件介绍4、
安全域
👍Jenkins数据库:使用Jenkins内置用户数据库LDAP:集成企业LDAP目录服务(需要安装插件后才能使用)
1.1.2 系统配置项
1、
系统消息
- 此消息将显示在 Jenkins 主页的顶部。这对于向用户发布通知非常有用2、
执行者数量
- 控制Jenkins可以同时运行的构建数量,建议:CPU核心数 * 23、
标签
- 标签为master,且只允许运行绑定到这台机器的Job4、
环境变量
- 全局环境变量设置5、
邮件通知
- SMTP服务器配置,发件人地址设置,邮件模板定制
TIP
默认的邮件发送功能不多,不展开说明,后续结合项目安装插件演示
1.2 全局工具配置
个人建议不要在Jenkins页面上配置安装,手动进入到机器上安装各种工具
1.2.1 安装openjdk
TIP
Jenkins 需要使用java17 及以上,但代码打包依赖jdk11,所以一台机器会同时安装多个jdk环境
bash
#安装openjdk-11.0.2
wget https://mirrors.nju.edu.cn/openjdk/11.0.2/openjdk-11.0.2_linux-x64_bin.tar.gz -O /home/application/openjdk-11.0.2_linux-x64_bin.tar.gz
tar -xf /home/application/openjdk-11.0.2_linux-x64_bin.tar.gz -C /home/application/ && rm -f /home/application/openjdk-11.0.2_linux-x64_bin.tar.gz
ls -l /home/application/jdk-11.0.2/
总用量 28
drwxr-xr-x 2 root root 4096 6月 4 15:16 bin
drwxr-xr-x 4 root root 4096 6月 4 15:16 conf
drwxr-xr-x 3 root root 4096 6月 4 15:16 include
drwxr-xr-x 2 root root 4096 6月 4 15:16 jmods
drwxr-xr-x 72 root root 4096 6月 4 15:16 legal
drwxr-xr-x 6 root root 4096 6月 4 15:16 lib
-rw-r--r-- 1 668 668 1214 1月 18 2019 release
#验证java
/home/application/jdk-11.0.2/bin/java --version
openjdk 11.0.2 2019-01-15
OpenJDK Runtime Environment 18.9 (build 11.0.2+9)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.2+9, mixed mode)
1.2.2 安装git
bash
yum install git
1.2.3 安装maven
TIP
Maven 3.9+ requires JDK 8 or above to execute. maven本地缓存目录: 默认为 ${user.home}/.m2/repository
- 配置阿里云Maven全局代理加速
bash
wget https://archive.apache.org/dist/maven/maven-3/3.9.9/binaries/apache-maven-3.9.9-bin.tar.gz
tar -xf apache-maven-3.9.9-bin.tar.gz -C /home/application && rm -rf apache-maven-3.9.9-bin.tar.gz
ls -l /home/application/apache-maven-3.9.9
总用量 48
drwxr-xr-x 2 root root 4096 6月 4 15:24 bin
drwxr-xr-x 2 root root 4096 6月 4 15:24 boot
drwxr-xr-x 3 root root 4096 8月 14 2024 conf
drwxr-xr-x 4 root root 4096 6月 4 15:24 lib
-rw-r--r-- 1 root root 18920 8月 14 2024 LICENSE
-rw-r--r-- 1 root root 5034 8月 14 2024 NOTICE
-rw-r--r-- 1 root root 1279 8月 14 2024 README.txt
bash
mkdir ~/.m2
touch ~/.m2/settings.xml
xml
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<mirrors>
<mirror>
<id>aliyunmaven</id>
<mirrorOf>*</mirrorOf>
<name>阿里云公共仓库</name>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
</mirrors>
</settings>
bash
cat >> /etc/profile << 'EOF'
#maven
export M2_HOME=/home/application/apache-maven-3.9.9
export PATH=$M2_HOME/bin:$PATH
EOF
#使配置生效
source /etc/profile
#验证
mvn -v
Apache Maven 3.9.9 (8e8579a9e76f7d015ee5ec7bfcdc97d260186937)
Maven home: /home/application/apache-maven-3.9.9
Java version: 17.0.2, vendor: Oracle Corporation, runtime: /home/application/jdk-17.0.2
Default locale: zh_CN, platform encoding: UTF-8
OS name: "linux", version: "5.10.0-209.0.0.117.oe2203sp3.x86_64", arch: "amd64", family: "unix"
TIP
如果想使用其它代理仓库,可在节点中加入对应的仓库使用地址。以使用spring代理仓为例
xml
<repository>
<id>spring</id>
<url>https://maven.aliyun.com/repository/spring</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
1.2.4 安装Nvn工具并配置Node.js /Yarn
TIP
在安装yarn 的时候,都需要先切换到Node.js,再安装yarn; yarn和Node.js版本关联
bash
wget https://github.com/nvm-sh/nvm/archive/refs/tags/v0.40.3.tar.gz
tar -xf v0.40.3.tar.gz -C /home/application && rm -rf v0.40.3.tar.gz
ls -l /home/application/nvm-0.40.3
总用量 288
-rw-rw-r-- 1 root root 2299 4月 24 07:34 bash_completion
-rw-rw-r-- 1 root root 7560 4月 24 07:34 CODE_OF_CONDUCT.md
-rw-rw-r-- 1 root root 5817 4月 24 07:34 CONTRIBUTING.md
-rw-rw-r-- 1 root root 3696 4月 24 07:34 Dockerfile
-rw-rw-r-- 1 root root 467 4月 24 07:34 GOVERNANCE.md
-rwxrwxr-x 1 root root 16631 4月 24 07:34 install.sh
-rw-rw-r-- 1 root root 1113 4月 24 07:34 LICENSE.md
-rw-rw-r-- 1 root root 5440 4月 24 07:34 Makefile
-rwxrwxr-x 1 root root 371 4月 24 07:34 nvm-exec
-rwxrwxr-x 1 root root 150227 4月 24 07:34 nvm.sh
-rw-rw-r-- 1 root root 2925 4月 24 07:34 package.json
-rw-rw-r-- 1 root root 2935 4月 24 07:34 PROJECT_CHARTER.md
-rw-rw-r-- 1 root root 50661 4月 24 07:34 README.md
-rwxrwxr-x 1 root root 1235 4月 24 07:34 rename_test.sh
-rw-rw-r-- 1 root root 882 4月 24 07:34 ROADMAP.md
drwxrwxr-x 11 root root 4096 4月 24 07:34 test
-rwxrwxr-x 1 root root 2478 4月 24 07:34 update_test_mocks.sh
bash
cat >> /etc/profile << 'EOF'
#nvm
. /home/application/nvm-0.40.3/nvm.sh
EOF
#使环境变量生效
source /etc/profile
bash
#nvm版本
nvm -v
0.40.3
#nvm版本列表
nvm ls-remote
#安装node-v18.20.8
nvm install v18.20.8
#安装node-v16.17.1
nvm install v16.17.1
#查看本地所有node版本
nvm ls
v18.20.8
-> v16.17.1
v22.16.0
#切换node版本
nvm use v18.20.8
#查看node版本
node -v
bash
npm config set registry https://registry.npmmirror.com
npm config get registry
https://registry.npmmirror.com
bash
npm install -g yarn
yarn config set registry https://registry.npmmirror.com
yarn -v
1.22.22
1.2.5 在Jenkins服务器上测试打包
- 前端代码库地址:https://gitee.com/log4j/pig-ui
- 后端代码库地址:https://gitee.com/log4j/pig
bash
#拉取代码
git clone https://gitee.com/log4j/pig-ui.git
cd pig-ui/
#安装依赖
npm install
#打包
npm run build
#查看打包结果
ls -l dist/
总用量 44
drwxr-xr-x 4 root root 12288 6月 4 16:20 assets
-rw-r--r-- 1 root root 4286 6月 4 16:19 favicon.ico
-rw-r--r-- 1 root root 14371 6月 4 16:20 index.html
-rw-r--r-- 1 root root 5080 6月 4 16:20 index.html.gz
bash
#拉取代码
git clone https://gitee.com/log4j/pig.git
cd pig
#打包
mvn clean package -Dmaven.test.skip=true
#查看打包结果
ls -l pig-*/target
pig-auth/target:
总用量 103160
drwxr-xr-x 5 root root 4096 6月 4 17:04 classes
drwxr-xr-x 3 root root 4096 6月 4 17:04 generated-sources
drwxr-xr-x 2 root root 4096 6月 4 17:04 maven-archiver
drwxr-xr-x 3 root root 4096 6月 4 17:04 maven-status
-rw-r--r-- 1 root root 105541653 6月 4 17:04 pig-auth.jar
-rw-r--r-- 1 root root 70314 6月 4 17:04 pig-auth.jar.original
pig-gateway/target:
总用量 69792
drwxr-xr-x 3 root root 4096 6月 4 17:04 classes
drwxr-xr-x 3 root root 4096 6月 4 17:04 generated-sources
drwxr-xr-x 2 root root 4096 6月 4 17:04 maven-archiver
drwxr-xr-x 3 root root 4096 6月 4 17:04 maven-status
-rw-r--r-- 1 root root 71431910 6月 4 17:04 pig-gateway.jar
-rw-r--r-- 1 root root 14463 6月 4 17:04 pig-gateway.jar.original
pig-register/target:
总用量 196408
drwxr-xr-x 3 root root 4096 6月 4 17:04 classes
drwxr-xr-x 3 root root 4096 6月 4 17:04 generated-sources
drwxr-xr-x 2 root root 4096 6月 4 17:04 maven-archiver
drwxr-xr-x 3 root root 4096 6月 4 17:04 maven-status
-rw-r--r-- 1 root root 201095558 6月 4 17:04 pig-register.jar
-rw-r--r-- 1 root root 5796 6月 4 17:04 pig-register.jar.original
1.3 凭据配置
1.3.1 查看凭据
系统管理
→ 凭证
系统管理
→ 凭据
→ 系统
→ 全局凭据
1.3.2 新建凭据
1.3.3 凭据类型
用户名和密码凭据
:用于存储用户名和密码,例如 Git、Subversion 或其他源代码管理工具的凭据。SSH 用户名和私钥凭据
:用于存储 SSH 用户名和私钥,例如 Git、Subversion 或其他源代码管理工具的凭据。证书凭据
:用于存储证书,例如 SSL 证书、SSH 证书等。Secret text
:用于存储敏感的文本信息,例如 API 密钥、密码等。Docker 凭据
:用于存储 Docker Hub 或其他 Docker 仓库的凭据。Kubernetes 配置文件
:用于存储 Kubernetes 集群的配置文件。
1.4 用户/授权管理
1.4.1 用户管理
TIP
Jenkins默认使用自带的数据库管理用户, 也可以通过安装插件实现LDAP、GitLab认证集成。
🦎Jenkins使用文件存储,在JENKINS_HOME/users目录中可以看到每个用户的配置
系统管理
→ 用户设置
查看到当前的用户列表;可以对用户新建、更新、删除。
1.4.2 基于RBAC模式的授权管理
TIP
需要使用到Role-based Authorization Strategy
插件
在日常Jenkins 使用过,不同的人员岗位对于JOB有不同的权限,比如开发人员只能看到JOB的构建内容,而不能进行构建、部署等操作。 而QA,SRE人员就可以操作所有的JOB,这时候就需要用到RBAC,即基于角色的访问控制。
RBAC 核心概念
- 角色(Role):定义一组权限的集合
- 用户(User):系统中的操作主体
- 绑定(Binding):将用户与角色关联
(1)、安装插件
系统管理
→ 管理插件
→ 可用插件
→ 输入Role-based Authorization Strategy
(2)、配置全局安全配置,指定授权策略为Role-Based Strategy
系统管理 → 系统配置 → 全局安全配置 → 授权策略
保存修改, 返回Jenkins系统设置页面,可以看到
Manage and Assign Roles
设置页面。
(3)、创建Role
- 进入
Manage and Assign Roles
设置, 选择Manage Roles
: - 创建
Gobal Role developer
:具有全局Read权限。 - 创建
item roles dev2025
: 使用正则表达式匹配关联的一组项目,匹配以dev2025-
开头且任意结尾的作业,任务读取权限。
(4)、分配Role
- 进入
Manage and Assign Roles
设置, 选择Assign Roles
:
(5)、预先创建好多个JOB,进行权限测试
(6)、切换到dev01用户下
- 只显示
dev2025
开头的项目,并且只有只读的权限。
(7)、切换到dev02用户下
- 未赋予用户
Global Role "read"
权限,报错。