温馨提示×

如何在Linux完美搭建Jenkins

小樊
35
2026-01-08 14:42:21
栏目: 智能运维

Linux 上搭建高可用、可维护的 Jenkins 最佳实践


一 环境与前置准备

  • 系统建议:CentOS 7+/Ubuntu 20.04+,推荐资源配置 2 核 4G 以上(生产可上 4 核 8G+),使用 SSD 提升 I/O。
  • 安装 Java 11(Jenkins 2.357+ 要求 Java 11,推荐 OpenJDK 11):
    • CentOS
      • 命令:yum install -y java-11-openjdk java-11-openjdk-devel
      • 验证:java -version
    • Ubuntu
      • 命令:apt update && apt install -y openjdk-11-jdk openjdk-11-jre
      • 验证:java -version
  • 开放端口:默认 8080/TCP(如启用防火墙需放行)。

二 安装与初始化

  • 方式 A RPM/DEB 官方源(推荐)
    • CentOS
      • 添加源与密钥:
        • 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
      • 安装与启动:
        • yum install -y jenkins
        • systemctl start jenkins && systemctl enable jenkins
        • systemctl status jenkins
    • Ubuntu
      • 添加密钥与源:
        • wget -q -O - https://pkg.jenkins.io/debian-stable/jenkins.io-2023.key | gpg --dearmor -o /usr/share/keyrings/jenkins-keyring.gpg
        • echo "deb [signed-by=/usr/share/keyrings/jenkins-keyring.gpg] https://pkg.jenkins.io/debian-stable binary/" | tee /etc/apt/sources.list.d/jenkins.list > /devref
      • 安装与启动:
        • apt update && apt install -y jenkins
        • systemctl start jenkins && systemctl enable jenkins
        • systemctl status jenkins
  • 方式 B 通用 WAR 包(适合容器/离线)
    • 下载:wget https://get.jenkins.io/war-stable/latest/jenkins.war
    • 启动:nohup java -jar /opt/jenkins.war --httpPort=8080 >/var/log/jenkins.log 2>&1 &
  • 防火墙放行
    • firewalld:firewall-cmd --add-port=8080/tcp --permanent && firewall-cmd --reload
    • ufw:ufw allow 8080/tcp && ufw enable
  • 初始化
    • 访问:http://服务器IP:8080
    • 解锁:查看初始密码 cat /var/lib/jenkins/secrets/initialAdminPassword
    • 插件:选择 Install suggested plugins
    • 创建管理员用户与 Jenkins URL

三 安全加固与反向代理 HTTPS

  • 反向代理 + HTTPS(Nginx 示例)
    • 安装:apt install -y nginxyum install -y nginx
    • 站点配置(/etc/nginx/conf.d/jenkins.conf):
      server {
        listen 80;
        server_name jenkins.example.com;
        return 301 https://$host$request_uri;
      }
      server {
        listen 443 ssl http2;
        server_name jenkins.example.com;
      
        ssl_certificate /etc/letsencrypt/live/jenkins.example.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/jenkins.example.com/privkey.pem;
      
        location / {
          proxy_pass http://127.0.0.1:8080;
          proxy_set_header Host $host;
          proxy_set_header X-Real-IP $remote_addr;
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
          proxy_set_header X-Forwarded-Proto $scheme;
        }
      }
      
    • 重载:systemctl reload nginx
    • 在 Jenkins 管理界面设置 Jenkins URLhttps://jenkins.example.com
  • 安全要点
    • 启用 CSRF 保护(默认开启,勿随意关闭)
    • 使用 角色/权限矩阵 或外部认证(如 LDAP)
    • 凭据使用 Credentials Binding 插件集中管理
    • 定期更新 Jenkins 与插件,最小化安装插件。

四 核心配置与第一个流水线

  • 全局工具
    • Manage Jenkins → Global Tool Configuration:指定 JDK 11GitMaven(或自动安装)
  • 创建 Pipeline
    • 新建任务 → 选择 Pipeline → 在 “Pipeline” 配置选择 Pipeline script from SCM
    • SCM:选择 Git,填写仓库地址(如 https://gitee.com/xxx/xxx.git
    • 凭证:添加 用户名/密码SSH 密钥
    • 分支:如 */main;Jenkinsfile 路径:默认 Jenkinsfile
  • 示例 Jenkinsfile(声明式)
    pipeline {
      agent any
      tools { maven 'Maven 3.8' } // 与全局工具中名称一致
      environment {
        PROJECT_DIR = '/var/jenkins/workspace/${JOB_NAME}'
      }
      stages {
        stage('Checkout') {
          steps { git url: 'https://gitee.com/xxx/xxx.git', branch: 'main' }
        }
        stage('Build') {
          steps { sh 'mvn -B -DskipTests clean package' }
        }
        stage('Archive') {
          steps { archiveArtifacts artifacts: 'target/*.jar', fingerprint: true }
        }
      }
      post {
        success { echo 'Build SUCCESS' }
        failure { echo 'Build FAILURE' }
      }
    }
    
  • 触发方式
    • 轮询 SCM:triggers { pollSCM('* * * * *') }
    • 更佳实践:在代码托管平台配置 WebHook 触发(需 CSRF 兼容与代理转发头正确)。

五 性能优化与运维实践

  • JVM 与系统
    • 调整堆内存(示例):JAVA_OPTS="-Xms512m -Xmx2048m"(systemd 服务可在 /etc/default/jenkinsjenkins.serviceEnvironment= 中设置)
    • 资源规划:生产建议 4 核 8G+SSD、控制并发构建数
  • 插件与更新
    • 国内镜像加速插件下载(任选其一)
      • 插件中心 Advanced 的 Update Site 改为:https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
      • 或替换 /var/lib/jenkins/updates/default.json 中的下载域名
    • 定期清理未使用插件与历史构建
  • 日志与排错
    • 查看日志:journalctl -u jenkins -ftail -f /var/log/jenkins.log
    • 常见问题
      • 启动失败:检查 Java 版本、端口占用、目录权限
      • 插件安装慢/失败:切换 国内镜像
      • 权限问题:确保 jenkins 用户对工作空间/部署目录有读写权限
  • 高可用与扩展
    • 主从架构:配置 Agent/Slave 节点,分布式构建
    • 监控与告警:对接 Prometheus + Grafana,定期分析日志
    • 备份恢复:定期备份 $JENKINS_HOME(含 jobs、plugins、credentials 等)。

0