当前位置: 首页 > article >正文

脚本方式 迁移 老GITLAB项目到新GITLAB

背景

老gitlab 上面项目比较多, 新老GITLab 版本相差比较大,不能通过配置一键更新。

方案一:升级老gitlab代价大

方案二:手动导入导出比较耗时

方案三:脚本方式导入导出

脚本方式

1.导出项目

说明:GITLAB_TOKEN/GITLAB_URL需要替换为实际的老gitlab 地址

导出脚本:export-gitlab.sh

#!/bin/bash

function export(){
echo "導入中"    
# 设置 GitLab 令牌和 URL
GITLAB_TOKEN="admin accessToken"
GITLAB_URL="oldGitlabUrl"
# 获取项目列表
#projects=$(curl -s -H "PRIVATE-TOKEN: $GITLAB_TOKEN" "$GITLAB_URL/api/v4/projects?simple=true" | jq -r '.[].id')
GROUP_ID=`curl -s --header "PRIVATE-TOKEN: $GITLAB_TOKEN" "$GITLAB_URL/api/v4/groups/$1" | jq '.id'`
projects=$(curl -s -H "PRIVATE-TOKEN: $GITLAB_TOKEN" "$GITLAB_URL/api/v4/groups/$GROUP_ID/projects?simple=true&per_page=1000" | jq -r '.[].id')
echo $projects
# 导出项目
for project in $projects; do
  echo "开始导出$project"
  curl --request POST --header "PRIVATE-TOKEN: $GITLAB_TOKEN" "$GITLAB_URL/api/v4/projects/$project/export"
  sleep 20
  echo "开始下载$projects"
  curl --header "PRIVATE-TOKEN: $GITLAB_TOKEN" --remote-header-name --remote-name "$GITLAB_URL/api/v4/projects/$project/export/download"
done
}


if [ $# -lt 1 ]; then
    echo "请输入需要导出的namespace"
    exit 1
fi

# 根据输入参数执行不同的操作
case "$1" in
    *)
        echo "导出的namespace--$1"
        export $1
esac

执行命令:其中 $groupName 为需要导出的groupName

./export-gitlab.sh $groupName

2.导入项目

导入脚本:import-gitlab.sh

说明:GITLAB_TOKEN/GITLAB_URL需要替换为实际的新的gitlab 地址

#!/bin/bash
# 设置 GitLab 令牌和 URL
function import(){
# 设置 GitLab 令牌和 URL
GITLAB_TOKEN="access Token"
GITLAB_URL="newGitLanUrl"
for file in *.tar.gz; do
  PROJECT_NAME=`ls $file | grep -i gz | tr '_' '\n' | grep -v '^$' | head -4 | tail -1`
  echo "开始导入"$PROJECT_NAME
  curl --request POST --header "PRIVATE-TOKEN: $GITLAB_TOKEN" --form "path=$PROJECT_NAME" --form "namespace=$1" --form "file=@$file" "$GITLAB_URL/api/v4/projects/import"
done
}


 
if [ $# -lt 1 ]; then
    echo "请输入需要导入的groupName"
    exit 1
fi
 
# 根据输入参数执行不同的操作
case "$1" in
    *)
        echo "导入的groupName--$1"
        import $1
        ;;
esac

执行命令:其中 $groupName 为需要导入的groupName

./import-gitlab.sh $groupName

3.本地批量切换gitlab

切换gitlab地址脚本:update_gitlab_url.sh

#!/bin/bash

# 确保提供了组名和开始日期
if [ "$#" -ne 1 ]; then
  echo "Usage: $0 <project_dir>"
  exit 1
fi

# 定义旧的和新的 GitLab 地址
OLD_URL="OLD_URL"
NEW_URL="NEW_URL"

# 定义包含多个项目的目录路径
BASE_DIR=$1

# 遍历所有项目文件夹
for project_dir in "$BASE_DIR"/*; do
  if [ -d "$project_dir/.git" ]; then
    cd "$project_dir" || continue
    
    # 获取当前的远程 URL
    current_url=$(git remote get-url origin)

    # 判断是否需要替换
    if [[ "$current_url" == "$OLD_URL"* ]]; then
      # 更新远程 URL
      new_url="${current_url/$OLD_URL/$NEW_URL}"
      git remote set-url origin "$new_url"
      echo "Updated $project_dir: $current_url -> $new_url"
    else
      echo "No update needed for $project_dir"
    fi
  fi
done

执行命令:其中 $project_dir 为需要导入的项目的绝对地址

./update_gitlab_url.sh $project_dir


http://www.kler.cn/a/460349.html

相关文章:

  • oceanbase集群访问异常问题处理
  • Vue2: table加载树形数据的踩坑记录
  • C#二维数组详解
  • 慧集通iPaaS集成平台低代码培训-基础篇
  • 系统思考—信任
  • python openyxl 用法 教程
  • 前端vue+el-input实现输入框中文字高亮标红效果(学习自掘金博主文章)
  • 服务器系统维护与安全配置
  • 黑马商城:MybatisPlus
  • img上的title属性和alt属性的区别是什么?
  • Oracle 数据库 dmp文件从高版本导入低版本的问题处理
  • C++ 环境搭建 - 安装编译器、IDE选择
  • WebRTC音视频通话系统需求(项目预算)
  • ffmpeg 编译+ libx264
  • Golang 的AI 框架库
  • Windows电脑带有日历的桌面备忘记事工具
  • shell脚本的使用
  • 【基础还得练】EM算法中的E
  • 【Qt】信号和槽机制
  • 【MyBatis-Plus】让 MyBatis 更简单高效
  • 【Kafka 消息队列深度解析与应用】
  • 基于zynq在linux下的HDMI实战
  • labelme2yolov8-seg 草稿()
  • 头歌python:多进程和多线程
  • 年会头投票小游戏
  • 强化学习(1)