解决Jenkins使用 Git 参数插件拉取 commit 列表缓慢问题

news2024/11/18 5:27:56

Jenkins使用 Git 参数插件拉取 commit 列表缓慢问题

  • 项目问题
  • 问题描述
  • 解决方案
  • 具体实现

项目问题

  • 在 Jenkins 中使用 Git 参数插件 进行参数化构建,具有多方面的重要性和好处。这不仅提高了构建的灵活性和透明度,还能大大提升开发和运维效率。以下是使用 Jenkins commit 列表的一些关键好处和其重要性:
  1. 灵活性和精确性

    • 选择特定版本构建:开发人员和运维人员可以选择特定的 Git commit、标签或分支进行构建。这对于需要回滚到之前的稳定版本、验证特定提交或进行分支构建非常重要。

    • 精确调试和测试:在调试或测试时,可以精确选择导致问题的提交进行构建和测试,迅速定位问题所在。

  2. 增强透明度和可追溯性

    • 可见的版本控制:所有的提交记录都可以在 Jenkins 中显示和选择,这使得版本控制更加透明,任何人都可以看到和选择构建哪个版本。

    • 构建历史记录:每次构建都与特定的 commit 关联,方便回溯和查看每个构建的来源和变化内容。

  3. 提高开发效率

    • 快速验证和集成:开发人员可以在 Jenkins 中选择提交后立即进行构建和测试,快速验证代码的正确性和集成效果。

    • 减少重复劳动:通过选择特定 commit 进行构建,减少了手动下载代码、切换分支和提交的繁琐步骤,提高了开发效率。

  4. 方便回归测试和部署

    • 回归测试:在发现新版本存在问题时,可以迅速回退到之前的稳定版本进行回归测试,确保问题得到有效解决。

    • 版本部署:运维人员可以选择特定的 commit 进行部署,确保部署的版本是经过验证和测试的,降低了发布风险。

  5. 支持复杂的构建需求

    • 多分支构建:支持对多个分支进行并行构建和测试,满足复杂的开发和集成需求。

    • 多环境构建:通过选择不同的 commit 或分支,分别构建和部署到不同的环境(如开发、测试、生产),确保各个环境的版本一致性和稳定性。

问题描述

  • 在 Jenkins 中,如果使用 Git 参数插件(Git Parameter Plugin)来选择 Git 标签或修订号进行参数化构建,有时可能会遇到拉取 commit 列表非常慢的问题。这通常是因为在拉取这些信息时,需要克隆整个项目,特别是当你的连接速度较慢或项目很大的时候,这个过程会非常耗时。
    在这里插入图片描述

在这里插入图片描述


解决方案

在大多数情况下,我们只需要部署最新的 commit 版本,只有在需要回滚时才会采用以前的 commit。因此,可以通过提供按 commit 版本和最新分支两种构建方式,提高部署效率和灵活性。以下是优化后的详细描述:

提供按 Commit 版本和最新分支两种构建方式的好处

  1. 部署最新版本的效率

    • 直接部署最新版本:在大多数情况下,开发和运维团队只需要部署最新的代码版本。在这种情况下,通过 Jenkins 可以直接选择最新 分支进行构建和部署,而不需要等待加载完整的 commit 列表。这种方式大大减少了部署的等待时间,提升了部署效率。

    • 实时性和及时性:直接使用最新版本进行部署,确保最新的功能和修复能够及时发布,满足快速迭代和持续交付的需求。

  2. 版本回滚的灵活性

    • 选择特定 commit 版本:在需要进行版本回滚时,可以通过 Jenkins 提供的 commit 列表选择特定的 commit 进行构建和部署。这种方式确保在出现问题时,能够迅速回退到之前的稳定版本,减少对生产环境的影响。

    • 问题定位和修复:通过选择特定的 commit 版本,可以精确定位和验证引入问题的提交,快速进行修复和重新部署。

具体实现

在 Jenkins 中,采用 Extended Choice Parameter 插件,可以实现按需选择构建最新 commit 或从 commit 列表中选择特定版本的功能。通过设置选项 LatestCommit,当选中该按钮时,可以直接选择构建最新 commit,无需等待列表获取;未选中时,则使用 commit 列表拉取的方式。以下是具体的实现方法:

  1. 安装 Extended Choice Parameter 插件
  • 登录到 Jenkins 的管理界面,导航到 “Manage Jenkins” -> “Manage Plugins”。

  • 在 “Available” 标签页中搜索 “Extended Choice Parameter” 插件并安装。

  1. 配置构建参数
  • 在需要配置的 Jenkins Job 中,导航到 “配置”(Configure)页面。

  • 在 “This project is parameterized” 部分,添加一个 “Extended Choice Parameter” 类型的参数。

  1. 配置 LatestCommit 选项
  • Name:设置参数名称,例如 LatestCommit。
  • Description:设置描述,例如 选择 true 构建最新 commit,无需等待列表获取;选择 false 使用 commit 列表。
  • Parameter Type:选择 Boolean Choice Parameter。
  • Value Choices:添加两个值:true 和 false。
  • Default Value:可以设置默认值为 false。
    在这里插入图片描述
  1. 安装 Git Parameter 插件
  • 登录 Jenkins 管理界面,导航到 “Manage Jenkins” -> “Manage Plugins”。
  • 在 “Available” 标签页中搜索 “Git Parameter” 插件并安装。
  1. 配置选择 commit 版本的参数
  • 添加一个 Git Parameter 类型的参数。
  • Name:设置参数名称,例如 commit。
  • Description:设置描述,例如 选择提交仓库的commit版本。
  • Type:选择 修订(commit)。
  • Branch:指定要拉取 commit 的分支,例如 origin/test。
    在这里插入图片描述
  1. pipeline脚本
pipeline {
    agent any
    
    environment {
        // 仓库地址和ID
        credentialsId = 'xxxxxxxxxxxxxxx'
        url = 'http://xxxxx/xxxx/xxxxxxx.git'
        
        // git分支名称
        branch = 'master'
    }
    
    
    stages {
        stage('拉取代码') {
            steps {
                script {
                    def branchesConfig
                    // 判断是否是最新提交
                    if ("${LatestCommit}" == "true") {
                        branchesConfig = [[name: "refs/heads/${branch}"]]  // 使用分支
                    } else {
                        branchesConfig = [[name: "${commit}"]]  // 使用特定的提交
                    }
        
                    // 执行 Git 拉取操作
                    checkout(
                        [$class: 'GitSCM',
                         branches: branchesConfig,
                         doGenerateSubmoduleConfigurations: false,
                         extensions: [],
                         userRemoteConfigs: [[credentialsId: "$credentialsId", url: "$url"]]]
                    )
                }
            }
        }
    }  

}
  1. 优化后的效果
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2242610.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Pytest-Bdd-Playwright 系列教程(9):使用 数据表(DataTable 参数) 来传递参数

Pytest-Bdd-Playwright 系列教程(9):使用 数据表(DataTable 参数) 来传递参数 前言一、什么是 datatable 参数?Gherkin 表格示例 二、datatable 参数的基本使用三、完整代码和运行效果完整的测试代码 前言 …

Windows内核编程准备

Windows内核编程 驱动 本课程涉及的驱动,是利用驱动程序的高级权限,去做一些用户层不能做的工作,严格来说,这些写出来的东西不能算是驱动,因为它不会驱动任何设备 权限 内核程序是运行在R0级的,因此比应…

uni-app快速入门(八)--常用内置组件(上)

uni-app提供了一套基础组件&#xff0c;类似HTML里的标签元素&#xff0c;不推荐在uni-app中使用使用div等HTML标签。在uni-app中&#xff0c;对应<div>的标签是view&#xff0c;对应<span>的是text&#xff0c;对应<a>的是navigator&#xff0c;常用uni-app…

【代码大模型】Compressing Pre-trained Models of Code into 3 MB论文阅读

Compressing Pre-trained Models of Code into 3 MB key word: code PLM, compression, GA算法 论文&#xff1a;https://dl.acm.org/doi/pdf/10.1145/3551349.3556964 代码&#xff1a;https://github.com/soarsmu/Compressor.git 【why】 1.问题描述&#xff1a; code LLM …

论文《基于现实迷宫地形的电脑鼠设计》深度分析——智能车驱动算法

论文概述 《基于现实迷宫地形的电脑鼠设计》是由吴润强、庹忠曜、刘文杰、项璟晨、孙科学等人于2023年发表的一篇优秀期刊论文。其针对现阶段电脑鼠计算量庞大且不适用于现实迷宫地形的问题&#xff0c;特基于超声波测距与传统迷宫算法原理&#xff0c;设计出一款可在现实迷宫地…

PG-DERN 解读:少样本学习、 双视角编码器、 关系图学习网络

本文提出了一种用于 分子属性预测 的 少样本学习&#xff08;Few-shot Learning&#xff09; 模型—— PG-DERN&#xff0c;该模型结合了 双视角编码器&#xff08;Dual-view Encoder&#xff09; 和 关系图学习网络&#xff08;Relation Graph Learning Network&#xff09; 双…

w039基于Web足球青训俱乐部管理后台系统开发

&#x1f64a;作者简介&#xff1a;多年一线开发工作经验&#xff0c;原创团队&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取&#xff0c;记得注明来意哦~&#x1f339;赠送计算机毕业设计600个选题excel文…

H3C NX30Pro刷机教程-2024-11-16

H3C NX30Pro刷机教程-2024-11-16 ref: http://www.ttcoder.cn/index.php/2024/11/03/h3c-nx30pro亲测无需分区备份 路由器-新机初始化设置路由器登录密码telnet进入路由器后台 刷机上传uboot到路由器后台在Windows环境下解压后的软件包中打开 tftpd64.exe在NX30Pro环境下通过以…

[2024最新] java八股文实用版(附带原理)---java集合篇

介绍一下常见的list实现类&#xff1f; ArrayList 线程不安全&#xff0c;内部是通过数组实现的&#xff0c;继承了AbstractList&#xff0c;实现了List&#xff0c;适合随机查找和遍历&#xff0c;不适合插入和删除。排列有序&#xff0c;可重复&#xff0c;当容量不够的时候…

python 异步编程之协程

最近在学习python的异步编程&#xff0c;这里就简单记录一下&#xff0c;免得日后忘记。 首先&#xff0c;python异步实现大概有三种方式&#xff0c;多进程&#xff0c;多线程和协程&#xff1b;多线程和多进程就不用多说了&#xff0c;基本上每种语言都会有多进行和多线程的…

20241112-Pycharm使用托管的Anaconda的Jupyter Notebook

Pycharm使用托管的Anaconda的Jupyter Notebook 要求 不要每次使用 Pycharm 运行 Jupyter 文件时都要手动打开 Anaconda 的 Jupyter Notebook 正文 pycharm中配置好会自动安装的&#xff0c;有的要自己配置 Pycharm中配置 文件 ——> 设置 ——> 语言和框架……&am…

Android 无签名系统 debug 版本APK push到设备引起的开机异常问题分析(zygote进程)

问题背景 前置操作&#xff1a; 替换原system/priv-app 目录下已有的应用包未未签名的debug版本&#xff0c;然后重启。 现象&#xff1a; 无法正常开机&#xff0c;卡在开机动画&#xff0c;并且pm没有起来&#xff0c;因为执行adb install 命令是返回“cmd: Cant find se…

【学习心得】数据分析三剑客跟学Gitee仓库

之前&#xff0c;自己在学习数据分析过程中的学习方法和思路&#xff0c;将那些摸索与实践中的心得体会分享出来&#xff0c;能够得到大家的喜欢、点赞我非常高兴&#xff0c;谢谢大家的支持&#xff01;这些正面的反馈对我来说&#xff0c;不仅是莫大的鼓励&#xff0c;更是持…

Vue 批量注册组件实现动态组件技巧

介绍 Vue 动态组件的应用场景很多,可应用于动态页签,动态路由等场景,其核心原理是批量注册。在Vue2和Vue3中实现原理相同,只是语法略有差异。 Vue2 实现 基于 webpack require.context() 是webpack提供的一个自动导入的API 参数1&#xff1a;加载的文件目录 参数2&#xff…

AndroidStudio-Activity的生命周期

一、Avtivity的启动和结束 从当前页面跳到新页面&#xff0c;跳转代码如下&#xff1a; startActivity(new Intent(源页面.this&#xff0c;目标页面.class))&#xff1b; 从当前页面回到上一个页面&#xff0c;相当于关闭当前页面&#xff0c;返回代码如下&#xff1a; finis…

DB-GPT系列(四):DB-GPT六大基础应用场景part1

一、基础问答 进入DB-GPT后&#xff0c;再在线对话默认的基础功能就是对话功能。这里我们可以和使用通义千问、文心一言等在线大模型类似的方法&#xff0c; 来和DB-GPT进行对话。 但是值得注意的是&#xff0c;DB-GPT的输出结果是在内置提示词基础之上进行的回答&#xff0c…

对PolyMarket的突袭

一天清晨六点&#xff0c;美国联邦调查局的探员冲进了纽约市的一间公寓。这间公寓的主人是26岁的Shane Copeland&#xff0c;一个有着凌乱头发的年轻人&#xff0c;也是一个加密货币狂热者。他运营着一个名为PolyMarket的网站——一个允许用户YZ全球事件结果的平台&#xff0c;…

DB_redis数据一致性(三)

前言 以mysql_redis 为例 介绍 数据一致性 1:数据一致行&#xff08;单进程/单线程&#xff09; 这个没什么说的&#xff0c;都是串行 2:数据一致行(多进程/多线程) 读的逻辑&#xff0c;先读缓存&#xff0c;缓存没有的话&#xff0c;就读数据库&#xff0c;然后取出数据后…

Jdbc学习笔记(三)--PreparedStatement对象、sql攻击(安全问题)

目录 &#xff08;一&#xff09;使用PreparedStatement对象的原因&#xff1a; 使用Statement对象编写sql语句会遇到的问题 ​编辑 &#xff08;二&#xff09;sql攻击 1.什么是sql攻击 2.演示sql攻击 &#xff08;三&#xff09;防止SQL攻击 1.PreparedStatement是什么 …

对称加密算法DES的实现

一、实验目的 1、了解对称密码体制基本原理 2、掌握编程语言实现对称加密、解密 二、实验原理 DES 使用一个 56 位的密钥以及附加的 8 位奇偶校验位&#xff0c;产生最大 64 位的分组大小。这是一个迭代的分组密码&#xff0c;使用称为 Feistel 的技术&#xff0c;其中将加密…