温馨提示×

Jenkins部署Debians步骤

小樊
44
2026-10-29 09:05:33
栏目: 智能运维

下面给你一份在 Jenkins 上部署 Debian 包(.deb)的常见做法与步骤,适用于构建 → 打包 → 分发/安装 .deb 的典型场景。


一、常见部署方式说明

Jenkins 部署 Debian 通常有三种方式:

  1. 构建 .deb 并在目标机 apt 安装
  2. 构建 .deb 并通过 scp + dpkg -i 安装
  3. 推送到 apt 仓库(如 aptly / Nexus / Artifactory)

下面以 方式 2(最常用) 为例说明。


二、前置条件

Jenkins 节点

  • 已安装:
    • git
    • build-essential
    • dpkg-dev
    • ssh / scp

目标 Debian 服务器

  • 支持 SSH
  • 有 sudo 权限用户

三、Jenkins 基本步骤(Pipeline 示例)

1️⃣ 拉取代码

stage('Checkout') {
    git branch: 'main', url: 'git@github.com:your/repo.git'
}

2️⃣ 构建并打包 Debian

假设你已有 debian/ 目录(使用 dpkg-buildpackage)

stage('Build Deb') {
    sh '''
        sudo apt update
        sudo apt install -y build-essential dpkg-dev
        dpkg-buildpackage -us -uc
    '''
}

生成的文件一般在上级目录:

../your-package_1.0.0_amd64.deb

3️⃣ 传输 .deb 到目标服务器

使用 SSH Publisher 或 scp:

stage('Deploy') {
    sh '''
        scp ../your-package_1.0.0_amd64.deb user@target:/tmp/
    '''
}

⚠ 建议使用 Jenkins Credentials + SSH Agent


4️⃣ 在目标服务器安装

stage('Install') {
    sh '''
        ssh user@target "sudo dpkg -i /tmp/your-package_1.0.0_amd64.deb || sudo apt -f install -y"
    '''
}

四、完整 Jenkinsfile 示例

pipeline {
    agent any
    stages {
        stage('Checkout') {
            steps {
                git 'git@github.com:your/repo.git'
            }
        }
        stage('Build Deb') {
            steps {
                sh 'dpkg-buildpackage -us -uc'
            }
        }
        stage('Deploy') {
            steps {
                sh 'scp ../*.deb user@target:/tmp/'
                sh 'ssh user@target "sudo dpkg -i /tmp/*.deb || sudo apt -f install -y"'
            }
        }
    }
}

五、更规范的做法(推荐)

✅ 使用 apt 仓库

  • 构建 .deb
  • 上传到:
    • aptly
    • Nexus
    • Artifactory
  • 目标机执行:
sudo apt update
sudo apt install your-package

优点:

  • 版本管理清晰
  • 支持回滚
  • 适合多节点

六、常见问题

dpkg 依赖错误

sudo apt -f install -y

权限问题

  • 使用 sudo
  • 或使用 Jenkins SSH Agent

构建环境不一致

  • 推荐使用 Docker Agent
agent {
    docker { image 'debian:12' }
}

如果你愿意,我可以:

  • 给你 Debian 包目录结构示例
  • 写 aptly + Jenkins 自动发布
  • 或针对 Docker / Kubernetes 部署

你现在的场景是?

0 踩