qinghechaoge 2024-03-31 19:19 采纳率: 0%
浏览 14
已结题

jenkens实现 滚动升级远程微服务

我想通过jenkens实现这样一个功能
我有一个windows机器,3个服务器,都装了docker
现在想在windows用jenkens实现 升级功能(用git和gitlab,直接jar包打包镜像)
1.先停止nacos的微服务
2.删除服务器1的微服务1镜像
3.升级微服务(仿idea的docker插件过程)
4.启动nacos的微服务
5.重复1234步骤,升级第二台服务器
6.重复1234步骤,升级第三台服务器
7.发送邮件

  • 写回答

5条回答 默认 最新

  • 阿里嘎多学长 2024-03-31 19:20
    关注

    以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:


    要通过Jenkins实现你描述的功能,你需要按照以下步骤配置Jenkins作业:

    1. 安装Jenkins和相关插件

    确保你的Windows Jenkins服务器已经安装了以下插件:

    • Docker Pipeline
    • Git plugin
    • Email Extension Plugin

    2. 配置Jenkins访问GitLab

    在Jenkins全局工具配置中添加Git,配置GitLab的SSH密钥,以便能够从GitLab克隆代码。

    3. 创建Jenkins作业

    创建一个新的自由风格或流水线项目,并配置如下:

    General配置:

    • 选择Git作为源码管理,填写你的GitLab项目URL和凭证。
    • 设置触发器,如定时触发或者 webhook 触发(如果GitLab支持)。

    Build环境:

    • 配置Docker环境,确保Jenkins可以访问到Docker守护进程。
    • 如果需要,也可以配置环境变量,比如NACOS服务的地址等。

    Build步骤:

    • 使用Docker Pipeline语法编写脚本,或者在Execute Windows batch command中执行命令行操作。下面是一个示例的Jenkinsfile(Pipeline语法):
    pipeline {
        agent any
        stages {
            stage('Checkout') {
                steps {
                    git 'https://your.gitlab.url/your/repo.git'
                }
            }
            stage('Build Image') {
                steps {
                    sh 'docker build -t your-imagelatest .'
                }
            }
            stage('Upgrade Service') {
                parallel {
                    stage('Server 1') {
                        steps {
                            script {
                                docker.withRegistry('https://your-registry-url', 'credentials-id') {
                                    docker.image('your-image:latest').inside {
                                        // 停止Nacos服务
                                        sh 'stop-nacos.sh'
                                        // 删除旧镜像
                                        sh 'docker rmi your-image:old-version || true'
                                        // 重新标记新镜像
                                        sh 'docker tag your-image:latest your-image:old-version'
                                        // 更新服务
                                        sh 'docker service update --image your-image:old-version your-service-name --update-delay 10s --update-parallelism 1'
                                    }
                                }
                            }
                        }
                    }
                    stage('Server 2') {
                        // 同上,但针对Server 2
                    }
                    stage('Server 3') {
                        // 同上,但针对Server 3
                    }
                }
            }
            stage('Start Nacos') {
                steps {
                    script {
                        docker.withRegistry('https://your-registry-url', 'credentials-id') {
                            docker.image('your-image:old-version').inside {
                                // 启动Nacos服务
                                sh 'start-nacos.sh'
                            }
                        }
                    }
                }
            }
        }
        post {
            success {
                emailext body: 'The deployment was successful.', subject: 'Deployment Success', recipients: 'team@example.com'
            }
            failure {
                emailext body: 'The deployment failed.', subject: 'Deployment Failed', recipients: 'team@example.com'
            }
        }
    }
    

    请注意,你需要根据实际情况替换your-image:latest, your-service-name, stop-nacos.sh, start-nacos.sh, your-registry-urlcredentials-id

    4. 测试和部署

    保存并运行Jenkins作业,确保所有步骤按预期工作。如果有任何问题,检查Jenkins的日志输出,调试并修复错误。

    5. 自动化

    一旦测试成功,你可以配置作业为自动触发,例如在代码提交到GitLab时通过webhook触发,或者设置定时任务定期执行。

    注意事项:

    • 请确保你的Docker服务在所有服务器上都配置了update-delayupdate-parallelism,以实现滚动更新。
    • 如果你的服务器上没有Docker Swarm,你需要手动管理每个服务器上的服务,而不是使用docker service update命令。
    • 脚本中的stop-nacos.shstart-nacos.sh应包含适当的命令来停止和启动Nacos服务,这些命令可能因你的具体环境而异。
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 3月31日
  • 创建了问题 3月31日

悬赏问题

  • ¥15 is not in the mmseg::model registry。报错,模型注册表找不到自定义模块。
  • ¥15 安装quartus II18.1时弹出此error,怎么解决?
  • ¥15 keil官网下载psn序列号在哪
  • ¥15 想用adb命令做一个通话软件,播放录音
  • ¥30 Pytorch深度学习服务器跑不通问题解决?
  • ¥15 部分客户订单定位有误的问题
  • ¥15 如何在maya程序中利用python编写领子和褶裥的模型的方法
  • ¥15 Bug traq 数据包 大概什么价
  • ¥15 在anaconda上pytorch和paddle paddle下载报错
  • ¥25 自动填写QQ腾讯文档收集表