jenkins部署
Jenkins是一款开源 CI&CD 软件,用于自动化各种任务,包括构建、测试和部署软件,满足任何项目的需要。它拥有庞大的社区支持,基于Java开发使其可以移植到所有主要平台,有超过1800个插件的丰富生态系统。
[TOC]
1.准备工作
- Jenkins服务器的示例配置如下:
地址:10.30.3.231
配置:不低于4C8G,建议8C32G
存储:建议100G系统盘 + 1T数据盘
1.1.安装jdk
- 安装 jdk 20.0.2,不得低于 Java 11 否则会报错
#.下载安装
mkdir -p /usr/local/java
curl -L http://iso.sqlfans.cn/jdk/openjdk-20.0.2_linux-x64_bin.tar.gz -o /opt/openjdk-20.0.2_linux-x64_bin.tar.gz
tar -zxf /opt/openjdk-20.0.2_linux-x64_bin.tar.gz -C /usr/local/java/
mv /usr/local/java/jdk-20.0.2 /usr/local/java/openjdk20
/usr/local/java/openjdk20/bin/java -version
注:以上操作只是解压最新的 java 版本到指定目录,并未配置java环境,主要是不想改动默认的java版本。
2.Jenkins安装部署
2.1.下载安装
- 安装 jenkins 2.414.1,为了不改动java环境,这里通过指定java版本来启动jar包
mkdir -p /data/jenkins
cd /data/jenkins
curl -sL http://iso.sqlfans.cn/linux/jenkins.2.414.1.war -o /data/jenkins/jenkins.war
nohup /usr/local/java/openjdk20/bin/java -jar /data/jenkins/jenkins.war --httpPort=8080 --enable-future-java > /data/jenkins/jenkins.log 2>&1 &
netstat -lnpt | grep 8080
3.Jenkins环境配置
3.1.解锁Jenkins
- 登录服务器,执行如下命令,复制验证码
cat /root/.jenkins/secrets/initialAdminPassword
- 浏览器打开jenkins控制台,粘贴验证码,解锁 Jenkins,并安装推荐的插件,最后创建第一个管理员账户,并开始使用Jenkins进入Jenkins后台
地址:http://10.30.3.231:8080
账号:jenkins
密码:Admin_147
3.2.自定义jenkins插件
3.2.1.修改插件下载地址
- 打开:http://10.30.3.231:8080/manage/pluginManager/advanced
- 找到
Update Site
输入https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
并点 Submit - 打开:http://10.30.3.231:8080/restart 选择 重启Jenkins
3.2.2.安装中文汉化插件
- 打开:http://10.30.3.231:8080/manage/pluginManager/available
- 搜索 Chinese 找到简体中文语言包的插件,然后勾选并点击右上角 Install 按钮
- 打开:http://10.30.3.231:8080/restart 选择 重启Jenkins
3.3.用户权限管理
3.3.1.安装用户认证插件
- 打开:http://10.30.3.231:8080/manage/pluginManager/available
- 搜索 Role-based Authorization Strategy 找到认证和用户管理的插件,然后勾选并点击右上角 Install 按钮
- 打开:http://10.30.3.231:8080/restart 选择 重启Jenkins
3.3.2.开启权限全局安全配置
- 打开:http://10.30.3.231:8080/manage/configureSecurity
- 找到
授权策略
选择Role-Based Strategy
并点击 保存
3.3.3.创建和管理角色
- 打开:http://10.30.3.231:8080/manage/role-strategy
- 建议添加如下3个角色,并应用
角色名称 | 类型 | 权限 | 描述 |
---|---|---|---|
baseRole | Global roles | Permission 选择 全部/Read |
全局角色,绑定Overall的Read权限,给所有用户绑定最基本的Jenkins访问权限 |
role1 | Item roles | Pattern 选择 demo.* |
项目角色,绑定 demo.* ,即只能操作demo开头的项目 |
role2 | Item roles | Pattern 选择 demo-cicd.* |
项目角色,绑定 demo-cicd.* ,即只能操作demo开头的项目 |
- 添加效果如下图示:
3.3.4.创建用户
- 打开:http://10.30.3.231:8080/manage/securityRealm
- 新建用户,比如
demoUser1
和demoUser2
3.3.5.给用户分配角色
- 打开:http://10.30.3.231:8080/manage/role-strategy/assign-roles
- 针对
Global roles
角色,添加2个示例用户,分配baseRole
这个最基本的只读角色,并应用 - 针对
Item roles
角色,添加2个示例用户,将demoUser1
添加到role1
角色中,将demoUser2
添加到role2
角色中,并应用
3.3.6.创建项目测试权限
- 以管理员账户创建两个项目,分别为
demo01
和demo-cicd01
- 测试场景1:使用
demoUser1
登录,根据role1
的正则匹配规则demo.*
能看到demo01和demo-cicd01项目 - 测试场景2:使用
demoUser2
登录,根据role2
的正则匹配规则demo-cicd.*
只能看到demo-cicd01项目
3.4.凭据管理
凭据可以用来存储需要密文保护的数据库密码、Gitlab密码信息、Docker私有仓库密码等,以便 Jenkins可以和这些第三方的应用进行交互。
3.4.1.安装凭据插件
- 打开:http://10.30.3.231:8080/manage/pluginManager/installed
- 搜索 Credentials Binding 确认该插件已安装 + 已启用
3.4.2.确认凭据类型
- 打开:http://10.30.3.231:8080/manage/credentials/store/system/domain/_/
- 点击 Add Credentials,确认类型有如下几种(常用
用户密码
及SSH密钥
):
Username with password:用户名和密码
SSH Username with private key:使用SSH用户和密钥
Github App:GitHub 应用进行身份验证现
Secret file:需要保密的文本文件,使用时Jenkins会将文件复制到一个临时目录中,再将文件路径设置到一个变量中,等构建结束后,所复制的Secret fifile就会被删除。
Secret text:需要保存的一个加密的文本串,如钉钉机器人或Github的api token
Certifificate:通过上传证书文件的方式
3.4.3.创建及测试凭据
此过程略...
3.5.安装Maven
此过程略...
3.6.安装tomcat
此过程略...
4.Jenkins服务器维护
4.1.管理url
- 关闭jenkins:http://10.30.3.231:8080/exit
- 重启jenkins:http://10.30.3.231:8080/restart
- 重新加载配置:http://10.30.3.231:8080/reload
4.2.配置LDAP作为用户认证
- 打开:http://10.30.3.231:8080/manage/configureSecurity
- 找到 安全域 选择 LDAP,修改如下域控信息(其他配置保持默认),配置完成后点击 应用,退出登录并使用任意域账号登陆成功即可(注:认证生效之后原有的jenkins账号就无法再登录了)
Server:填写企业内部域控服务器地址,比如 ldap://10.30.3.9:389
root DN:填写域控查询根目录号,比如 OU=jjkj_root,DC=jjkj,DC=tech
User search filter:填写用户搜索过滤器,比如 sAMAccountName={0}
Group membership:选择 "Parse user attribute for list of LDAP groups" \ memberOf
Manager DN:填写管理区分名,比如 CN=git_ad2,OU=jjkj_root,DC=jjkj,DC=tech
Manager Password:填写Manager DN配置的账号密码,即 jjkj.tech\jjkj_root\git_ad2 的密码
4.3.配置邮箱服务器发送构建结果
此过程略...
遇到的问题
场景1:如何彻底卸载 jenkins
cd /opt/
ps -ef |grep -i jenkins|grep -v grep|awk '{print $2}'| xargs kill -9 2> /dev/null
rm -rf /data/jenkins
rm -rf /root/.jenkins
场景2:首次打开Jenkins页面报错 Cannot load from short array
- 症状:首次打开Jenkins页面报错 Cannot load from short array
java.lang.NullPointerException: Cannot load from short array because "sun.awt.FontConfiguration.head" is null
- 原因:linux系统缺少相关字体导致,执行如下2行命令,并重启jenkins进程即可
yum install -y fontconfig
fc-cache --force
场景3:清理jenkins占用的空间
- 症状:jenkins服务器磁盘空间不足告警
[root@jenkins ~]# du -sh /home/admin/.jenkins/* | grep G
120G jobs
157G workspace
- 解决:参考如下方案
1.删除一些过期的任务、太老的依赖及模块
2.jenkins界面配置只保留最近的几次构建
场景4:jenkins页面报 502 Bad Gateway
- 症状:收到jenkins告警 502 Bad Gateway
- 分析:查看nginx配置发现 8080端口未监听
cat /etc/nginx/conf.d/jenkins.conf
- 解决:启动jenkins服务以监听8080端口
nohup java -jar /home/admin/jenkins/jenkins.war --httpPort=8080 --enable-future-java > /home/admin/jenkins/jenkins.log 2>&1 &