如何通过 API 更改 Gitlab 中的镜像设置?

How can I change the mirroring settings in Gitlab over the API?

我想为我的每个存储库更改 Gitlab 镜像设置。是否可以通过 Gitlab API?

Gitlab WebUi 允许的选项如下:

如何通过 API 更改它们?

备注:这与不是同一个问题,因为我的问题是如何启动镜像,这里我想知道如何更改镜像设置。

https://docs.gitlab.com/ee/api/projects.html#edit-project上有几个配置拉取镜像的参数:

> mirror
> mirror_user_id
> mirror_trigger_builds
> only_mirror_protected_branches
> mirror_overwrites_diverged_branches

Note: If your HTTP repository is not publicly accessible, add authentication information to the URL: https://username:password@gitlab.company.com/group/project.git where password is a public access key with the api scope enabled

注意推送镜像还没有实现:https://gitlab.com/gitlab-org/gitlab-ee/issues/7599

如果有人搜索我的脚本,我会把它放在这里:https://github.com/SeppPenner/GitlabAutoPullMirroring (mirrored here: https://gitlab.com/SeppPenner/GitlabAutoPullMirroring)

我永远找不到镜像 URL 的 API 端点。你可以通过数据库来解决这个问题,但我无法弄清楚如何从数据库中隐藏我正在使用的远程登录令牌(用于 BitBucket)。当您通过 Web 界面时,它必须对其进行加密或将其放在 import_url 以外的某个位置。无论如何,这是我为一些新项目建立镜像所做的更改。您可以从 gitlab-psql 控制台执行此操作。

再次重申,URL,包括密码,将在数据库中公开,您可能不希望长期如此。在我的例子中,我最初从 BitBucket 导入了 100 多个回购协议,我们打算在几周内关闭镜像。

您需要 GitLab 项目 ID。

UPDATE projects SET import_type = 'bare_repository' WHERE id=123;
UPDATE projects SET import_url = 'https://[user]:[API token]@bitbucket.org/path/to/repo.git' WHERE id=123;
UPDATE projects SET mirror_user_id = '21' WHERE id=123;
UPDATE projects SET mirror = 't' WHERE id=123;
UPDATE projects SET only_mirror_protected_branches = 'f' WHERE id=123;
UPDATE projects SET mirror_overwrites_diverged_branches = 'f' WHERE id=123;
UPDATE project_mirror_data SET next_execution_timestamp = '2018-07-01 00:42:47.701103' WHERE project_id=123;

curl --header "PRIVATE-TOKEN:[your_gitlab_private_token]" --request POST https://gitlab.yourdomain.com/api/v4/projects/123/mirror/pull

备注:

  • 那个mirror_user_id大概是你自己吧
  • next_execution_timestamp好像不能为空,随便填个日期吧
  • curl 调用触发拉取。您也可以通过 Web 界面执行此操作。