温馨提示×

Linux Jenkins如何与其他工具集成

小樊
34
2025-12-31 20:58:49
栏目: 编程语言

Linux 上 Jenkins 与常见工具的集成实践

一 基础准备与插件体系

  • 安装与启动:在 Linux 上安装 JDK 11+,通过系统包管理器安装 Jenkins,并启用服务(如 systemd)。完成后访问 http://<服务器IP>:8080 完成初始化。
  • 插件生态:在 Manage Jenkins → Manage Plugins 安装常用插件,如 Git/GitHub/GitLab、Pipeline、Docker Pipeline、Kubernetes、Credentials Binding、SSH、Blue Ocean 等。
  • 全局工具:在 Manage Jenkins → Global Tool Configuration 配置 JDK、Git、Maven/Gradle、NodeJS 等工具路径,便于流水线调用。
  • 凭据管理:在 Manage Jenkins → Manage Credentials 统一存放 SSH 私钥、用户名/密码、API Token、Docker Registry 等敏感信息,后续以 credentialsId 引用。

二 源码管理与自动触发

  • Git 集成:在任务中选择 Git,填写仓库 URL 并选择凭据(HTTPS 账号密码或 SSH 私钥);在 Global Tool Configuration 指定 Git 可执行文件路径。
  • Webhook 触发:
    • GitHub:安装 GitHub Plugin,在任务“构建触发器”勾选 GitHub hook trigger for GITScm polling;在仓库 Settings → Webhooks 添加 http:///github-webhook/
    • GitLab:安装 GitLab Plugin,勾选 Build when a change is pushed to GitLab;Webhook 可用 http:///project/<JOB_NAME>
  • 轮询兜底:如网络或安全策略限制 Webhook,可用 Poll SCM(如 **H/5 * * * *** 每 5 分钟检查一次)。

三 构建与制品管理 Docker 与 Kubernetes

  • Docker 集成:
    • 方式 A(推荐流水线):安装 Docker Pipeline,在流水线中使用 docker.build / withRegistry / image.push 完成镜像构建与推送。
    • 方式 B(容器内调用宿主 Docker):运行 Jenkins 容器时挂载 /var/run/docker.sock,使容器内可直接调用宿主 Docker Daemon
    • 方式 C(Shell 脚本):直接在 sh ‘docker build …’ 中执行构建与推送。
  • Kubernetes 动态代理:安装 Kubernetes Plugin,在 Manage Jenkins → System Configuration → Cloud 配置 Kubernetes APIAgent Pod 模板,在流水线中使用 agent { kubernetes { … } } 动态申请构建节点。
  • 制品与镜像仓库:结合 Docker Hub/Harbor 推送镜像,使用 withCredentials 管理登录凭据,保证镜像安全分发。

四 部署与通知落地模式

  • SSH 远程部署:安装 Publish Over SSH,在系统配置中添加目标 SSH Server,在任务或流水线中用 sshPublisher 执行远程脚本(如拉取新镜像、重启服务)。
  • API 调用:通过 curl 调用部署平台或内部网关 REST API 触发滚动升级、蓝绿切换等。
  • 制品仓库:Java 项目可对接 Nexus 管理 Maven 依赖与仓库;前端/通用包可对接 npm 私服。
  • 通知与可视化:集成 Slack/企业微信/钉钉 等通知;启用 Prometheus Metrics 暴露 /prometheus 端点,在 Grafana 中展示构建时长、成功率等指标。

五 示例 Jenkinsfile 多工具串联

pipeline {
  agent any
  environment {
    IMAGE      = "your-registry/your-app:${env.BUILD_NUMBER}"
    REGISTRY   = "https://your-registry"
    CRED_ID    = 'docker-reg-creds'   // Docker Registry 凭据 ID
    SSH_CRED   = 'deploy-ssh-key'    // SSH 凭据 ID
    HOST       = '10.0.0.10'
    SERVICE    = 'app'
  }
  stages {
    stage('Checkout') {
      steps { git branch: 'main', url: 'git@github.com:org/repo.git' }
    }
    stage('Build & Test') {
      steps {
        sh 'mvn -B -DskipTests clean package'
        sh 'mvn test'
      }
    }
    stage('Build & Push Image') {
      steps {
        script {
          docker.build(IMAGE, ".")
          docker.withRegistry(REGISTRY, CRED_ID) {
            docker.image(IMAGE).push()
          }
        }
      }
    }
    stage('Deploy via SSH') {
      steps {
        sshPublisher(
          publishers: [
            sshPublisherDesc(
              configName: SSH_CRED,
              transfers: [
                sshTransfer(
                  execCommand: """
                    set -e
                    docker pull ${IMAGE}
                    docker stop ${SERVICE} || true
                    docker rm ${SERVICE} || true
                    docker run -d --name ${SERVICE} -p 8080:8080 ${IMAGE}
                  """
                )
              ]
            )
          ]
        )
      }
    }
  }
  post {
    success { echo 'Deploy succeeded.' }
    failure { echo 'Deploy failed.' }
  }
}

说明:上述流水线串联了 Git → Maven → Docker → Registry → SSH 部署,凭据通过 credentialsId 注入,便于在不同环境复用与审计。

0