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 cimvn dependency:resolve
Lint代码规范检查npm run lint
Test自动化测试mvn testnpm test
Build编译打包mvn packagenpm 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、审批、通知和回滚。生产流水线不是越复杂越好,而是每一步都要能解释、能复现、能排障。