温馨提示×

centos jenkins部署如何实现自动化

小樊
35
2025-12-13 19:02:12
栏目: 智能运维

在 CentOS 上用 Jenkins 实现自动化部署

一 架构与准备

  • 组件与版本建议:操作系统 CentOS 7/8,JDK 8/11,Jenkins LTS,版本控制 Git,构建工具 Maven/Gradle,可选容器化 DockerDocker Compose
  • 安装基础依赖与 Jenkins:
    • 安装 Java 与工具:sudo yum update -y && sudo yum install -y java-1.8.0-openjdk-devel git
    • 添加 Jenkins YUM 源并安装: 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://:8080,初始密码在 /var/lib/jenkins/secrets/initialAdminPassword;建议安装推荐插件(如 Git、Pipeline、Maven Integration)。

二 触发自动化

  • 源码管理与凭证:在 Jenkins 任务中配置 Git 仓库 URL 与分支;为私有仓库添加 SSH 私钥用户名/密码凭证。
  • 触发方式:
    • 轮询 SCM:在“构建触发器”中设置 Poll SCM(如 H/5 * * * * 表示每 5 分钟检查一次变更)。
    • Webhook 自动触发:在 GitHub/GitLab 项目设置 Webhook,指向 http://<JENKINS_URL>/github-webhook/(或 GitLab 等效路径);Jenkins 安装 Generic Webhook Trigger 插件可更灵活地处理事件与参数。

三 构建与部署流水线

  • 方式 A Pipeline as Code(推荐,Jenkinsfile)
    • 在代码根目录放置 Jenkinsfile,示例(按项目替换参数): pipeline { agent any tools { maven ‘Maven 3.8’ } // 需在“全局工具配置”预置 Maven 名称 stages { stage(‘Checkout’) { steps { git url: ‘git@github.com:org/repo.git’, branch: ‘main’ } } stage(‘Build’) { steps { sh ‘mvn clean package -DskipTests’ } } stage(‘Deploy’) { steps { sh ‘’’ scp target/app.jar deploy@prod-server:/opt/app/releases/app.jar ssh deploy@prod-server ‘systemctl restart myapp || true’ ‘’’ } } } post { success { echo ‘Deploy success’ } failure { echo ‘Deploy failed’ } } }
    • 关键点:在“全局工具配置”预置 JDK、Git、Maven;使用 SSH 凭据执行远程拷贝与重启。
  • 方式 B 远程部署插件(Publish Over SSH)
    • 安装 Publish Over SSH 插件;在“系统管理 → 系统配置”中添加目标服务器 SSH 信息(Host、Port、Credentials、Remote Directory)。
    • 在任务“构建后操作”中配置:
      • Source files:target/*.war(或 target/app.jar
      • Remove prefix:target
      • Remote directory:/opt/app/releases
      • Exec command:systemctl restart myapp 或执行部署脚本(如备份、回滚、启动)。

四 常见场景示例

  • Java(WAR 部署到 Tomcat)
    • 构建:mvn clean package;部署:通过 scp 将 WAR 复制到 $TOMCAT/webapps,执行 $TOMCAT/bin/shutdown.sh → 启动 startup.sh;为降低风险可先停旧进程、备份旧包、再启动,必要时实现回滚(保留最近 N 个版本)。
  • 前端(Node.js + NPM/Yarn)
    • 安装 NodeJS 插件并在“全局工具配置”预置 Node 版本;构建步骤执行:node -v、npm/yarn、npm run build;产物 dist/ 通过 rsync/SSH 同步到 Nginx 静态目录并 reload Nginx。
  • 容器化(Docker)
    • 在代码根目录提供 Dockerfile 与可选 docker-compose.yml;构建阶段执行:docker build -t myapp:${BUILD_NUMBER} .;部署阶段执行:docker stop myapp || true && docker rm myapp || true && docker run -d --name myapp -p 8080:8080 myapp:${BUILD_NUMBER}(生产建议配合 镜像仓库滚动升级策略)。

五 安全与优化建议

  • 凭据与权限:使用 Jenkins 凭据存储管理 SSH 私钥、Git 凭证;目标服务器采用 最小权限的部署用户(如仅允许部署相关目录与服务的 sudo 权限)。
  • 稳定性:构建/部署阶段使用 set -eux、区分失败路径;必要时用 nohupsystemd 托管应用进程,避免构建代理退出导致进程被杀。
  • 回滚与灰度:保留最近 N 个构建产物(如按 BUILD_NUMBER 命名目录);支持按版本号快速回滚;多实例时可先 灰度/金丝雀发布再全量。
  • 通知与审计:接入 邮件/企业微信/钉钉 通知;在“系统管理 → 系统配置”中配置 Extended E-mail Notification(SMTP、端口 465/587、授权码等),并在流水线 post 阶段发送结果。
  • 网络与代理:如内网访问受限,配置 HTTP/HTTPS 代理;Jenkins 配置与插件站点使用可达的镜像源,避免“离线”问题。

0