1. Jenkins概述与环境规划
Jenkins是一个开源的持续集成/持续部署(CI/CD)工具,提供了自动化构建、测试和部署的能力。Jenkins基于Java开发,支持丰富的插件生态系统,可与各种开发工具和服务集成。更多学习教程www.fgedu.net.cn
1.1 Jenkins版本说明
Jenkins目前主要版本为2.x系列,本教程以Jenkins 2.401.3为例进行详细讲解。Jenkins 2.x版本相比之前版本在性能、稳定性和功能方面都有显著提升,支持Pipeline流水线等高级特性。
$ java -jar jenkins.war –version
Jenkins 2.401.3
# 查看系统版本
$ cat /etc/os-release
NAME=”Oracle Linux Server”
VERSION=”8.9″
ID=”ol”
PRETTY_NAME=”Oracle Linux Server 8.9″
# 查看内核版本
$ uname -r
5.4.17-2136.302.7.2.el8uek.x86_64
# 查看Java版本
$ java -version
openjdk version “11.0.19” 2023-04-18 LTS
OpenJDK Runtime Environment (Red_Hat-11.0.19.0.7-1.0.1.el8_7)
OpenJDK 64-Bit Server VM (Red_Hat-11.0.19.0.7-1.0.1.el8_7, mixed mode, sharing)
1.2 环境规划
本次安装环境规划如下:
jenkins.fgedu.net.cn (192.168.1.80) – Jenkins主机
Jenkins版本:2.401.3
操作系统:Oracle Linux 8.9
Java版本:OpenJDK 11
安装目录:/data/jenkins
数据目录:/data/jenkins/home
端口:8080
2. 硬件环境要求
Jenkins作为CI/CD工具,对硬件资源要求根据构建任务的复杂度和并发度而定。学习交流加群风哥微信: itpux-com
2.1 物理主机环境要求
# free -h
total used free shared buff/cache available
Mem: 16G 4.2G 10G 256M 1.8G 11G
Swap: 8G 0B 8G
# 检查磁盘空间
# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 50G 12G 39G 24% /
/dev/sdb1 500G 50G 451G 10% /data
/dev/sdc1 200G 20G 181G 10% /backup
# 检查CPU核心数
# nproc
8
# 检查系统架构
# uname -m
x86_64
# 检查内核版本
# uname -r
5.4.17-2136.302.7.2.el8uek.x86_64
2.2 vSphere虚拟主机环境要求
– vCPU:4核
– 内存:16GB
– 磁盘:系统盘50GB + 数据盘300GB
– 网络:VMXNET3网卡,千兆网络
– 存储:建议使用SSD存储以提高I/O性能
资源池配置:
– CPU预留:2GHz
– 内存预留:8GB
– 内存限制:16GB
– CPU份额:正常
– 内存份额:正常
2.3 云平台主机环境要求
– 实例规格:ecs.g6.xlarge或同等规格
– vCPU:4核
– 内存:16GB
– 系统盘:高效云盘 100GB
– 数据盘:SSD云盘 300GB
– 网络带宽:5Mbps以上
存储配置:
– OSS对象存储:用于存储构建产物
– NAS文件存储:用于共享构建资源
– 云盘快照:定期备份Jenkins数据
3. 操作系统环境准备
在安装Jenkins之前,需要对操作系统进行必要的配置和优化。
3.1 操作系统版本检查
# cat /etc/os-release
NAME=”Oracle Linux Server”
VERSION=”8.9″
ID=”ol”
PRETTY_NAME=”Oracle Linux Server 8.9″
# 检查内核版本
# uname -r
5.4.17-2136.302.7.2.el8uek.x86_64
# 检查SELinux状态
# getenforce
Enforcing
# 检查防火墙状态
# systemctl status firewalld
● firewalld.service – firewalld – dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
Active: active (running)
3.2 依赖服务安装
# yum install -y java-11-openjdk-devel
# 安装Git
# yum install -y git
# 安装Maven
# yum install -y maven
# 安装Docker
# yum install -y yum-utils device-mapper-persistent-data lvm2
# yum-config-manager –add-repo https://download.docker.com/linux/centos/docker-ce.repo
# yum install -y docker-ce docker-ce-cli containerd.io
# systemctl start docker
# systemctl enable docker
# 验证依赖安装
# java -version
openjdk version “11.0.19” 2023-04-18 LTS
# git –version
git version 2.39.3
# mvn –version
Apache Maven 3.8.8
# docker –version
Docker version 20.10.24, build 297e128
3.3 防火墙配置
# firewall-cmd –permanent –add-port=8080/tcp
# firewall-cmd –permanent –add-port=50000/tcp
# firewall-cmd –reload
# 验证防火墙规则
# firewall-cmd –list-all
public
target: default
icmp-block-inversion: no
interfaces:
sources:
services: ssh dhcpv6-client
ports: 8080/tcp 50000/tcp
protocols:
forward: yes
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
4. Jenkins安装配置
完成环境准备后,开始安装Jenkins。
4.1 安装Jenkins
# cd /data
# wget https://get.jenkins.io/war/2.401.3/jenkins.war
# 创建Jenkins目录
# mkdir -p /data/jenkins/home
# 创建Jenkins服务文件
# vi /etc/systemd/system/jenkins.service
[Unit]
Description=Jenkins Continuous Integration Server
After=network.target
[Service]
User=root
ExecStart=/usr/bin/java -jar /data/jenkins/jenkins.war –httpPort=8080 –home=/data/jenkins/home
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
# 启动Jenkins服务
# systemctl start jenkins
# systemctl enable jenkins
# 验证服务状态
# systemctl status jenkins
● jenkins.service – Jenkins Continuous Integration Server
Loaded: loaded (/etc/systemd/system/jenkins.service; enabled; vendor preset: disabled)
Active: active (running) since Fri 2024-04-05 10:00:00 CST; 1min ago
Main PID: 12345 (java)
Tasks: 40
Memory: 1.2G
CGroup: /system.slice/jenkins.service
└─12345 /usr/bin/java -jar /data/jenkins/jenkins.war –httpPort=8080 –home=/data/jenkins/home
# 查看Jenkins日志
# journalctl -u jenkins -f
4.2 初始化Jenkins
# cat /data/jenkins/home/secrets/initialAdminPassword
1234567890abcdef1234567890abcdef
# 访问Jenkins Web UI
# 打开浏览器访问 http://jenkins.fgedu.net.cn:8080
# 输入初始管理员密码
# 选择安装推荐插件
# 创建管理员用户
# 配置Jenkins URL
# 完成初始化
4.3 验证安装
# java -jar /data/jenkins/jenkins.war –version
Jenkins 2.401.3
# 访问Jenkins Web UI
# 打开浏览器访问 http://jenkins.fgedu.net.cn:8080
# 验证Jenkins状态
# curl -s http://localhost:8080/api/json | jq ‘.mode’
“NORMAL”
5. Jenkins配置优化
为了提高Jenkins的性能和稳定性,需要进行一些配置优化。
5.1 系统配置优化
# vi /etc/systemd/system/jenkins.service
[Service]
User=root
ExecStart=/usr/bin/java -Xms2G -Xmx4G -XX:MaxMetaspaceSize=512M -XX:+UseG1GC -jar /data/jenkins/jenkins.war –httpPort=8080 –home=/data/jenkins/home
Restart=always
RestartSec=10
# 重启Jenkins服务
# systemctl daemon-reload
# systemctl restart jenkins
# 验证配置
# systemctl status jenkins
5.2 安全配置
# 1. 进入”管理 Jenkins” -> “全局安全配置”
# 2. 选择”Jenkins专有用户数据库”
# 3. 启用”登录用户可以做任何事”
# 4. 保存配置
# 配置SSH密钥
# 生成SSH密钥
# ssh-keygen -t rsa -b 4096 -C “jenkins@fgedu.net.cn”
# 将公钥添加到Git仓库
# cat ~/.ssh/id_rsa.pub
5.3 代理配置
# 1. 进入”管理 Jenkins” -> “插件管理” -> “高级”
# 2. 配置HTTP代理
# 3. 保存配置
# 验证代理配置
# 测试连接
6. Jenkins任务管理
本节介绍Jenkins任务的基本管理操作。
6.1 创建任务
# 1. 点击”新建任务”
# 2. 输入任务名称
# 3. 选择”自由风格的软件项目”
# 4. 配置任务
# 5. 保存配置
# 配置Git源码管理
# 1. 在任务配置中选择”Git”
# 2. 输入仓库URL
# 3. 选择凭据
# 4. 配置分支
# 配置构建步骤
# 1. 选择”执行shell”
# 2. 输入构建命令
# 3. 保存配置
6.2 管理任务
# 在Jenkins Web UI中点击”立即构建”
# 查看构建历史
# 在任务页面查看构建历史
# 查看构建日志
# 点击构建编号查看构建日志
# 取消构建
# 在构建页面点击”取消构建”
# 删除任务
# 在任务页面点击”删除项目”
6.3 任务配置示例
# 1. 选择”执行shell”
# 2. 输入以下命令
mvn clean package -DskipTests
# 构建产物归档
# 1. 选择”归档 artifacts”
# 2. 输入归档路径: target/*.jar
# 邮件通知
# 1. 选择”邮件通知”
# 2. 输入收件人邮箱
# 3. 配置通知条件
7. Jenkins插件管理
Jenkins通过插件扩展功能,本节介绍插件的管理操作。
7.1 安装插件
# 1. 进入”管理 Jenkins” -> “插件管理”
# 2. 选择”可用插件”
# 3. 搜索并选择插件
# 4. 点击”直接安装”
# 推荐插件
– Git
– Maven Integration
– Pipeline
– Docker
– Blue Ocean
– Email Extension
– Credentials Binding
– SSH Agent
– SonarQube Scanner
7.2 更新插件
# 1. 进入”管理 Jenkins” -> “插件管理”
# 2. 选择”可更新”
# 3. 选择插件
# 4. 点击”更新”
# 验证插件状态
# 进入”已安装”标签页查看插件状态
7.3 卸载插件
# 1. 进入”管理 Jenkins” -> “插件管理”
# 2. 选择”已安装”
# 3. 选择插件
# 4. 点击”卸载”
# 验证插件状态
# 进入”已安装”标签页确认插件已卸载
8. Jenkins Pipeline配置
Jenkins Pipeline是Jenkins 2.x的核心功能,支持声明式和脚本式两种语法。
8.1 声明式Pipeline配置
# 1. 点击”新建任务”
# 2. 输入任务名称
# 3. 选择”Pipeline”
# 4. 配置Pipeline
# 声明式Pipeline示例
pipeline {
agent any
stages {
stage(‘Checkout’) {
steps {
git branch: ‘main’, url: ‘https://github.com/fgedu/demo-project.git’
}
}
stage(‘Build’) {
steps {
sh ‘mvn clean package -DskipTests’
}
}
stage(‘Test’) {
steps {
sh ‘mvn test’
}
}
stage(‘Deploy’) {
steps {
sh ‘echo “Deploying application…”‘
}
}
}
post {
success {
echo ‘Build succeeded!’
}
failure {
echo ‘Build failed!’
}
}
}
8.2 脚本式Pipeline配置
node {
stage(‘Checkout’) {
git branch: ‘main’, url: ‘https://github.com/fgedu/demo-project.git’
}
stage(‘Build’) {
sh ‘mvn clean package -DskipTests’
}
stage(‘Test’) {
sh ‘mvn test’
}
stage(‘Deploy’) {
sh ‘echo “Deploying application…”‘
}
}
8.3 Pipeline参数化
# 1. 在任务配置中选择”此项目是参数化的”
# 2. 添加参数
# 3. 在Pipeline中使用参数
# 参数化Pipeline示例
pipeline {
agent any
parameters {
string(name: ‘BRANCH’, defaultValue: ‘main’, description: ‘Git branch to build’)
choice(name: ‘ENVIRONMENT’, choices: [‘dev’, ‘test’, ‘prod’], description: ‘Deployment environment’)
}
stages {
stage(‘Checkout’) {
steps {
git branch: params.BRANCH, url: ‘https://github.com/fgedu/demo-project.git’
}
}
stage(‘Build’) {
steps {
sh ‘mvn clean package -DskipTests’
}
}
stage(‘Deploy’) {
steps {
sh “echo ‘Deploying to ${params.ENVIRONMENT} environment…'”
}
}
}
}
9. Jenkins性能优化
在生产环境中,需要对Jenkins进行性能优化以提高构建效率。from:www.itpux.com
9.1 内存配置优化
# vi /etc/systemd/system/jenkins.service
[Service]
User=root
ExecStart=/usr/bin/java -Xms4G -Xmx8G -XX:MaxMetaspaceSize=1G -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -jar /data/jenkins/jenkins.war –httpPort=8080 –home=/data/jenkins/home
Restart=always
RestartSec=10
# 重启Jenkins服务
# systemctl daemon-reload
# systemctl restart jenkins
# 验证配置
# systemctl status jenkins
9.2 构建执行器配置
# 1. 进入”管理 Jenkins” -> “系统配置”
# 2. 配置”# of executors”
# 3. 保存配置
# 推荐配置
– 小型服务器:2-4个执行器
– 中型服务器:4-8个执行器
– 大型服务器:8-16个执行器
9.3 缓存配置
# 在Jenkins Web UI中配置Maven
# 1. 进入”管理 Jenkins” -> “全局工具配置”
# 2. 配置Maven安装
# 3. 配置Maven本地仓库
# 配置Docker缓存
# 在Jenkins Web UI中配置Docker
# 1. 进入”管理 Jenkins” -> “系统配置”
# 2. 配置Docker服务
# 3. 启用Docker层缓存
10. Jenkins升级迁移
本节介绍Jenkins的版本升级和数据迁移方法。
10.1 Jenkins版本升级
# cp -r /data/jenkins/home /backup/jenkins_home_$(date +%Y%m%d)
# 下载新版本Jenkins
# cd /data
# wget https://get.jenkins.io/war/2.401.4/jenkins.war
# 停止Jenkins服务
# systemctl stop jenkins
# 替换Jenkins war文件
# mv jenkins.war /data/jenkins/
# 启动Jenkins服务
# systemctl start jenkins
# 验证升级
# java -jar /data/jenkins/jenkins.war –version
Jenkins 2.401.4
# 访问Jenkins Web UI
# 打开浏览器访问 http://jenkins.fgedu.net.cn:8080
10.2 Jenkins配置迁移
# cp -r /data/jenkins/home /backup/jenkins_home_export
# 在新服务器上导入配置
# cp -r /backup/jenkins_home_export /data/jenkins/home
# 启动Jenkins服务
# systemctl start jenkins
# 验证配置
# java -jar /data/jenkins/jenkins.war –version
11. Jenkins备份恢复
本节介绍Jenkins的备份和恢复方法。
11.1 Jenkins备份
# systemctl stop jenkins
# 备份Jenkins数据
# cp -r /data/jenkins/home /backup/jenkins_home_$(date +%Y%m%d)
# 启动Jenkins服务
# systemctl start jenkins
# 验证备份
# ls -la /backup/
11.2 Jenkins恢复
# systemctl stop jenkins
# 恢复Jenkins数据
# rm -rf /data/jenkins/home
# cp -r /backup/jenkins_home_20240405 /data/jenkins/home
# 启动Jenkins服务
# systemctl start jenkins
# 验证恢复
# systemctl status jenkins
# 打开浏览器访问 http://jenkins.fgedu.net.cn:8080
11.3 Jenkins监控脚本
# vi /data/jenkins/scripts/jenkins_monitor.sh
#!/bin/bash
LOG_FILE=”/var/log/jenkins_monitor.log”
ALERT_EMAIL=”admin@fgedu.net.cn”
check_jenkins_status() {
echo “$(date): Checking jenkins status…” >> $LOG_FILE
status=$(systemctl status jenkins | grep -o “Active: active”)
if [ “$status” = “Active: active” ]; then
echo “$(date): Jenkins status: OK” >> $LOG_FILE
else
echo “$(date): Jenkins status: FAILED” >> $LOG_FILE
echo “Jenkins service failed” | mail -s “Jenkins Alert” $ALERT_EMAIL
fi
}
check_jenkins_web() {
echo “$(date): Checking jenkins web…” >> $LOG_FILE
status=$(curl -s -o /dev/null -w “%{http_code}” http://localhost:8080)
if [ “$status” = “200” ]; then
echo “$(date): Jenkins web: OK” >> $LOG_FILE
else
echo “$(date): Jenkins web: FAILED” >> $LOG_FILE
echo “Jenkins web failed” | mail -s “Jenkins Alert” $ALERT_EMAIL
fi
}
check_disk_usage() {
echo “$(date): Checking disk usage…” >> $LOG_FILE
usage=$(df -h /data | awk ‘NR==2 {print $5}’ | sed ‘s/%//’)
echo “$(date): Disk usage: $usage%” >> $LOG_FILE
if [ “$usage” -gt “80” ]; then
echo “$(date): Disk usage too high: $usage%” >> $LOG_FILE
echo “Disk usage too high: $usage%” | mail -s “Jenkins Alert” $ALERT_EMAIL
fi
}
main() {
check_jenkins_status
check_jenkins_web
check_disk_usage
}
main
# 添加执行权限
# chmod +x /data/jenkins/scripts/jenkins_monitor.sh
# 添加定时任务
# crontab -e
*/15 * * * * /data/jenkins/scripts/jenkins_monitor.sh
通过以上步骤,Jenkins安装配置、性能优化、升级迁移、备份恢复等内容已全部完成。Jenkins作为CI/CD工具,能够高效地自动化构建、测试和部署流程,是DevOps实践的重要组成部分。
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
