Jenkins入门:从架构到第一个任务

说实话,Jenkins 这玩意儿,我最早接触的时候也觉得挺唬人的。什么 Master-Agent、Pipeline、Groovy 脚本……一堆术语砸过来。但等你真正上手了就会发现,它的核心逻辑其实特别简单——就是一个「调度中心」。

你告诉它:代码在哪儿、怎么构建、测试跑什么、结果发哪儿。它就去干活了。

嗯,咱们这一章就把 Jenkins 的底裤扒干净。从架构到安装,从 Pipeline 到第一个自由风格任务,一步步来。

Jenkins 架构:Master 与 Agent

先聊聊架构。Jenkins 采用的是 Master-Agent 模式。说白了,就是「一个大脑 + 多个手脚」。

  • Master:负责调度、管理配置、展示界面。它不干重活。
  • Agent:真正跑构建、跑测试的节点。可以有很多个。

我在项目中遇到过一种情况:团队有几十个微服务,如果全挤在 Master 上构建,Master 直接卡死。后来我们把构建任务分散到 4 台 Agent 上,瞬间清爽了。

核心要点:Master 只做调度,Agent 做执行。别让 Master 干重活。

下面这张图,是我用 SVG 画的 Jenkins 核心架构。你看一眼就明白了。

Jenkins Master 调度 + UI + 配置管理 不执行构建任务 Agent 1 Linux 构建节点 Agent 2 Windows 测试节点 Agent 3 Docker 容器节点 SSH / JNLP 连接

Docker 方式安装 Jenkins

我个人习惯用 Docker 装 Jenkins。为什么?省心。不用管 Java 版本、不用管依赖冲突。一条命令搞定。

你想想看,以前装 Jenkins 要先装 JDK,再配环境变量,再下载 war 包……折腾半天。现在呢?

docker run -d \
  --name jenkins \
  -p 8080:8080 \
  -p 50000:50000 \
  -v jenkins_home:/var/jenkins_home \
  jenkins/jenkins:lts

跑起来之后,访问 http://localhost:8080。第一次登录需要解锁密码:

docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword

小技巧:我建议把 jenkins_home 挂载到宿主机的一个固定目录,比如 /data/jenkins。这样万一容器挂了,数据还在。

安装完成后,跟着向导走。选「安装推荐的插件」就行。别贪多,后面需要什么再加。

注意:Docker 方式下,Jenkins 容器内部默认没有 Docker CLI。如果你需要在 Pipeline 里调用 Docker 命令,记得把宿主机的 Docker 套接字挂载进去:-v /var/run/docker.sock:/var/run/docker.sock

Jenkins Pipeline 基础

Pipeline 是 Jenkins 的核心能力。说白了,就是把构建、测试、部署的流程写成代码。

Pipeline 有两种写法:Declarative(声明式)Scripted(脚本式)

对比项 Declarative Scripted
语法风格 结构化,类似 YAML 自由 Groovy 脚本
学习曲线 低,容易上手 高,需要 Groovy 基础
灵活性 有限,但有内置指令 极高,可以写任意逻辑
推荐场景 大部分 CI/CD 场景 复杂条件判断、动态流程

我个人建议:能用 Declarative 就用 Declarative。它更清晰,更容易维护。我曾经接手过一个项目,里面全是 Scripted Pipeline,代码写得跟天书一样……后来我花了两周才理清楚。

Declarative Pipeline 示例

pipeline {
    agent any

    stages {
        stage('Checkout') {
            steps {
                git 'https://github.com/example/my-project.git'
            }
        }
        stage('Build') {
            steps {
                sh 'mvn clean package'
            }
        }
        stage('Test') {
            steps {
                sh 'mvn test'
            }
        }
        stage('Archive') {
            steps {
                archiveArtifacts artifacts: 'target/*.jar'
            }
        }
    }
}

你看,每个阶段做什么,一目了然。Checkout 拉代码,Build 编译,Test 跑测试,Archive 归档产物。

Scripted Pipeline 示例

node {
    stage('Checkout') {
        checkout scm
    }
    stage('Build') {
        sh 'mvn clean package'
    }
    stage('Test') {
        sh 'mvn test'
    }
    stage('Archive') {
        archiveArtifacts artifacts: 'target/*.jar'
    }
}

Scripted 更自由,但可读性差一些。比如 node {} 块里可以嵌套任意 Groovy 代码,写复杂了容易把自己绕进去。

我的建议:新手从 Declarative 开始。等遇到「Declarative 搞不定」的场景,再切到 Scripted。比如动态生成 stage、根据条件跳过某些步骤等。

第一个自由风格任务

Pipeline 虽然好,但 Jenkins 最经典的任务类型其实是「自由风格任务」(Freestyle Project)。它适合快速验证、简单场景。

我来带你走一遍:

  1. 点击「新建任务」→ 输入名称 → 选择「自由风格项目」
  2. 在「源码管理」里选 Git,填仓库地址
  3. 在「构建触发器」里,可以选 Poll SCM 或 Webhook
  4. 在「构建」里,点「增加构建步骤」→ 选「执行 Shell」
  5. 在 Shell 框里输入:echo "Hello, Jenkins!" && mvn clean package
  6. 在「构建后操作」里,可以归档产物或发邮件
  7. 保存,点「立即构建」

就这么简单。你点一下「构建历史」里的那个构建号,就能看到控制台输出。

避坑指南:我曾经犯过一个低级错误——在自由风格任务里直接写死了路径。后来换了一台 Agent,路径不对,构建直接挂了。所以,尽量用相对路径,或者用 Jenkins 内置的环境变量,比如 $WORKSPACE

自由风格任务适合什么场景?

  • 快速验证一个构建脚本
  • 临时跑一次性的任务
  • 给不熟悉 Pipeline 的同事用

但如果你要做正式的 CI/CD 流程,我强烈建议你迁移到 Pipeline。因为 Pipeline 是代码,可以版本化管理,可以复用,可以审查。

嗯,这一章的内容就到这儿。Jenkins 入门其实不难,关键是理解它的架构思维——Master 调度、Agent 执行、Pipeline 编排。把这个想通了,后面学什么都是水到渠成的事。


专注资料整理