主题
Jenkins核心部署流程

一、Jenkins介绍
1.1 Jenkins是什么
Jenkins 是一个开源的自动化服务器,主要用于持续集成和持续部署(CI/CD)。 它由Java编写,因此它可以在Windows、Linux和macOS等大多数操作系统上运行。 Jenkins 提供了一个易于使用的web界面,通过插件支持来扩展其功能,使得它可以与各种流行的开发工具和技术无缝集成,比如Git、Maven、Docker等。
1.2 Jenkins功能
持续集成(CI)
:Jenkins 可以监控版本控制系统中的变化,并自动进行构建、测试,确保代码的质量和稳定性。这有助于开发团队更快地发现和解决问题。持续部署(CD)
:当代码通过所有测试后,Jenkins 可以自动部署到一台或多台服务器上,实现从代码提交到产品交付的自动化流程。工作流定制和编排
:Jenkins 支持 Pipeline 语法,允许用户定义和实现复杂的构建、测试和部署流程。插件扩展
:Jenkins 拥有庞大的插件生态,可以通过安装插件来扩展其功能,满足不同用户的需求。Master-Slave架构
:Jenkins 支持 Master-Slave 架构,Master 负责调度构建任务,Slave 负责执行这些任务。这种架构允许分布式构建,提高了资源利用率和构建效率。
1.3 Jenkins使用场景
自动化测试
:自动执行单元测试、集成测试等,快速反馈测试结果。编译和构建
:自动化编译和构建过程,保障代码的可构建性和一致性。部署应用
:自动将应用部署到开发、测试或生产环境,加快交付速度。环境管理
:自动化管理(如创建、销毁)开发和测试环境,提高资源使用效率。任务调度
:定时执行特定任务,如数据库备份、清理日志等。
1.4 Jenkins特点
开源免费
:Jenkins是一个开源软件,并且免费提供给用户使用。可扩展性
:Jenkins提供了丰富的插件和扩展,可以满足各种不同的需求。易于安装和部署
:Jenkins可以在多种操作系统上运行,例如Windows、Linux、MacOS等,安装和部署都非常简单。支持多种版本控制系统
:Jenkins支持多种版本控制系统,例如Git、SVN、Mercurial等。支持多种构建工具
:Jenkins支持多种构建工具,例如Maven、Gradle、Ant等。可视化界面
:Jenkins提供了可视化的界面,用户可以方便地查看和管理各种任务和构建。自动化构建和测试
:Jenkins可以自动化构建和测试代码,可以大大提高开发效率和代码质量。支持分布式构建
:Jenkins支持分布式构建,可以将任务分配给多个节点进行并行构建,提高构建速度。支持持续集成和持续交付
:Jenkins支持持续集成和持续交付,可以将代码快速地交付给用户,提高软件交付速度。
二、Jenkins发展
- Hudson阶段:
TIP
Jenkins最初是从Hudson项目分支出来的。Hudson是一个由Sun公司开发的持续集成工具,Jenkins最初是作为Hudson的一个分支项目开始的。在这个阶段,Jenkins社区的开发者主要是对Hudson进行改进和优化,添加新的功能和修复漏洞,Jenkins逐渐成为了一个独立的项目。
- 社区化阶段:
TIP
随着Jenkins的发展,越来越多的开发者加入到Jenkins社区中,贡献代码、提供支持和分享经验,Jenkins逐渐成为了一个真正的开源项目。在这个阶段,Jenkins社区的开发者开始着重关注用户体验和易用性,提供更加友好的界面和更加易用的功能。
- 插件化阶段:
TIP
Jenkins提供了丰富的插件和扩展,可以满足各种不同的需求,这也是Jenkins最大的优势之一。在这个阶段,Jenkins社区的开发者开始着重关注可扩展性和灵活性,提供更加丰富的插件和扩展,让用户可以根据自己的需求自由地选择和组合插件。
- Pipeline阶段:
TIP
Jenkins Pipeline是Jenkins 2.0中新增的功能,它提供了一种新的方式来定义持续交付流程,可以更加灵活地构建复杂的持续交付流程。在这个阶段,Jenkins社区的开发者开始着重关注持续交付流程的可视化和自动化,提供更加灵活和可定制的持续交付流程,让用户可以更加轻松地构建和管理复杂的持续交付流程。
- Cloud Native阶段:
TIP
Jenkins Pipeline是Jenkins 2.Jenkins X是Jenkins社区推出的一个新项目,它是一个专门用于云原生应用的持续交付工具,可以帮助开发者快速地构建、测试和部署云原生应用。在这个阶段,Jenkins社区的开发者开始着重关注云原生应用的持续交付,提供更加专业和高效的持续交付解决方案,让用户可以更加轻松地构建和管理云原生应用的交付流程。
三、Jenkins安装
3.1 下载jenkins
Jenkins提供了多种部署方式,用户可以根据自己的需求选择合适的版本:
- 官方网站下载:访问 Jenkins官网 下载最新版本
- 版本选择:
LTS版本
:长期支持版本,稳定性好,建议生产环境使用Weekly版本
:每周更新版本,包含最新特性,适合开发测试环境
3.2 Jenkins推荐配置
TIP
运行Jenkins需要选择适当的Java版本
DANGER
- 数据盘挂载到
/home/application
目录下。 JENKINS_HOME
定义在/home/application/jenkins
目录下 | 默认是在 /root/.jenkins 目录下。
3.3 Jenkins常见几种部署方式
3.3.1 基于Linux系统
这里Linux系统指的是: OpenEuler 22.03 LTS SP4
bash
# 添加Jenkins源
wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io-2023.key
# 安装openjdk21
yum install fontconfig java-21-openjdk
# 安装Jenkins
yum install jenkins
# 创建jenkins工作目录,并授权目前权限
mkdir -p /home/application/jenkins
chown -R jenkins:jenkins /home/application/jenkins
# 修改jenkins 配置文件,定义JENKINS_HOME
sed -i \
-e 's|^Environment="JENKINS_HOME=/var/lib/jenkins"|Environment="JENKINS_HOME=/home/application/jenkins"|' \
-e 's|^WorkingDirectory=/var/lib/jenkins|WorkingDirectory=/home/application/jenkins|' \
/usr/lib/systemd/system/jenkins.service
# 启动Jenkins服务
systemctl daemon-reload
systemctl enable jenkins
systemctl start jenkins
# 查看Jenkins服务状态
ps -ef | grep jenkins
jenkins 2712534 1 57 12:22 ? 00:00:31 /usr/bin/java -Djava.awt.headless=true -jar /usr/share/java/jenkins.war --webroot=/var/cache/jenkins/war --httpPort=8080
root 2712768 2696925 0 12:23 pts/0 00:00:00 grep --color=auto jenkins
netstat -ntlup | grep 8080
tcp6 0 0 :::8080 :::* LISTEN 2712534/java
3.3.2 基于War包部署,jdk方式
bash
# 安装openjdk17
wget https://mirrors.nju.edu.cn/openjdk/17.0.2/openjdk-17.0.2_linux-x64_bin.tar.gz
# 解压jdk17
tar -zxvf openjdk-17.0.2_linux-x64_bin.tar.gz -C /home/application/
# 删除压缩包
rm -rf openjdk-17.0.2_linux-x64_bin.tar.gz
# 配置环境变量
cat >> /etc/profile << 'EOF'
export JAVA_HOME=/home/application/jdk-17.0.2
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib
EOF
source /etc/profile
# 验证jdk
java -version
openjdk version "17.0.2" 2022-01-18
OpenJDK Runtime Environment (build 17.0.2+8-86)
OpenJDK 64-Bit Server VM (build 17.0.2+8-86, mixed mode, sharing)
# 创建jenkins工作目录
mkdir -p /home/application/jenkins
# 下载Jenkins LTS 最新war包,2.504.2
wget https://mirrors.nju.edu.cn/jenkins/war-stable/2.504.2/jenkins.war
mv jenkins.war /home/application/jenkins/jenkins.war
# 使用systemd管理jenkins
cat > /etc/systemd/system/jenkins.service <<'EOF'
[Unit]
Description=Jenkins
After=network.target
[Service]
User=root
Environment="JENKINS_HOME=/home/application/jenkins"
ExecStart=/home/application/jdk-17.0.2/bin/java -jar /home/application/jenkins/jenkins.war -Djava.awt.headless=true --httpPort=8080
Restart=always
RestartSec=3
[Install]
WantedBy=multi-user.target
EOF
# 启动Jenkins服务
systemctl daemon-reload
systemctl enable jenkins
systemctl start jenkins
# 查看Jenkins服务状态
ps -ef | grep jenkins
root 2714521 1 96 14:15 ? 00:00:34 /home/application/jdk-17.0.2/bin/java -jar /home/application/jenkins/jenkins.war -Djava.awt.headless=true --httpPort=8080
root 2714741 2697017 0 14:16 pts/1 00:00:00 grep --color=auto jenkins
netstat -ntlup | grep 8080
tcp6 0 0 :::8080 :::* LISTEN 2714521/java
3.3.3 基于Docker 容器部署方式
bash
# 安装docker【安装过程省略,可参考https://doc.srebro.cn/home/docker/docker-install】
# 创建docker 网络
docker network create jenkins
# 创建jenkins工作目录
mkdir -p /home/application/jenkins
# 运行Jenkins容器
docker run -itd \
--name jenkins \
--restart always \
--privileged \
--network jenkins \
-u root \
-p 8080:8080 \
-p 50000:50000 \
-e TZ=Asia/Shanghai \
-v /usr/bin/docker:/usr/bin/docker \
-v /usr/bin/docker-compose:/usr/bin/docker-compose \
-v /home/application/jenkins:/var/jenkins_home \
-v /var/run/docker.sock:/var/run/docker.sock \
jenkins/jenkins:2.504.2-lts-jdk17
3.4 推荐使用宿主机,War包部署方式
TIP
以下是三种部署方式的对比分析:
部署方式 | 优点 | 缺点 | 适用场景 |
---|---|---|---|
RPM/DEB包部署 | • 系统级安装,便于管理 • 自动处理依赖关系 • 系统服务集成度高 | • 版本更新受限于包管理器 • 配置文件分散在系统各处 • 不同Linux发行版需要不同包 | 标准化的生产环境, 需要系统级集成 |
Docker容器部署 | • 环境隔离性好 • 快速部署和迁移 • 版本管理方便 | • 需要维护容器环境 • 存在容器网络开销 • 宿主机资源利用率较低 • 数据持久化问题 | 开发测试环境, 需要快速部署和清理 |
War包部署(推荐👍) | • 完全可控的JVM环境 • 直接访问系统资源,性能最优 • 配置集中,便于管理 • 最小化依赖,稳定性好 • 升级方便,只需替换war包 • 便于问题排查和性能调优 | • 需要手动安装JDK • 初始部署步骤相对较多 | 生产环境, 对性能和稳定性要求高 |
3.4.1 为什么宿主机,War包部署?
性能优势
- 直接运行在宿主机JVM上,无额外开销
- 直接使用宿主机资源,无虚拟化开销
- 避免容器层带来的IO性能损耗
维护便利
- 配置文件集中在JENKINS_HOME目录
- 👍日志直接写入宿主机,便于收集和分析
- 👍方便登录机器查看构建产物,DEBUG问题
- 👍升级Jenkins版本时,备份数据,替换旧版本WAR包即可
3.4.2 最佳实践建议
标准化部署流程
- 使用systemd管理Jenkins服务,确保开机自启动
- 统一存储目录规范,建议使用
/home/application/jenkins
- 选择LTS版本的Jenkins War包,保证稳定性
备份策略
- 定期备份JENKINS_HOME目录
- 将备份文件存储在独立存储系统
- 制定完整的备份恢复预案
监控方案
- 配置JMX监控,实时掌握JVM状态
- 使用Prometheus + Grafana构建监控面板
- 设置关键指标告警阈值,比如构建耗时、JVM内存使用情况等
TIP
使用War包部署方式不仅简化了Jenkins的运维工作,还为后续的性能优化和问题排查提供了最大的灵活性。特别是在大规模CI
四、配置Jenkins
4.1 登录jenkins平台
- Jenkins启动之后,可以看到端口监听在 8080,浏览器访问如下:
TIP
查看
/home/application/jenkins/secrets/initialAdminPassword
文件,获取初始密码,输入密码登录
4.2 安装推荐插件
- 选择 安装jenkins社区推荐的插件;安装过程可能会有点问题; 如果实在安装不下去,可以跳过,等进入到jenkins 设置代理地址即可
4.3 创建管理员账户并完成初始化设置
五、使用Nginx反向代理访问Jenkins
5.1 安装Nginx
INFO
安装Nginx过程省略,安装详情见:https://doc.srebro.cn/home/openeuler/nginx
5.2 配置Nginx配置文件
bash
server {
listen 443 ssl;
server_name jenkins.srebro.cn; ##替换成自己的域名
error_page 404 /404/404.html;
charset utf-8;
ssl_certificate /home/application/nginx/cert/srebro.cn.pem;
ssl_certificate_key /home/application/nginx/cert/srebro.cn.key;
ssl_session_cache shared:SSL:1m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://172.22.33.201:8080;
client_max_body_size 200m;
proxy_set_header Host $host;
proxy_set_header X-real-ip $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
}
}
5.3 配置Jenkins URL
TIP
"指定安装Jenkins的HTTP地址,这个值用来在邮件中生产Jenkins链接.
- 配置路径为——>
ManageJenkins
——>System
——>Jenkins URL