摘要

Jenkins 是最流行的开源 CI/CD 工具之一,广泛用于自动化软件构建、测试和部署。然而,由于其配置复杂插件众多,许多企业在落地 Jenkins 时面临挑战。本指南将详细讲解 Jenkins 的安装、Pipeline 配置、Agent 管理、插件扩展,并演示如何与 Kubernetes、Docker 集成,构建高效的自动化部署流程。

为什么选择 Jenkins?

Jenkins 拥有:

  • 强大的 CI/CD 能力:支持多种构建工具(Maven、Gradle)、测试框架(JUnit、Selenium)。
  • 丰富的插件生态:集成 Git、Docker、Kubernetes、Ansible 等。
  • 支持分布式构建:通过 Jenkins Agent 可扩展计算资源。

企业落地 Jenkins 面临的挑战

  • 安装 & 配置复杂:需要手动配置 Agent、Credentials、Pipeline。
  • 插件管理困难:企业环境通常依赖多个插件,管理不当易导致兼容性问题。
  • 云原生集成难度高:传统 Jenkins 需要手动管理构建环境,与 Kubernetes、Docker 集成需要额外配置。

本指南将解决以上痛点,帮助企业高效落地 Jenkins

Jenkins 安装与基础配置

在 Linux 服务器安装 Jenkins

安装 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.key
yum install jenkins -y
systemctl enable jenkins
systemctl start jenkins

访问 Jenkins

Jenkins 默认运行在 http://<服务器IP>:8080,初次访问时,需要输入管理员密码:

cat /var/lib/jenkins/secrets/initialAdminPassword

安装推荐插件

  • Pipeline(用于声明式流水线)
  • Blue Ocean(可视化 Pipeline)
  • Git Plugin(支持 Git 版本控制)
  • Docker Plugin(支持 Docker 构建)
  • Kubernetes Plugin(支持 Kubernetes 运行 Agent)

Jenkins Pipeline 配置

Jenkins Pipeline 采用 DSL 语法 定义 CI/CD 过程,主要分为:

  1. Declarative Pipeline(声明式):结构化、易读,推荐使用。
  2. Scripted Pipeline(脚本式):自由度高,但较复杂。

声明式 Pipeline 示例

创建 Jenkinsfile

pipeline {
    agent any
    stages {
        stage('Checkout') {
            steps {
                git url: 'https://github.com/example/repo.git', branch: 'main'
            }
        }
        stage('Build') {
            steps {
                sh 'mvn clean package'
            }
        }
        stage('Test') {
            steps {
                sh 'mvn test'
            }
        }
        stage('Deploy') {
            steps {
                sh 'scp target/*.jar user@server:/deploy/path'
            }
        }
    }
}

Scripted Pipeline 示例

node {
    stage('Checkout') {
        git url: 'https://github.com/example/repo.git'
    }
    stage('Build') {
        sh 'mvn package'
    }
    stage('Test') {
        sh 'mvn test'
    }
    stage('Deploy') {
        sh 'scp target/*.jar user@server:/deploy/path'
    }
}

Jenkins Agent 配置

Jenkins 默认使用 Master 运行 Job,但为提高并发能力,可以配置 Agent(节点)

添加 SSH 连接的 Jenkins Agent

在 Jenkins 管理 > 节点管理 添加新节点,执行:

java -jar agent.jar -jnlpUrl http://jenkins-server:8080/computer/agent/slave-agent.jnlp -secret <SECRET>

Docker 运行 Jenkins Agent

docker run -d --rm --name jenkins-agent \
    -v /var/run/docker.sock:/var/run/docker.sock \
    jenkins/inbound-agent

与 Kubernetes & Docker 集成

使用 Docker 运行构建

安装 Docker Pipeline Plugin,并修改 Jenkinsfile

pipeline {
    agent {
        docker {
            image 'maven:3.8.4'
        }
    }
    stages {
        stage('Build') {
            steps {
                sh 'mvn package'
            }
        }
    }
}

在 Kubernetes 上运行 Jenkins

部署 Jenkins 到 Kubernetes

apiVersion: apps/v1
kind: Deployment
metadata:
  name: jenkins
spec:
  replicas: 1
  selector:
    matchLabels:
      app: jenkins
  template:
    metadata:
      labels:
        app: jenkins
    spec:
      containers:
      - name: jenkins
        image: jenkins/jenkins:lts
        ports:
        - containerPort: 8080

配置 Kubernetes Agent

安装 Kubernetes Plugin,然后在 Jenkinsfile 配置:

podTemplate(label: 'k8s-agent', containers: [
    containerTemplate(name: 'maven', image: 'maven:3.8.4', ttyEnabled: true)
]) {
    node('k8s-agent') {
        stage('Build') {
            container('maven') {
                sh 'mvn package'
            }
        }
    }
}

QA 环节

Q1: Jenkins 与 GitHub Actions、GitLab CI/CD 的区别?

特性JenkinsGitHub ActionsGitLab CI/CD
安装需手动安装GitHub 内置GitLab 内置
插件扩展丰富限制较多中等
分布式构建支持受限支持
Docker 集成中等

Q2: Jenkins 任务运行太慢?

优化方法:

  1. 使用并行 Stage
stage('Parallel Build') {
    parallel {
        stage('Unit Test') {
            steps {
                sh 'mvn test'
            }
        }
        stage('Integration Test') {
            steps {
                sh 'mvn verify'
            }
        }
    }
}
  1. 启用分布式构建,增加 Jenkins Agent
  2. 结合 Kubernetes 扩展构建能力

总结

Jenkins 是一款强大的 CI/CD 工具,但在企业落地时面临安装、配置和集成的挑战。本文详细介绍了 Jenkins 的 安装、Pipeline 配置、Agent 管理、插件扩展,并演示了如何与 Docker、Kubernetes 结合,提升部署自动化能力。同时,提供了优化 Jenkins 运行效率的方法,并对比了 GitHub Actions、GitLab CI/CD 的差异。企业可通过 分布式构建、并行流水线、云原生部署 来提高 Jenkins 的可扩展性。未来可探索 Jenkins + ArgoCD、Ansible、Serverless 等更先进的 DevOps 方案。

参考资料


Swift社区
16.6k 声望4.6k 粉丝

我们希望做一个最专业最权威的 Swift 中文社区,我们希望更多的人学习和使用Swift。我们会分享以 Swift 实战、SwiftUI、Swift 基础为核心的技术干货,欢迎您的关注与支持。