Ceph 在 gitlab 上的只读镜像

loic

gitlab-mirrors 脚本已安装,以设置一个只读 Ceph 镜像,每小时更新一次。它用于永久链接,例如 src/osd/ClassHandler.cc#L170

gitlab-mirrorsconfig.sh 如下

# 环境变量文件

gitlab-mirrors 设置

# git-mirrors 将要运行的用户。 system_user="gitmirror" # $system_user 用户的家目录路径 user_home="/home/${system_user}" # 存储库目录,gitlab-mirrors 将在其中包含镜像存储库的副本,然后再将其推送到 gitlab。 repo_dir="${user_home}/repositories" # colorize add_mirror.sh、update_mirror.sh 和 git-mirrors.sh 命令的输出。 enable_colors=true # 这些是传递给 git-svn 的附加选项。 在命令行中键入 "git help svn" git_svn_additional_options="-s" # 强制 gitlab-mirrors 不创建 gitlab 远程仓库,因此必须提供远程 URL。 (被 no_remote_set 取代) no_create_set=false # 强制 gitlab-mirrors 仅允许本地远程仓库。 no_remote_set=false # 启用强制获取和推送。 如果上游强制推送了引用,则会覆盖引用。 仅适用于 git 项目。 force_update=false # 此选项用于修剪镜像。 如果上游删除了分支,则该更改将传播到您的 GitLab 镜像。 仅适用于 git 项目。 prune_mirrors=false

Gitlab 设置

# 这是 Gitlab 组,所有项目镜像都将分组到该组中。 gitlab_namespace="Ceph" # 这是您的 Gitlab 服务器的基本 Web URL。 gitlab_url="http://workbench.dachary.org" # 您在 Gitlab 中创建的特殊用户,其唯一目的是更新镜像站点和管理 $gitlab_namespace 组。 gitlab_user="gitmirror" # 为您的 $gitlab_user 生成一个令牌,并将其设置在此处。 gitlab_user_token_secret="$(head -n1 "${user_home}/private_token" 2> /dev/null || echo "")" # 验证签名的 SSL 证书? ssl_verify=false # 通过 http 推送到 GitLab? 否则将通过 SSH 推送项目。 http_remote=false

Gitlab 新项目默认设置。 如果需要由

gitlab-mirrors 创建项目,则将分配以下值作为默认值。

# 值必须为 true 或 false issues_enabled=false wall_enabled=false wiki_enabled=false snippets_enabled=false merge_requests_enabled=true public=true

默认情况下,镜像可供未经身份验证的用户访问 public=true,并且由于 gitlab 根本没有 https,因此禁用 SSL 验证:ssl_verify=false
虽然 这三个简单的步骤 包含许多子步骤,但可以毫无问题地完成它们。
对于对镜像的内容进行精细控制(发布分支、标签和来自 github 的拉取请求),可以使用以下方法:

#!/bin/bash git fetch --force origin +refs/heads/*:refs/heads/* +refs/tags/*:refs/tags/* +refs/pull/*:refs/pull/* git for-each-ref 'refs/pull/*/head' | cut -f2 | xargs --no-run-if-empty --max-args 1 git update-ref -d git push --prune --force gitlab $(for branch in dumpling emperor firefly giant next master ; do echo +refs/heads/$branch:refs/heads/$branch ; done) +refs/pull/*:refs/heads/pull/* git prune

如果可以成功合并拉取请求的头部 refs/pull/XXX/head,则 merge 引用存在。 它们被删除以仅保留每个拉取请求的一个引用。 所有拉取请求引用都映射到 refs/head,以便 GitLab CI 可以注意到它们。 如果它们保留在 refs/pull 下,则不会。
它每小时运行一次,使用

$ cat ~/crontab @hourly ( date ; /home/gitmirror/mirror.sh ) > /home/gitmirror/cron.log 2>&1