Skip to content

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包部署?

  1. 性能优势

    • 直接运行在宿主机JVM上,无额外开销
    • 直接使用宿主机资源,无虚拟化开销
    • 避免容器层带来的IO性能损耗
  2. 维护便利

    • 配置文件集中在JENKINS_HOME目录
    • 👍日志直接写入宿主机,便于收集和分析
    • 👍方便登录机器查看构建产物,DEBUG问题
    • 👍升级Jenkins版本时,备份数据,替换旧版本WAR包即可

3.4.2 最佳实践建议

  1. 标准化部署流程

    • 使用systemd管理Jenkins服务,确保开机自启动
    • 统一存储目录规范,建议使用/home/application/jenkins
    • 选择LTS版本的Jenkins War包,保证稳定性
  2. 备份策略

    • 定期备份JENKINS_HOME目录
    • 将备份文件存储在独立存储系统
    • 制定完整的备份恢复预案
  3. 监控方案

    • 配置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
最近更新

采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 运维小弟