使用docker-compose + Jenkins pipeline流水线部署Spring boot项目

该文章详细介绍了如何通过Jenkins创建pipeline任务,配置Git仓库获取代码,使用Maven构建项目,以及通过SSH将构建的jar包、Dockerfile和docker-compose.yaml推送到远程服务器进行部署的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

docker、docker-compose的安装请看这里https://blog.youkuaiyun.com/andyLyysh/article/details/126738190?spm=1001.2014.3001.5502

jenkins安装请看这里https://blog.youkuaiyun.com/andyLyysh/article/details/128585967?spm=1001.2014.3001.5502

1、创建pipeline任务

在这里插入图片描述

2、配置任务

2.1 配置git仓库地址拉取代码

在这里插入图片描述
在这里插入图片描述

2.2、使用maven构建项目

在pipeline script中引入maven工具,使用 tools 来引入需要的工具
在这里插入图片描述
图中的maven工具的名称maven3.8.6,必须要与Global Tool Configuration中配置安装的maven名称一致
在这里插入图片描述
关于jdk的建议,Jenkins容器默认使用的是openjdk,在我们开发中几乎都是使用orcale jdk,所以需要配置jdk,避免在打包中出现不必要的错误
在这里插入图片描述

2.4、配置ssh推送目标jar包到远程服务器

在这里插入图片描述

2.5、配置推送docker文件及docker执行命令

在这里插入图片描述
在这里插入图片描述

3、完整示例代码

pipeline {
    agent any
    
    tools {
        maven "maven3.8.6"
        jdk "java8"
    }
    
    stages {
        stage ("拉取代码") {
            steps {
                git branch: 'dev', credentialsId: 'e0939905-8a6b-445d-906d-fe469c2fcb8a', url: 'http://192.168.13.226:3000/zhush/topfus-social.git'
            }
        }
        
        stage ("构建项目") {
            steps {
                sh """
                    mvn clean package
                """
            }
        }
        
        stage ("推送social-admin") {
            steps {
                sshPublisher(publishers: [sshPublisherDesc(configName: 'localserver', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: '''cd ~/social
                pwd
                cp ./social-admin.jar /data/sh/social-admin-api/''', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '/social', remoteDirectorySDF: false, removePrefix: 'topfus-admin-api/target/', sourceFiles: '**/social-admin.jar')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
            }
        }
        
        stage ("推送Dockerfile") {
            steps {
                sshPublisher(publishers: [sshPublisherDesc(configName: 'localserver', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: '''cd ~/social
                cp ./Dockerfile /data/sh/social-admin-api/''', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '/social', remoteDirectorySDF: false, removePrefix: 'topfus-admin-api/', sourceFiles: './topfus-admin-api/Dockerfile')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
            }
        }
        
        stage ("推送docker-compose.yaml") {
            steps {
                sshPublisher(publishers: [sshPublisherDesc(configName: 'localserver', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: '''cd ~/social
                cp ./docker-compose.yaml /data/sh/
                cd /data/sh/
                docker-compose up -d --build''', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '/social', remoteDirectorySDF: false, removePrefix: '', sourceFiles: './docker-compose.yaml')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
            }
        }
    }
}
### 如何在 Jenkins使用 Docker Compose 为了在 Jenkins 配置中集成 `docker-compose`,可以按照以下方式操作: #### 1. **安装必要的工具** 确保目标机器已安装 `Docker` 和 `docker-compose` 工具。可以通过命令验证其版本号: ```bash docker --version docker-compose --version ``` 如果未安装,则需先完成安装过程[^2]。 --- #### 2. **配置 Jenkins 的环境变量** 为了让 Jenkins 能够调用 `docker-compose` 命令,在 Jenkins 主机上设置 PATH 或通过全局工具配置来指定路径。可以在 Jenkinsfile 或 Pipeline Script 中定义如下内容: ```groovy environment { DOCKER_COMPOSE_PATH = '/usr/local/bin/docker-compose' } ``` 或者直接在脚本中调用绝对路径下的 `docker-compose` 可执行文件。 --- #### 3. **编写 Jenkins Pipeline 文件** 以下是基于 Declarative Pipeline 的示例代码片段,展示如何利用 `docker-compose` 构建服务并运行测试任务: ```groovy pipeline { agent any tools { dockerCompose "docker-compose" } stages { stage('Clone Repository') { steps { git 'https://your-repo-url.git' // 替换为实际仓库地址 } } stage('Build Services') { steps { script { sh "${env.DOCKER_COMPOSE_PATH} pull" // 下载镜像 sh "${env.DOCKER_COMPOSE_PATH} up -d --build" // 后台启动容器 } } } stage('Run Tests') { steps { sh "${env.DOCKER_COMPOSE_PATH} exec app bash -c './run-tests.sh'" // 执行测试脚本 } } stage('Stop Containers') { post { always { sh "${env.DOCKER_COMPOSE_PATH} down" // 清理资源 } } } } } ``` 此脚本会依次克隆 Git 仓库、构建所需的服务、运行测试以及清理容器实例。 --- #### 4. **处理权限问题** 有时可能会遇到权限不足的情况(如无法访问 `/var/run/docker.sock`)。解决办法是在启动 Jenkins 容器时挂载宿主机上的 Docker Socket 到容器内部: ```yaml services: jenkins-master: image: jenkins/jenkins:lts volumes: - /var/run/docker.sock:/var/run/docker.sock ``` 这样可以让 Jenkins 使用宿主机的 Docker Daemon 来管理容器生命周期[^1]。 --- #### 5. **监控与日志记录** 当某些阶段失败时,可通过查看日志定位错误原因。例如,捕获 `docker-compose logs` 输出到控制台或保存成文件以便后续分析: ```groovy sh "${env.DOCKER_COMPOSE_PATH} logs > compose-logs.txt || true" archiveArtifacts artifacts: 'compose-logs.txt', onlyIfSuccessful: false ``` 这一步骤有助于排查潜在问题,并保留调试数据供开发人员参考[^4]。 --- ### 注意事项 - 如果计划频繁部署多个项目,请考虑引入 CI/CD 平台专用插件(比如 Blue Ocean 插件),从而简化工作流设计。 - 对于大规模集群场景下推荐采用 Kubernetes 替代传统单节点方案以提高扩展性和稳定性[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

珍朱(珠)奶茶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值