Skip to content

Jenkins 入门路线 ​

Jenkins 是持续集成和持续交付工具。它把“拉代码、安装依赖、编译、测试、打包、构建镜像、部署、通知”这些重复操作自动化,减少人工发布带来的遗漏和误操作。

零基础可以先把 Jenkins 理解成一个自动执行脚本的平台,只是它比普通脚本多了页面管理、触发器、凭据、日志、权限和流水线状态。

Jenkins 解决什么问题 ​

传统人工发布Jenkins 流水线
开发手动登录服务器执行命令统一由流水线执行
发布步骤靠口头记忆Jenkinsfile 固化步骤
密码写在脚本里使用 Credentials 管理凭据
不知道谁发了什么版本每次构建都有记录
构建失败后难复现控制台日志完整保留

基本工作流程 ​

mermaid
flowchart TD
    A["开发提交代码"] --> B["Git Webhook 或定时触发"]
    B --> C["Jenkins 创建构建任务"]
    C --> D["Agent 拉取代码"]
    D --> E["安装依赖"]
    E --> F["编译和单元测试"]
    F --> G{"测试是否通过"}
    G -- "否" --> H["停止流水线并通知"]
    G -- "是" --> I["打包制品"]
    I --> J["构建 Docker 镜像"]
    J --> K["部署到目标环境"]
    K --> L["健康检查和通知结果"]

核心概念 ​

概念说明
JobJenkins 中的任务,可以是自由风格任务,也可以是 Pipeline
Pipeline用代码描述的流水线,通常写在 Jenkinsfile
Stage流水线中的阶段,例如构建、测试、部署
Step阶段里的具体动作,例如执行一条 shell 命令
Agent实际执行任务的机器或容器
WorkspaceJenkins 为当前构建准备的工作目录
Credentials凭据管理,用来保存账号、密码、Token、SSH key
Artifact构建产物,例如 jar、zip、测试报告

第一个 Jenkinsfile ​

下面是一个 Java 项目的最小 Pipeline:

groovy
pipeline {
    agent any

    stages {
        stage('Checkout') {
            steps {
                checkout scm
            }
        }

        stage('Build') {
            steps {
                sh 'mvn clean package -DskipTests'
            }
        }

        stage('Test') {
            steps {
                sh 'mvn test'
            }
        }

        stage('Archive') {
            steps {
                archiveArtifacts artifacts: 'target/*.jar', fingerprint: true
            }
        }
    }
}

逐段理解:

代码含义
pipeline声明这是一个流水线
agent any使用任意可用节点执行
stages阶段集合
stage('Build')一个名为 Build 的阶段
sh 'mvn ...'在 Linux Agent 上执行命令
archiveArtifacts归档构建产物,方便下载和追踪

如果 Jenkins 运行在 Windows Agent 上,命令通常使用 bat:

groovy
bat 'mvn clean package -DskipTests'

凭据管理 ​

不要把密码、Token、服务器私钥直接写进 Jenkinsfile。正确做法是放到 Jenkins 的 Credentials 中,然后在流水线里引用。

groovy
withCredentials([string(credentialsId: 'docker-token', variable: 'TOKEN')]) {
    sh 'echo "$TOKEN" | docker login registry.example.com -u demo --password-stdin'
}

注意:

  1. credentialsId 是 Jenkins 页面中创建的凭据 ID。
  2. Jenkins 会尽量在日志中隐藏敏感值。
  3. 凭据权限要按项目和环境拆分,不要所有任务共用生产权限。

常见流水线阶段 ​

阶段目标常见命令
Checkout获取代码checkout scm
Install安装依赖npm ci、mvn dependency:resolve
Lint代码规范检查npm run lint
Test自动化测试mvn test、npm test
Build编译打包mvn package、npm run build
Docker Build构建镜像docker build -t app:${BUILD_NUMBER} .
Deploy部署kubectl apply -f deploy.yaml
Notify通知邮件、企微、钉钉、飞书

发布策略 ​

初学时可以先做“构建成功后部署测试环境”。生产环境建议增加保护:

mermaid
flowchart TD
    A["代码合并主分支"] --> B["自动构建和测试"]
    B --> C["部署测试环境"]
    C --> D["人工确认"]
    D --> E["部署生产环境"]
    E --> F["健康检查"]
    F --> G{"是否正常"}
    G -- "正常" --> H["发布完成"]
    G -- "异常" --> I["回滚上一版本"]

生产流水线至少应该具备:

  • 明确的发布版本号。
  • 人工确认或审批。
  • 健康检查。
  • 失败自动停止。
  • 可执行的回滚方案。
  • 发布通知和记录。

常见问题 ​

现象原因处理方式
拉代码失败Git 凭据、网络或分支错误检查 Credentials、仓库地址、分支名
构建命令本地能跑 Jenkins 不能跑Agent 环境缺 JDK、Maven、Node在 Agent 安装依赖或使用容器化构建
流水线卡住等待输入、命令无输出、资源不足查看 Console Output 和节点状态
部署成功但服务不可用配置、端口、探针或依赖异常查看应用日志和健康检查
密码泄露风险明文写入脚本或日志改用 Credentials,并清理历史记录

入门练习 ​

  1. 创建一个 Pipeline Job,让它从 Git 仓库拉代码。
  2. 给项目添加 Jenkinsfile,包含 Build、Test、Archive 三个阶段。
  3. 故意让测试失败,观察 Jenkins 如何停止流水线。
  4. 创建一个凭据,在 Jenkinsfile 中读取它,但不要把值打印出来。
  5. 给流水线增加构建成功和失败通知。

小结 ​

Jenkins 的核心价值是把发布步骤代码化、自动化、可追踪。初学时先学会 Pipeline、Stage、Agent、Credentials 和 Artifact,再逐步接入 Docker、Kubernetes、审批、通知和回滚。生产流水线不是越复杂越好,而是每一步都要能解释、能复现、能排障。