温馨提示×

jenkins部署在centos上如何实现自动化

小樊
41
2025-12-15 18:39:11
栏目: 智能运维

在 CentOS 上落地 Jenkins 自动化的关键步骤


一 环境与基础安装

  • 准备环境:更新系统并安装 Java 8/11(Jenkins 依赖),安装 Git 等基础工具。
  • 安装 Jenkins(官方 YUM 源):
    • 导入 GPG 与仓库:
      • sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
      • sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
    • 安装与启动:
      • sudo yum install -y jenkins
      • sudo systemctl start jenkins && sudo systemctl enable jenkins
  • 访问与初始化:
    • 浏览器打开 http://<服务器IP>:8080
    • 初始密码:sudo cat /var/lib/jenkins/secrets/initialAdminPassword
  • 防火墙放行端口(默认 8080):firewall-cmd --add-port=8080/tcp --permanent && firewall-cmd --reload
  • 建议:立即修改默认管理员密码、完成安全配置(如启用 HTTPS)。

二 核心配置与插件

  • 全局工具配置:在 Manage Jenkins → Global Tool Configuration 配置 JDK、Git、Maven(可选择自动安装或填写已有路径)。
  • 必备插件(示例):
    • Git plugin、Maven Integration Plugin(Java 后端常用)
    • NodeJS Plugin(前端/Node 项目)
    • Pipeline、Credentials Binding、SSH Pipeline Steps / Publish Over SSH(流水线、凭据、SSH 传输与远程执行)
  • 凭据管理:添加 SSH 私钥(用于拉取私有仓库与部署到目标主机)、用户名/密码Personal Access Token(对接 Git 平台)。

三 触发器与流水线设计

  • 触发方式:
    • 代码变更触发:在代码托管平台配置 Webhook,指向 http:///github-webhook/(或 GitLab 等效路径),Jenkins 项目勾选 “GitHub hook trigger for GITScm polling”。
    • 定时触发:使用 Cron 表达式(如 H/5 * * * * 表示每 5 分钟检查一次)。
  • 流水线落地方式:
    • 推荐将流程写入代码仓库根目录的 Jenkinsfile,在 Jenkins 项目选择 Pipeline script from SCM,指定仓库与分支,保持流程与代码一致、可审计、可版本化。

四 典型场景示例

  • 示例一 Java + Maven(构建产物为 JAR,使用 SSH 发布到目标主机)

    • 插件:Maven Integration、SSH Pipeline Steps / Publish Over SSH
    • Jenkinsfile(声明式):
      pipeline {
        agent any
        tools { maven 'Maven-3' jdk 'JDK-11' } // 与全局工具配置中的名称保持一致
        environment {
          APP_NAME = 'myapp'
          ARTIFACT = "${APP_NAME}-*.jar"
          REMOTE_HOST = 'deploy@192.168.10.20'
          REMOTE_DIR = '/opt/apps'
          JAR_PATH  = "target/${ARTIFACT}"
        }
        stages {
          stage('Checkout') { steps { git branch: 'main', url: 'git@github.com:org/repo.git' } }
          stage('Build')     { steps { sh 'mvn -B -DskipTests clean package' } }
          stage('Deploy') {
            steps {
              sshPublisher(
                publishers: [
                  sshPublisherDesc(
                    configName: 'prod-ssh', // 在系统配置中预先定义 SSH Server
                    transfers: [
                      sshTransfer(
                        sourceFiles: "${JAR_PATH}",
                        removePrefix: 'target',
                        remoteDirectory: REMOTE_DIR
                      )
                    ],
                    execCommand: """
                      cd ${REMOTE_DIR}
                      pkill -f ${APP_NAME} || true
                      nohup java -jar ${ARTIFACT} > app.log 2>&1 &
                    """
                  )
                ]
              )
            }
          }
        }
      }
      
    • 说明:通过 Publish Over SSHsshPublisher 将产物复制到目标机并执行启动命令;生产环境建议使用 systemd 或进程管理工具替代 nohup。
  • 示例二 Node.js + Vue(前端构建与发布)

    • 插件:NodeJS Plugin
    • 全局工具配置:新增 NodeJS 安装(如 16.x/18.x),自动加入 PATH。
    • Jenkinsfile(声明式):
      pipeline {
        agent any
        tools { nodejs 'NodeJS-18' }
        environment {
          APP_NAME = 'my-vue'
          DIST_DIR = 'dist'
          REMOTE_HOST = 'deploy@192.168.10.20'
          REMOTE_DIR = '/var/www/my-vue'
        }
        stages {
          stage('Checkout') { steps { git branch: 'main', url: 'git@github.com:org/repo.git' } }
          stage('Install')  { steps { sh 'npm ci --quiet' } }
          stage('Build')    { steps { sh 'npm run build -- --prod' } }
          stage('Deploy') {
            steps {
              sshPublisher(
                publishers: [
                  sshPublisherDesc(
                    configName: 'prod-ssh',
                    transfers: [
                      sshTransfer(
                        sourceFiles: "${DIST_DIR}/**",
                        removePrefix: "${DIST_DIR}",
                        remoteDirectory: REMOTE_DIR
                      )
                    ]
                  )
                ]
              )
            }
          }
        }
      }
      
    • 说明:构建产物为静态文件,发布到 Nginx 静态目录即可;如需回滚,可保留历史版本目录并在 SSH 步骤中切换软链接。

五 安全与运维要点

  • 安全加固:
    • 禁用匿名访问,使用强密码/多因素认证;为 Jenkins URL 配置 HTTPS(反向代理或内置)。
    • 凭据最小权限原则;SSH 使用 密钥登录,禁止口令登录;限制 Jenkins 用户在目标主机的 sudo 权限(如需,仅授予必要命令)。
    • 升级与插件镜像:如遇插件安装慢或失败,可在 插件管理 → 高级 更换为国内镜像源(如清华/中科大镜像)。
  • 系统与网络:
    • 仅开放必要端口(如 8080/80/443),使用 firewalld/SELinux 进行最小暴露;定期备份 JENKINS_HOME
  • 稳定性与可观测性:
    • 使用 agent label 做资源隔离;为关键阶段设置 超时重试;接入 邮件/企业微信/钉钉 通知;归档 构建产物日志,便于审计与回滚。

0