温馨提示×

Jenkins在Debian上的自动化部署流程是怎样的

小樊
40
2025-12-26 17:41:15
栏目: 智能运维

在 Debian 上搭建 Jenkins 自动化部署流程

一 环境准备与安装

  • 安装 Java(推荐 OpenJDK 1117):sudo apt update && sudo apt install -y openjdk-11-jdk(或 openjdk-17-jdk);验证:java -version。
  • 添加 Jenkins 官方 APT 仓库 并安装:
    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
    sudo apt update && sudo apt install -y jenkins
  • 启动并设置开机自启:sudo systemctl enable --now jenkins
  • 访问 http://<服务器IP>:8080,解锁 Jenkins:sudo cat /var/lib/jenkins/secrets/initialAdminPassword
  • 防火墙放行端口(如使用 UFW):sudo ufw allow 8080/tcp;如启用 Agent 通信,放行 50000/tcp

二 初始化与安全配置

  • 插件安装:进入 Manage Jenkins → Plugin Manager,安装 Pipeline、GitHub Integration、Docker Pipeline、SSH Pipeline Steps/Publish Over SSH、Credentials Binding 等常用插件。
  • 更新站点镜像(可选,提升国内下载速度):进入 Manage Jenkins → Plugin Manager → Advanced,将 Update Site URL 替换为:https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
  • 安全配置:启用安全(如 Logged-in users can do anything),创建管理员账户,禁用匿名访问。

三 凭据与工具配置

  • 凭据管理(Manage Jenkins → Manage Credentials → System → Global credentials):
    • SSH 私钥(类型:SSH Username with private key):用于拉取私有仓库与远程部署。
    • Docker Hub 账号(类型:Username with password 或 Docker Credentials):用于推送镜像。
    • 代码仓库 Deploy Key(SSH,添加到 GitHub/GitLab Deploy Keys)。
  • 全局工具(Manage Jenkins → Global Tool Configuration):配置 JDK、Git、Maven/NodeJS 等工具路径或自动安装。

四 创建流水线并编写 Jenkinsfile

  • 新建任务:New Item → Pipeline → 勾选 Pipeline script from SCM → 选择 Git,填写仓库 URL 与凭据。
  • 典型流程示例(声明式 Pipeline):
    • 拉取代码 → 构建(如 mvn/ npm)→ 测试 → 打包 → 部署。
    • 部署方式可选:
      • 通过 SSH 将产物(如 target/*.jar)传输到目标服务器并启动;
      • 使用 Docker 构建镜像、推送到仓库,远程主机拉取并运行容器。
  • 参考 Jenkinsfile(按项目替换占位符):
    pipeline {
    agent any
    environment {
    DOCKER_IMAGE = “your-dockerhub-username/your-app:${BUILD_NUMBER}”
    REMOTE_SERVER = “user@your-server-ip”
    REMOTE_DIR = “/opt/app”
    }
    stages {
    stage(‘Checkout’) { steps { git branch: ‘main’, url: ‘https://github.com/your/repo.git’ } }
    stage(‘Build’) { steps { sh ‘mvn -B -DskipTests clean package’ } }
    stage(‘Test’) { steps { sh ‘mvn test’ } }
    stage(‘Build & Push Image’) {
    steps {
    script {
    dockerImage = docker.build(env.DOCKER_IMAGE)
    docker.withRegistry(‘https://registry.hub.docker.com’, ‘dockerhub-credential-id’) {
    dockerImage.push()
    }
    }
    }
    }
    stage(‘Deploy Remote’) {
    steps {
    sshagent([‘ssh-credential-id’]) {
    sh “”"
    ssh ${REMOTE_SERVER} “docker pull ${DOCKER_IMAGE}”
    ssh ${REMOTE_SERVER} “docker stop your-app || true”
    ssh ${REMOTE_SERVER} “docker rm your-app || true”
    ssh ${REMOTE_SERVER} “docker run -d --name your-app -p 8080:8080 ${DOCKER_IMAGE}”
    “”"
    }
    }
    }
    }
    }
  • 如需使用 Publish Over SSH 传输文件并执行远程命令,可在“系统配置”中添加 SSH Servers,在 Pipeline 中使用 sshPublisher 进行传输与远程执行。

五 触发自动化与运维建议

  • 触发方式:
    • 轮询 SCM:在流水线配置中设置 “Poll SCM”,如 H/5 * * * *(每 5 分钟检查一次)。
    • Webhook:在 GitHub/GitLab 配置 Webhook,指向 http:///github-webhook/(或 gitlab-webhook),实现代码推送即构建。
  • 运行与扩展:
    • 生产环境建议 Master/Agent 分离,在 Manage Nodes 添加 Agent 节点分担构建压力。
    • 使用 Docker 运行 Jenkins 可简化环境管理:docker run -d -p 8080:8080 -p 50000:50000 -v jenkins_data:/var/jenkins_home jenkins/jenkins:lts;如需在容器内构建镜像,可挂载 /var/run/docker.sock
  • 稳定性与可观测性:
    • 在 Pipeline 中使用 options { timeout; retry; timestamps } 控制运行时长与重试;
    • post 阶段添加通知(如邮件、企业微信/钉钉机器人)或结果归档,便于回溯。

0