Jenkins 不完全指南:从安装到流水线即代码

云原生与交付352 阅读约 6 分钟

Jenkins 是一款由 Java 编写的开源持续集成 / 持续交付(CI/CD)工具。它的核心价值是:把「拉代码 → 构建 → 测试 → 部署」这条本该重复手动的流程,变成可自动触发、可追溯、可复用的流水线。这篇是一份能让你跑起来的实用指南。

核心概念

  • Job / Pipeline:一个可执行的任务。现代用法几乎都是 Pipeline(流水线)。
  • Stage / Step:流水线里的阶段(如 Build、Test、Deploy)与具体步骤。
  • Agent / Node:实际跑构建的执行机,可以是主节点或分布式从节点。
  • Trigger:触发方式,常见是「代码 push(webhook)」「定时」「手动」。
  • Credentials:集中管理的密钥(Git 凭据、SSH key、Token),绝不写进脚本

安装(Docker 最快)

docker run -d --name jenkins \
  -p 8080:8080 -p 50000:50000 \
  -v jenkins_home:/var/jenkins_home \
  jenkins/jenkins:lts
# 首次启动拿初始管理员密码:
docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword

jenkins_home 卷一定要持久化——所有任务、插件、配置都在里面,丢了就全没了。

Pipeline as Code(声明式)

把流水线写进仓库根目录的 Jenkinsfile,让 CI 流程和代码一起版本化:

pipeline {
  agent any
  environment {
    REGISTRY = 'registry.example.com/myapp'
  }
  stages {
    stage('Build') {
      steps { sh 'npm ci && npm run build' }
    }
    stage('Test') {
      steps { sh 'npm test' }
    }
    stage('Docker') {
      steps {
        sh "docker build -t $REGISTRY:${GIT_COMMIT} ."
        sh "docker push $REGISTRY:${GIT_COMMIT}"
      }
    }
    stage('Deploy') {
      when { branch 'main' }   // 只在 main 分支部署
      steps { sh './scripts/deploy.sh ${GIT_COMMIT}' }
    }
  }
  post {
    failure { echo '构建失败,触发通知' }
    always  { cleanWs() }      // 清理工作空间
  }
}

声明式 Pipeline 的好处:流程透明、可 review、可回溯,换台 Jenkins 也能照样跑。

凭据管理

千万别把密码/Token 写进 Jenkinsfile。用 Jenkins 的 Credentials 体系存储,用 withCredentials 注入:

withCredentials([usernamePassword(
  credentialsId: 'registry-cred',
  usernameVariable: 'USER', passwordVariable: 'PASS')]) {
  sh 'echo "$PASS" | docker login -u "$USER" --password-stdin $REGISTRY'
}

密钥只存一处、加密保管、日志里自动打码。

最佳实践

  1. Pipeline as Code:流水线进仓库,别在 UI 里手点配置(不可追溯、易丢失)。
  2. 构建产物按 commit 打 tag$GIT_COMMIT 作镜像 tag,保证可追溯、可回滚。
  3. 分支策略when { branch 'main' } 控制只有主分支才部署生产。
  4. 失败要有通知post { failure { ... } } 接入钉钉/邮件/企业微信。
  5. 定期清理cleanWs() + 构建历史保留策略,防磁盘吃满。

与轻量方案的取舍

如今 GitHub Actions、GitLab CI 这类「仓库内置 CI」对中小项目更省心(无需自建、维护)。Jenkins 的优势在高度可定制、插件生态庞大、可私有化掌控,适合复杂企业场景或对构建环境有强管控需求的团队。

小结

Jenkins 把 CI/CD 流程自动化、可追溯。用 Docker 快速起、用 Jenkinsfile 把流水线写成代码、用 Credentials 管好密钥、用 commit tag 保证可回滚——这套实践能让你的构建-测试-部署既自动又稳。

相关文章

评论 (3)

小满

码住,回头实践一下

南风

compose 一上手就回不去了

F

foglight

受教了,之前一直一知半解