首页主机资讯Debian下如何实现Jenkins自动化部署

Debian下如何实现Jenkins自动化部署

时间2025-12-11 15:31:04发布访客分类主机资讯浏览976
导读:在 Debian 上实现 Jenkins 自动化部署 一 环境准备与安装 安装 Java 11(Jenkins 2.x 推荐 LTS 搭配 JDK 11): 执行:sudo apt update && sudo apt...

在 Debian 上实现 Jenkins 自动化部署

一 环境准备与安装

  • 安装 Java 11(Jenkins 2.x 推荐 LTS 搭配 JDK 11):
    • 执行:sudo apt update & & sudo apt install -y openjdk-11-jdk
    • 验证:java -version
  • 安装 Jenkins(官方仓库方式,适配 Debian 稳定版):
    • 导入密钥:wget -q -O - https://pkg.jenkins.io/debian/jenkins.io.key | sudo apt-key add -
    • 添加源:echo "deb https://pkg.jenkins.io/debian-stable binary/" | sudo tee /etc/apt/sources.list.d/jenkins.list > /dev/null
    • 安装与启动:sudo apt update & & sudo apt install -y jenkins & & sudo systemctl enable --now jenkins
  • 访问与初始化:
    • 打开浏览器访问:http://< 服务器IP> :8080
    • 初始密码:sudo cat /var/lib/jenkins/secrets/initialAdminPassword
    • 完成“安装推荐插件”与创建管理员账户。

二 安全与网络配置

  • 防火墙放行端口(如使用 UFW):
    • sudo ufw allow 8080/tcp
    • 如启用 Jenkins Agent 通信,放行:sudo ufw allow 50000/tcp
    • 重载:sudo ufw reload
  • 安全加固建议:
    • 禁用匿名访问,启用登录安全策略(如“Logged-in users can do anything”)
    • 插件更新源可替换为国内镜像(可选,提升下载速度):https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
    • 定期更新 Jenkins 与插件 以修复安全漏洞。

三 创建流水线任务与触发方式

  • 准备代码仓库与凭据:
    • 在 Jenkins 管理界面:Manage Jenkins → Manage Credentials → System → Global credentials 添加凭据(如 SSH 私钥用户名/密码
    • 如使用 GitHub/GitLab,建议配置 Deploy KeysPersonal Access Token
  • 新建任务:
    • 选择 Pipeline,在 Pipeline 部分选择 Pipeline script from SCM,配置 Git 仓库与凭据,指定 Jenkinsfile 路径(如:Jenkinsfile)
  • 触发方式(二选一或同时启用):
    • 轮询 SCM(简单但延迟较高):在“Build Triggers”中配置 Poll SCM,如 H/5 * * * *(每 5 分钟检查一次变更)
    • Webhook(实时):在 GitHub/GitLab 项目设置中添加 Webhook,指向 Jenkins 任务(示例:http://< JENKINS_URL> /project/< JOB_NAME> ),必要时配置 Secret Token 提高安全性。

四 示例 Jenkinsfile 与部署方式

  • 方式 A(SSH 发布插件,适合推送到目标服务器)
    • 先在 Manage Jenkins → Configure System → Publish over SSH 配置目标主机与凭据(如名称:prod-ssh
    • Jenkinsfile 示例:
      pipeline {
      
        agent any
        tools {
       maven 'Maven-3.8' }
       // 需在 Global Tool Configuration 中配置 Maven
        stages {
      
          stage('Checkout') {
       steps {
       checkout scm }
       }
      
          stage('Build')     {
       steps {
       sh 'mvn -B -DskipTests clean package' }
       }
      
          stage('Deploy')    {
      
            steps {
      
              sshPublisher(
                publishers: [
                  sshPublisherDesc(
                    configName: 'prod-ssh',
                    transfers: [
                      sshTransfer(
                        sourceFiles: 'target/*.jar',
                        removePrefix: 'target',
                        remoteDirectory: '/opt/apps/myapp'
                      )
                    ]
                  )
                ]
              )
            }
      
          }
      
        }
      
      }
          
      
  • 方式 B(SSH 执行远程脚本,适合滚动更新、备份与回滚)
    • 在目标服务器准备部署脚本 /opt/scripts/deploy.sh(示例):
      #!/usr/bin/env bash
      set -e
      APP_DIR=/opt/apps/myapp
      JAR_NAME=myapp.jar
      BACKUP_DIR=/opt/backups
      TIMESTAMP=$(date +%F-%H%M%S)
      
      mkdir -p "$BACKUP_DIR"
      cd "$APP_DIR"
      
      # 备份
      if [ -f "$JAR_NAME" ];
       then
        cp "$JAR_NAME" "$BACKUP_DIR/${
      JAR_NAME%.jar}
      -$TIMESTAMP.jar"
      fi
      
      # 停止旧进程
      PID=$(ps -ef | grep "$JAR_NAME" | grep -v grep | awk '{
      print $2}
          ')
      if [ -n "$PID" ];
           then
        kill "$PID" || true
        sleep 5
      fi
      
      # 部署并启动
      cp target/"$JAR_NAME" .
      nohup java -Xms512m -Xmx512m -jar "$JAR_NAME" >
           app.log 2>
          &
          1 &
      
      
    • Jenkinsfile 片段:
      stage('Deploy via SSH') {
      
        steps {
      
          sh '''
            ssh user@prod-server 'bash /opt/scripts/deploy.sh'
          '''
        }
      
      }
      
      
  • 方式 C(容器内运行 Spring Boot,便于隔离与回滚)
    • 目标机需安装 Docker,Jenkins 使用 SSH 执行:
      stage('Deploy with Docker') {
      
        steps {
      
          sh '''
            ssh user@prod-server '''
              cd /opt/apps/myapp
              docker stop myapp || true
              docker rm myapp || true
              docker build -t myapp:${
      BUILD_NUMBER}
       .
              docker run -d --name myapp -p 8081:8080 myapp:${
      BUILD_NUMBER}
      
            '''
          '''
        }
      
      }
          
      
    • 建议配合镜像仓库(如 Nexus/Harbor)与固定标签策略(如 latestv< 版本> )实现快速回滚。

五 常见问题与优化建议

  • 权限与 sudo:
    • 若 Jenkins 通过 SSH 执行部署脚本,建议使用 受限用户 + sudo 免密执行必要命令(如 systemctl/docker),避免直接使用 root
  • 构建环境一致性:
    • 使用 Jenkins 工具安装器 管理 JDK/Maven/Git,避免“本机可用、构建机失败”
  • 日志与通知:
    • post 阶段输出构建状态,结合邮件或企业微信/钉钉 Webhook 做失败告警
  • 回滚策略:
    • 保留最近 N 次构建产物(如按时间清理旧备份),回滚时直接切换到备份包或指定镜像标签
  • 高可用与扩展:
    • 生产环境建议 Master/Agent 分离,Agent 按标签调度构建任务,提升并发与隔离性。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: Debian下如何实现Jenkins自动化部署
本文地址: https://pptw.com/jishu/769448.html
ubuntu tigervnc如何优化网络连接 ubuntu tigervnc如何解决黑屏问题

游客 回复需填写必要信息