- 配置推送镜像
- 保留偏离的引用
- 从 GitLab 设置推送镜像到 GitHub
- 从 GitLab 设置推送镜像到 AWS CodeCommit
- 设置到启用 2FA 的另一个 GitLab 实例的推送镜像
- 相关主题
推送镜像
推送镜像是一个下游仓库镜像上游仓库中所做的提交。推送镜像被动地接收上游仓库中所做提交的副本。为了防止镜像与上游仓库发生偏离,请不要直接向下游镜像推送提交,而是向上游仓库推送提交。
虽然拉取镜像会定期从上游仓库获取更新,但推送镜像只有在以下情况下才会接收更改:
- 提交被推送到上游 GitLab 仓库。
- 管理员强制更新镜像。
当您向上游仓库推送更改时,推送镜像会在以下时间内接收:
- 五分钟内。
- 如果启用了仅镜像受保护的分支,则在一分钟内。
当一个分支合并到默认分支并在源项目中删除时,它将在下一次推送时从远程镜像中删除。具有未合并更改的分支将被保留。如果一个分支发生偏离,镜像仓库部分会显示错误。
极狐GitLab 静默模式会禁用推送到和从远程镜像拉取。
配置推送镜像
要为现有项目设置推送镜像:
- 在左侧边栏中,选择搜索或转到并找到您的项目。
- 选择设置 > 仓库。
- 展开镜像仓库。
- 输入仓库 URL。
- 在镜像方向下拉列表中,选择推送。
- 选择一种认证方法。有关更多信息,请参阅镜像的认证方法。
- 如有必要,选择仅镜像受保护的分支。
- 如果需要,选择保留偏离的引用。
- 要保存配置,选择镜像仓库。
通过 API 配置推送镜像
您还可以通过远程镜像 API创建和修改项目推送镜像。
保留偏离的引用
默认情况下,如果远程(下游)镜像上的任何引用(分支或标签)与本地仓库发生偏离,上游仓库将覆盖远程上的任何更改:
- 一个仓库将
main
和develop
分支镜像到远程。 - 在远程镜像上向
develop
分支添加了一个新提交。 - 下一次推送会更新远程镜像以匹配上游仓库。
- 在远程镜像上添加到
develop
分支的新提交将丢失。
如果选择了保留偏离的引用,则更改将以不同方式处理:
- 跳过对远程镜像上
develop
分支的更新。 - 远程镜像上的
develop
分支保留在上游仓库中不存在的提交。任何存在于远程镜像但不存在于上游的引用将保持不变。 - 更新被标记为失败。
创建镜像后,您只能通过远程镜像 API修改保留偏离的引用的值。
从 GitLab 设置推送镜像到 GitHub
要配置从极狐GitLab 到 GitHub 的镜像:
- 创建一个具有至少读取和写入仓库内容权限的GitHub 细粒度个人访问令牌。如果您的仓库包含
.github/workflows
目录,您还必须授予工作流的读取和写入权限。为了更细粒度的访问,您可以将令牌配置为仅适用于特定仓库。 -
使用以下格式输入Git 仓库 URL,根据需要更改变量:
https://github.com/GROUP/PROJECT.git
-
GROUP
:GitHub 上的组。 -
PROJECT
:GitHub 上的项目。
-
- 在用户名中,输入个人访问令牌所有者的用户名。
- 在密码中,输入您的 GitHub 个人访问令牌。
- 选择镜像仓库。
镜像的仓库会被列出。例如:
https://*****:*****@github.com/<your_github_group>/<your_github_project>.git
仓库会在此后不久推送。要强制推送,请选择立即更新()。
从 GitLab 设置推送镜像到 AWS CodeCommit
AWS CodeCommit 推送镜像是将极狐GitLab 仓库连接到 AWS CodePipeline 的最佳方式。极狐GitLab 尚未被支持为其源代码管理(SCM)提供者之一。每个新的 AWS CodePipeline 需要大量的 AWS 基础设施设置。它还需要每个分支的单独管道。
如果 AWS CodeDeploy 是 CodePipeline 的最后一步,您可以结合这些工具来创建部署:
- 极狐GitLab CI/CD 管道。
- 在
.gitlab-ci.yml
的最后一个作业中使用 AWS CLI 部署到 CodeDeploy。
注意: 在 GitLab issue 34014 解决之前,极狐GitLab 到 AWS CodeCommit 的推送镜像无法使用 SSH 认证。
要从极狐GitLab 设置镜像到 AWS CodeCommit:
- 在 AWS IAM 控制台中,创建一个 IAM 用户。
-
为仓库镜像添加以下最小权限作为内联策略。
Amazon 资源名称(ARN)必须明确包括区域和账户。此 IAM 策略授予对两个示例仓库的镜像访问权限。这些权限已被测试为镜像所需的最小(最少特权)权限:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "MinimumGitLabPushMirroringPermissions", "Effect": "Allow", "Action": [ "codecommit:GitPull", "codecommit:GitPush" ], "Resource": [ "arn:aws:codecommit:us-east-1:111111111111:MyDestinationRepo", "arn:aws:codecommit:us-east-1:111111111111:MyDemo*" ] } ] }
- 用户创建后,选择 AWS IAM 用户名。
- 选择安全凭证选项卡。
-
在AWS CodeCommit 的 HTTPS Git 凭证下,选择生成凭证。
注意: 此 Git 用户 ID 和密码专用于与 CodeCommit 通信。不要将其与此用户的 IAM 用户 ID 或 AWS 密钥混淆。
- 复制或下载特殊的 Git HTTPS 用户 ID 和密码。
- 在 AWS CodeCommit 控制台中,创建一个新的仓库以从您的 GitLab 仓库镜像。
- 打开您的新仓库,在右上角选择代码 > 克隆 HTTPS(不是克隆 HTTPS (GRC))。
- 在极狐GitLab 中,打开要推送镜像的仓库。
- 选择设置 > 仓库,然后展开镜像仓库。
-
使用以下格式填写Git 仓库 URL字段,替换
<aws-region>
为您的 AWS 区域,替换<your_codecommit_repo>
为您在 CodeCommit 中的仓库名称:https://git-codecommit.<aws-region>.amazonaws.com/v1/repos/<your_codecommit_repo>
- 对于认证方法,选择用户名和密码。
- 在用户名中,输入 AWS 特殊 HTTPS Git 用户 ID。
- 在密码中,输入之前在 AWS 中创建的特殊 IAM Git 克隆用户 ID 密码。
-
对于 CodeCommit,保留仅镜像受保护的分支选项。它推送的频率更高(从每五分钟到每分钟)。
CodePipeline 需要为您希望设置 AWS CI 的命名分支单独设置管道。由于不支持具有动态名称的功能分支,配置仅镜像受保护的分支不会对 CodePipeline 集成造成灵活性问题。您还必须保护所有希望为其构建 CodePipeline 的命名分支。
-
选择镜像仓库。您应该会看到镜像的仓库出现:
https://*****:*****@git-codecommit.<aws-region>.amazonaws.com/v1/repos/<your_codecommit_repo>
要通过强制推送来测试镜像,请选择立即更新(半圆箭头)。
如果上次成功更新显示日期,则表示您已正确配置镜像。
如果未正确工作,则会出现红色的 error
标签,并在悬停文本中显示错误消息。
设置到启用 2FA 的另一个 GitLab 实例的推送镜像
- 在目标极狐GitLab 实例上,创建一个具有
write_repository
范围的个人访问令牌。 - 在源极狐GitLab 实例上:
- 使用以下格式输入Git 仓库 URL:
https://<destination host>/<your_gitlab_group_or_name>/<your_gitlab_project>.git
。 - 输入用户名
oauth2
。 - 输入密码。使用在目标极狐GitLab 实例上创建的极狐GitLab 个人访问令牌。
- 选择镜像仓库。
- 使用以下格式输入Git 仓库 URL: