Jenkins

Abstract

Jenkins

Authors

Walter Fan

Status

v1.0

Updated

2026-03-20

简介

Jenkins 是最流行的开源 CI/CD 自动化服务器,在 WebRTC 项目中可用于自动化构建、测试和部署。 WebRTC 项目的构建过程复杂且耗时,通过 Jenkins Pipeline 可以实现全自动化的持续集成流程。

Pipeline 配置

Jenkins Pipeline 使用 Groovy DSL 定义构建流程,支持 Declarative 和 Scripted 两种语法。 以下是一个 WebRTC 项目的典型 Pipeline 配置:

// Jenkinsfile - WebRTC 项目 CI Pipeline
pipeline {
  agent {
    label 'webrtc-builder'
  }

  environment {
    DEPOT_TOOLS = "${WORKSPACE}/depot_tools"
    PATH = "${DEPOT_TOOLS}:${PATH}"
  }

  options {
    timeout(time: 2, unit: 'HOURS')
    timestamps()
    buildDiscarder(logRotator(numToKeepStr: '10'))
  }

  stages {
    stage('Checkout') {
      steps {
        sh 'git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git'
        sh 'fetch --nohooks webrtc'
        sh 'gclient sync'
      }
    }

    stage('Build') {
      parallel {
        stage('Debug') {
          steps {
            sh 'gn gen out/Debug --args="is_debug=true"'
            sh 'ninja -C out/Debug'
          }
        }
        stage('Release') {
          steps {
            sh 'gn gen out/Release --args="is_debug=false is_component_build=false"'
            sh 'ninja -C out/Release'
          }
        }
      }
    }

    stage('Unit Test') {
      steps {
        sh './out/Release/rtc_unittests --gtest_output=xml:test_results.xml'
        sh './out/Release/modules_unittests --gtest_output=xml:modules_results.xml'
      }
      post {
        always {
          junit '*.xml'
        }
      }
    }

    stage('Archive') {
      steps {
        archiveArtifacts artifacts: 'out/Release/libwebrtc.a', fingerprint: true
      }
    }
  }

  post {
    failure {
      mail to: 'team@example.com',
           subject: "WebRTC Build Failed: ${env.JOB_NAME} #${env.BUILD_NUMBER}",
           body: "Check: ${env.BUILD_URL}"
    }
  }
}

WebRTC 构建自动化

WebRTC 使用 Google 的 depot_tools 工具链,构建系统为 GN + Ninja。 在 Jenkins 中自动化构建需要注意以下要点:

构建环境准备

# 安装构建依赖 (Ubuntu)
sudo apt-get install -y build-essential git python3 pkg-config
# WebRTC 自带的依赖安装脚本
./build/install-build-deps.sh

# GN 构建参数示例
gn gen out/Default --args='
  target_os="linux"
  target_cpu="x64"
  is_debug=false
  rtc_include_tests=true
  rtc_use_h264=true
  use_rtti=true
'

多平台构建

WebRTC 支持多平台,Jenkins 可以通过 Matrix 构建实现:

matrix {
  axes {
    axis {
      name 'PLATFORM'
      values 'linux', 'mac', 'windows', 'android', 'ios'
    }
  }
  stages {
    stage('Build') {
      agent { label "${PLATFORM}-builder" }
      steps {
        sh "gn gen out/${PLATFORM} --args='target_os=\"${PLATFORM}\"'"
        sh "ninja -C out/${PLATFORM}"
      }
    }
  }
}

测试集成

WebRTC 项目包含多种测试类型,都可以集成到 Jenkins Pipeline 中:

单元测试

# 主要的测试目标
./out/Release/rtc_unittests           # RTC 核心单元测试
./out/Release/modules_unittests       # 模块单元测试
./out/Release/video_engine_tests      # 视频引擎测试
./out/Release/audio_decoder_unittests # 音频解码器测试

集成测试

# 端到端音视频质量测试
./out/Release/video_quality_loopback_test
./out/Release/audio_quality_loopback_test

# 网络模拟测试 (使用 tc 模拟丢包、延迟)
./out/Release/webrtc_perf_tests

测试报告

Jenkins 可以通过插件展示测试结果:

  • JUnit Plugin: 解析 GTest 输出的 XML 报告

  • HTML Publisher: 展示代码覆盖率报告

  • Performance Plugin: 跟踪性能测试指标的趋势

post {
  always {
    junit 'out/Release/test_results/*.xml'
    publishHTML(target: [
      reportDir: 'out/Release/coverage',
      reportFiles: 'index.html',
      reportName: 'Code Coverage'
    ])
  }
}

常用 Jenkins 插件

  • Pipeline: 核心 Pipeline 支持

  • Git: Git 源码管理

  • Docker Pipeline: 在 Docker 容器中构建

  • Slack Notification: 构建结果通知

  • Artifactory: 构建产物管理

  • Blue Ocean: 现代化的 Pipeline 可视化界面

参考资料