温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

怎样用Jenkins部署容器

发布时间:2026-09-05 00:09:02 来源:亿速云 阅读:102 作者:小樊 栏目:系统运维

下面给你一个**用 Jenkins 部署容器(以 Docker 为例)**的完整思路和常见做法,适合从 0 到 1 落地。


一、总体思路

典型流程:

代码提交 (Git)
   ↓
Jenkins 拉代码
   ↓
构建镜像 (Docker Build)
   ↓
推送镜像 (Docker Registry)
   ↓
部署容器 (Docker Run / Docker Compose / K8s)

二、环境准备

1. 基础环境

  • Jenkins 服务器(已安装 Jenkins)
  • 安装以下插件:
    • Git
    • Docker Pipeline
    • Pipeline
  • 服务器上安装:
    • Docker
    • (可选)Docker Compose / Kubernetes

2. Jenkins 权限

  • Jenkins 用户加入 docker 组:
sudo usermod -aG docker jenkins
sudo systemctl restart jenkins

三、方式一:Jenkins + Docker 直接部署(最简单)

1. 编写 Dockerfile

FROM openjdk:17
COPY app.jar /app.jar
ENTRYPOINT ["java","-jar","/app.jar"]

2. 编写 Jenkinsfile(Pipeline)

pipeline {
    agent any

    stages {
        stage('拉取代码') {
            steps {
                git 'https://github.com/your/repo.git'
            }
        }

        stage('构建镜像') {
            steps {
                sh 'docker build -t myapp:latest .'
            }
        }

        stage('停止旧容器') {
            steps {
                sh '''
                docker rm -f myapp || true
                '''
            }
        }

        stage('启动容器') {
            steps {
                sh '''
                docker run -d --name myapp -p 8080:8080 myapp:latest
                '''
            }
        }
    }
}

✅ 适合:

  • 单台服务器
  • 测试环境
  • 简单服务

四、方式二:Jenkins + 镜像仓库(推荐)

流程

构建 → 推送到 Harbor / Docker Hub → 服务器拉取运行

Jenkinsfile 示例

environment {
    REGISTRY = "registry.example.com"
    IMAGE = "myapp"
}

stages {
    stage('Build') {
        steps {
            sh 'docker build -t $REGISTRY/$IMAGE:latest .'
        }
    }

    stage('Push') {
        steps {
            withCredentials([usernamePassword(
                credentialsId: 'docker-registry',
                usernameVariable: 'USER',
                passwordVariable: 'PASS'
            )]) {
                sh '''
                echo $PASS | docker login $REGISTRY -u $USER --password-stdin
                docker push $REGISTRY/$IMAGE:latest
                '''
            }
        }
    }

    stage('Deploy') {
        steps {
            sh '''
            docker pull $REGISTRY/$IMAGE:latest
            docker rm -f myapp || true
            docker run -d --name myapp -p 8080:8080 $REGISTRY/$IMAGE:latest
            '''
        }
    }
}

五、方式三:Jenkins + Docker Compose

docker-compose.yml

version: "3"
services:
  app:
    image: myapp:latest
    ports:
      - "8080:8080"

Jenkins 部署阶段

stage('Deploy') {
    steps {
        sh '''
        docker-compose down
        docker-compose up -d
        '''
    }
}

六、方式四:Jenkins + Kubernetes(生产级)

适用场景:

  • 多节点
  • 高可用
  • 自动扩缩容

常见做法

  • Jenkins 构建镜像
  • 推送到镜像仓库
  • 使用 kubectl 或 Helm 更新 Deployment
stage('Deploy to K8s') {
    steps {
        sh '''
        kubectl set image deployment/myapp \
        myapp=registry.example.com/myapp:latest
        '''
    }
}

七、常见问题

1. Jenkins 无法执行 docker

  • 权限问题(docker 组)
  • 使用 sudo 不推荐

2. 容器端口冲突

  • 先 docker rm -f
  • 或用不同端口

3. 镜像太大

  • 使用多阶段构建
  • 精简基础镜像

八、推荐方案

场景 推荐方式
学习 / 测试 Docker Run
小项目 Docker Compose
企业生产 Jenkins + K8s

如果你愿意,我可以:

  • ✅ 给你一个完整可运行 Jenkinsfile
  • ✅ 按 Java / Node / Python 项目定制
  • ✅ 教你 Jenkins + K8s 实战

你现在是打算部署到单台服务器还是 K8s?

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手