温馨提示×

如何在Debian上配置Jenkins多分支构建

小樊
39
2025-12-14 22:52:42
栏目: 智能运维

在 Debian 上配置 Jenkins 多分支构建

一 环境准备与安装

  • 安装 Java 11(Jenkins 官方推荐 LTS 搭配 JDK 11):
    • 执行:sudo apt update && sudo apt install -y openjdk-11-jdk
  • 添加 Jenkins 官方仓库 并安装:
    • 执行:
      wget -q -O - https://pkg.jenkins.io/debian-stable/jenkins.io.key | sudo apt-key add -
      echo "deb https://pkg.jenkins.io/debian-stable binary/" | sudo tee /etc/apt/sources.list.d/jenkins.list > /dev/null
      sudo apt update && sudo apt install -y jenkins
      
  • 启动并设置开机自启:
    • 执行:sudo systemctl enable --now jenkins
  • 解锁与初始化:
    • 访问:http://<服务器IP>:8080
    • 初始管理员密码:sudo cat /var/lib/jenkins/secrets/initialAdminPassword
    • 按向导完成插件安装与管理员创建。

二 安装必要插件

  • Manage Jenkins → Manage Plugins 安装:
    • Pipeline(流水线核心)
    • Branch API(分支 API)
    • Git pluginGitHub Integration(或 GitLab 插件)
    • Pipeline: Multibranch(多分支流水线)
    • 可选:Blue Ocean(可视化流水线)
    • 可选(按场景):Docker PipelinePublish Over SSH(构建后发布/部署)

三 创建多分支流水线

  • 新建任务:选择 Multibranch Pipeline
  • 配置源码管理:
    • 选择 Git,填写仓库 URLCredentials(建议使用 SSH 或 Personal Access Token)
    • 指定 Jenkinsfile 路径(默认为根目录的 Jenkinsfile
  • 分支发现与扫描:
    • 选择分支发现策略(如 Discover all branches
    • 可设置 构建配置规则(按分支名过滤,如只构建 main/developfeature/
  • 触发器(推荐即时触发):
    • 勾选 Scan by webhook trigger(安装 Multibranch Scan Webhook Trigger 插件后可见),后续在代码托管平台配置 Webhook 即可按需触发扫描与构建
  • 保存后执行首次扫描,Jenkins 会为每个包含 Jenkinsfile 的分支自动创建子任务。

四 配置 Webhook 实现即时构建

  • 方式一(推荐):使用 Multibranch Scan Webhook Trigger
    • 在 Multibranch 项目配置中启用 Scan Multibranch Pipeline Triggers,生成 Webhook 调用地址(形如:https://<IP>/multibranch-webhook-trigger/invoke?token=<TOKEN>
    • GitHub/Gitee/GitLab 项目 Webhook 中配置该 URL 与可选 token,事件选择 Push events / Pull Request events
    • 推送代码或创建 PR 时将自动触发对应分支的扫描与构建
  • 方式二:使用 Generic Webhook Trigger(更灵活)
    • Jenkinsfiletriggers 中声明:
      triggers {
        GenericTrigger(
          causeString: 'Triggered by $ref',
          genericVariables: [[key: 'ref', value: '$.ref']],
          regexpFilterExpression: '^refs/heads/(main|develop|release/.*)$',
          regexpFilterText: '$ref',
          token: 'mytoken'
        )
      }
      
    • 托管平台 Webhook 指向:https://<IP>/generic-webhook-trigger/invoke?token=mytoken
    • 注意:首次把 triggers 写入 Jenkinsfile 后,需触发一次变更使 Jenkins 拉取新配置,之后即可按规则触发。

五 示例 Jenkinsfile 与常见问题

  • 示例 Jenkinsfile(按分支执行不同部署策略)
    pipeline {
      agent any
      parameters {
        booleanParam(name: 'DEPLOY_TO_PROD', defaultValue: false, description: 'Deploy to production?')
      }
      environment {
        ARTIFACT = 'target/app.jar'
      }
      stages {
        stage('Checkout') {
          steps {
            checkout scm
          }
        }
        stage('Build') {
          steps {
            sh 'mvn -B -DskipTests clean package'
          }
        }
        stage('Deploy to Test') {
          when { expression { !params.DEPLOY_TO_PROD } }
          steps {
            sh './deploy.sh test'
          }
        }
        stage('Deploy to Prod') {
          when { expression { params.DEPLOY_TO_PROD } }
          steps {
            input '确认部署到生产环境?'
            sh './deploy.sh prod'
          }
        }
      }
      post {
        success { echo 'Build and deploy succeeded.' }
        failure { echo 'Build or deploy failed.' }
      }
    }
    
  • 常见问题与排查
    • 分支未被发现:确认分支根目录存在 Jenkinsfile,分支过滤规则未排除该分支
    • Webhook 未触发:检查托管平台 Payload URLContent typeSecret/Token 与网络连通性(必要时放行 8080/50000 端口)
    • 首次添加 triggers 未触发:提交一次变更以让 Jenkins 拉取新 Jenkinsfile
    • 权限问题:确保 Jenkins 用户对工作空间与部署目标具备读写/执行权限
    • 构建后进程被杀死:在启动脚本前设置环境变量 export BUILD_ID=dontKillMe(适用于后台常驻进程场景)。

0