gitlab初始化+API批量操作

几年没接触gitlab了,新版本装完以后代码提交到默认的main分支,master不再是主分支
项目有几十个仓库,研发提交代码后仓库地址和之前的发生了变化
有几个点 需要注意
1、修改全局默认分支
2、关闭分支保护
在这里插入图片描述

上面修改了全局配置不会影响已经创建好的项目,所以还需要批量修改已创建的项目
先修改Group的默认分支,不会影响已存在的项目在这里插入图片描述
修改gitlab全局的默认分支
在这里插入图片描述

这就引出了需求,要获取当前仓库下所有仓库地址,还要修改所有仓库的默认分支,从main修改为master

生成AccessToken在这里插入图片描述

创建个人访问令牌

填写信息时,确保勾选以下权限(Scopes):
api
read_api
read_repository
write_repository
admin_mode(如果是要批量修改默认分支,可能需要这个权限)
# 权限解析
api 和 read_api: 基本的 API 访问权限
read_repository: 读取仓库信息
write_repository: 修改仓库设置(包括默认分支)
admin_mode: 管理员级别的操作权限

需求1-获取仓库下所有项目地址

import requests
import sys
import time
from typing import List, Dictclass GitLabProjectFetcher:def __init__(self, base_url: str, private_token: str):"""初始化 GitLab API 客户端Args:base_url: GitLab 实例的基础 URLprivate_token: GitLab 个人访问令牌"""self.base_url = base_url.rstrip('/')self.headers = {'PRIVATE-TOKEN': private_token}self.session = requests.Session()self.session.headers.update(self.headers)def get_all_projects(self) -> List[Dict]:"""获取所有项目"""projects = []page = 1while True:url = f"{self.base_url}/api/v4/projects"params = {'page': page,'per_page': 100,'order_by': 'path','sort': 'asc'}try:response = self.session.get(url, params=params)response.raise_for_status()batch = response.json()if not batch:breakprojects.extend(batch)page += 1print(f"已获取 {len(projects)} 个项目...")time.sleep(0.5)  # 避免请求过快except requests.exceptions.RequestException as e:print(f"获取项目列表时发生错误: {str(e)}")sys.exit(1)return projectsdef main():# 配置信息 - 根据实际环境修改GITLAB_URL = "http://gitlab地址"PRIVATE_TOKEN = "accesstoken"fetcher = GitLabProjectFetcher(GITLAB_URL, PRIVATE_TOKEN)try:print("正在获取项目列表...")projects = fetcher.get_all_projects()print("\n所有项目的 Git SSH Clone URL:")print("-" * 80)# 按照路径排序sorted_projects = sorted(projects, key=lambda x: x['path_with_namespace'])for project in sorted_projects:if 'ssh_url_to_repo' in project:print(project['ssh_url_to_repo'])print(f"\n总共找到 {len(projects)} 个项目")except Exception as e:print(f"发生错误: {str(e)}")sys.exit(1)if __name__ == "__main__":main()

需求2-修改所有仓库默认的分支为master

root@prd-ops-cicd-jenkins33:/data/ops# cat chage-branch.py 
import requests
import sys
import time
from typing import List, Dictclass GitLabProjectManager:def __init__(self, base_url: str, private_token: str):"""初始化 GitLab API 客户端"""self.base_url = base_url.rstrip('/')self.headers = {'PRIVATE-TOKEN': private_token}self.session = requests.Session()self.session.headers.update(self.headers)def get_all_projects(self) -> List[Dict]:"""获取所有项目"""projects = []page = 1while True:url = f"{self.base_url}/api/v4/projects"params = {'page': page,'per_page': 100,'order_by': 'path','sort': 'asc','simple': False}try:print(f"正在获取第 {page} 页...")response = self.session.get(url, params=params)response.raise_for_status()batch = response.json()if not batch:breakprojects.extend(batch)page += 1time.sleep(0.5)except requests.exceptions.RequestException as e:print(f"获取项目列表时发生错误: {str(e)}")sys.exit(1)return projectsdef check_branch_exists(self, project_id: int, branch: str) -> bool:"""检查分支是否存在"""url = f"{self.base_url}/api/v4/projects/{project_id}/repository/branches/{branch}"response = self.session.get(url)return response.status_code == 200def update_default_branch(self, project_id: int, project_name: str, new_branch: str) -> bool:"""更新项目的默认分支"""# 检查目标分支是否存在if not self.check_branch_exists(project_id, new_branch):print(f"项目 {project_name} 中不存在 {new_branch} 分支,跳过")return Falseurl = f"{self.base_url}/api/v4/projects/{project_id}"data = {'default_branch': new_branch}try:response = self.session.put(url, json=data)response.raise_for_status()return Trueexcept requests.exceptions.RequestException as e:print(f"更新失败: {str(e)}")return Falsedef main():# 配置信息GITLAB_URL = "http://gitlab地址"PRIVATE_TOKEN = "accesstoken"NEW_DEFAULT_BRANCH = "master"manager = GitLabProjectManager(GITLAB_URL, PRIVATE_TOKEN)try:# 获取所有项目print("正在获取项目列表...")projects = manager.get_all_projects()print(f"\n找到 {len(projects)} 个项目")# 更新默认分支success_count = 0fail_count = 0skipped_count = 0print("\n开始更新默认分支...")for project in projects:project_id = project['id']project_name = project['path_with_namespace']current_default = project.get('default_branch', '')print(f"\n处理项目: {project_name}")print(f"当前默认分支: {current_default}")if current_default == NEW_DEFAULT_BRANCH:print("默认分支已经是 master,跳过")skipped_count += 1continueif manager.update_default_branch(project_id, project_name, NEW_DEFAULT_BRANCH):success_count += 1print(f"✓ 成功将默认分支更新为 {NEW_DEFAULT_BRANCH}")else:fail_count += 1print(f"✗ 更新失败")# 打印总结print("\n更新完成!")print(f"成功更新: {success_count} 个项目")print(f"更新失败: {fail_count} 个项目")print(f"跳过项目: {skipped_count} 个项目")print(f"总项目数: {len(projects)} 个项目")except Exception as e:print(f"发生错误: {str(e)}")sys.exit(1)if __name__ == "__main__":main()

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何用上AI视频工具Sora,基于ChatGPT升级Plus使用指南

没有GPT,可以参考这个教程:详情移步至底部参考原文查看哦~ 1.准备工作 详情移步至底部参考原文查看哦~ 详情移步至底部参考原文查看哦~ 4.Sora使用 详情移步至底部参考原文查看哦 参考文章:【包教包会】如何用上AI视频工具Sora&#xff…

如何查看K8S集群中service和pod定义的网段范围

在我们创建部署K8S集群的开头时候 不是需要在master节点上执行一条这样的命令嘛? kubeadm init --apiserver-advertise-address192.168.60.130 --control-plane-endpointcluster-master --image-repository registry.cn-hangzhou.aliyuncs.com/google_containers -…

使用 Marp 将 Markdown 导出为 PPT 后不可编辑的原因说明及解决方案

Marp 是一个流行的 Markdown 演示文稿工具,能够将 Markdown 文件转换为 PPTX 格式。然而,用户在使用 Marp 导出 PPT 时,可能会遇到以下问题: 导出 PPT 不可直接编辑的原因 根据 Marp GitHub 讨论,Marp 导出的 PPTX 文…

redis 缓存使用

工具类 package org.springblade.questionnaire.redis;import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; import org.springframework.beans.factor…

level2逐笔委托查询接口

沪深逐笔委托队列查询 前置步骤 分配数据库服务器 查询模板 以下是沪深委托队列查询的请求模板&#xff1a; http://<数据库服务器>/sql?modeorder_book&code<股票代码>&offset<offset>&token<token>查询参数说明 参数名类型说明mo…

游戏AI实现-寻路算法(DFS)

​深度优先搜索算法&#xff08;英语&#xff1a;Depth-First-Search&#xff0c;缩写为DFS&#xff09;是一种用于遍历或搜索树或图的算法。 寻路地图搭建&#xff1a; 游戏AI实现-寻路地图搭建-CSDN博客 算法过程&#xff1a;遍历方向为从竖直向上沿顺时针方向 1.首先将开…

Yolov3源码解析

1. 制作数据集 我做的是三目标检测&#xff0c;人狗马目标检测 然后使用精力标注助手对图像进行目标标注。到出为xml文件。 得到这样格式的数据集 1. 1 读取xml文件&#xff0c;求建议框&#xff0c;向量数据库 import os from xml.dom.minidom import parse from kmeans im…

《变形金刚:赛博坦的陨落》游戏启动难题:‘buddha.dll’缺失的七大修复策略

《变形金刚&#xff1a;赛博坦的陨落》游戏启动时提示buddha.dll缺失&#xff1a;原因与解决方案 作为一名软件开发从业者&#xff0c;我在日常工作中经常遇到电脑游戏运行时出现的各种问题&#xff0c;如文件丢失、文件损坏和系统报错等。今天&#xff0c;我们就来探讨一下《…

java全栈day16--Web后端实战(数据库)

一、数据库介绍 二、Mysql安装&#xff08;自行在网上找&#xff0c;教程简单&#xff09; 安装好了进行Mysql连接 连接语法&#xff1a;winr输入cmd&#xff0c;在命令行中再输入mysql -uroot -p密码 方法二&#xff1a;winr输入cmd&#xff0c;在命令行中再输入mysql -uroo…

简单配置,全面保护:HZERO审计服务让安全触手可及

HZERO技术平台&#xff0c;凭借多年企业资源管理实施经验&#xff0c;深入理解企业痛点&#xff0c;为您提供了一套高效易用的审计解决方案。这套方案旨在帮助您轻松应对企业开发中的审计挑战&#xff0c;确保业务流程的合规性和透明度。 接下来&#xff0c;我将为大家详细介绍…

Microi吾码|开源低代码.NET、VUE低代码项目,表单引擎介绍

Microi吾码&#xff5c;开源低代码.NET、VUE低代码项目&#xff0c;表单引擎介绍 一、摘要二、Microi吾码介绍2.1 功能介绍2.2 团队介绍2.3 上线项目案例 三、Microi吾码表单引擎是什么&#xff1f;四、Microi吾码表单引擎功能4.1 模块引擎 - 由表单引擎驱动4.2 流程引擎 - 由表…

Spring Cloud Sleuth 分布式链路追踪入门

您好&#xff0c;我是今夜写代码,今天学习下分布式链路组件Spring Cloud Sleuth。 本文内容 介绍了分布式链路的思想 Sleuth 和 Zipkin 简单集成Demo,并不涉及 Sleuth原理。 为什么要用链路追踪&#xff1f; 微服务架构下&#xff0c;一个复杂的电商应用&#xff0c;完成下…

低级计算机网络知识总结

1 应用层 1.1 HTTP(TCP) 浏览器访问WWW服务器过程&#xff1a;首先进行域名解析&#xff0c;然后通过TCP向服务器发送连接请求 HTTP本身是无连接&#xff0c;无状态的。无状态特性使服务器能够支持大量的并发HTTP请求。实际应用中&#xff0c;通常使用Cookie加数据库跟踪用户…

了解 SpringMVC 请求流程

文章目录 1. Spring 基础 - SpringMVC 请求流程1.1 引入1.2 什么是 MVC1.3 什么是 Spring MVC1.4 请求流程核心架构的具体流程步骤补充 1.5 案例**Maven 包引入****业务代码的编写**DaoServiceControllerwebapp 下的 web.xmlspringmvc.xmlJSP 视图 2. Spring 进阶 - Dispatcher…

基于Spring Boot的数码产品抢购系统

一、系统背景与目的 随着电子商务的快速发展&#xff0c;数码产品在线销售已成为主流趋势。然而&#xff0c;传统的数码产品销售方式存在抢购过程繁琐、库存管理混乱、用户体验不佳等问题。为了解决这些问题&#xff0c;基于Spring Boot的数码产品抢购系统应运而生。该系统旨在…

【MambaSR复现】【Windows系统下Mamba环境配置】triton 、causal conv1d和mamba_ssm模块配置保姆教程

注&#xff1a;在此之前确保环境中已经安装packaging模块 pip install packaging若此模块安装过程中出现图下报错&#xff1a;这是由于环境创建时候的权限问题导致的&#xff0c;具体解决方案见我另一篇博文&#xff01; 1.Triton模块安装 注意&#xff1a;必须先安装triton&…

git branch -r(--remotes )显示你本地仓库知道的所有 远程分支 的列表

好的&#xff0c;git branch -r 这个命令用于列出远程分支。让我详细解释一下&#xff1a; 命令&#xff1a; git branch -rdgqdgqdeMac-mini ProductAuthentication % git branch -rorigin/main作用&#xff1a; 这个命令会显示你本地仓库知道的所有 远程分支 的列表。它不…

spring使用rabbitmq当rabbitmq集群节点挂掉 spring rabbitmq怎么保证高可用,rabbitmq网络怎么重新连接

##spring rabbitmq代码示例 Controller代码 import com.alibaba.fastjson.JSONObject; import com.newland.mi.config.RabbitDMMQConfig; import org.springframework.amqp.core.Message; import org.springframework.amqp.core.MessageProperties; import org.springframewo…

【人工智能学习之HDGCN18关键点修改】

【人工智能学习之HDGCN18关键点修改】 训练部分修改部分 训练部分 请参考文章&#xff1a;【人工智能学习之HDGCN训练自己的数据集】 修改部分 参考源码中25关键点的区域划分&#xff0c;我们将18关键点划分为&#xff1a; 头部&#xff1a; 鼻子左眼和左耳右眼和右耳 上肢…

面试题整理3----nc命令的常见用法

面试题整理3----nc命令的常见用法 1. NC是什么2. NC的常用参数2.1 开启指定端口TCP监听(-l小写的L)2.2 测试端口是否能访问(-v)2.3 开启指定端口UDP监听(-u)2.4 端口扫描(-z)2.5 指定超时时间(-w)2.6 指定本地端口号连接(-p)2.7 指定的命令(-e) 1. NC是什么 nc&#xff08;Net…