Gerrit 同步本地仓库到远程¶
概要: 本文介绍如何使用gerrit的插件replication实现将gerrit仓库变更推送到其他远程服务器仓库上,如GitHub,Gitee和Gitea等
创建时间: 2022.10.10 20:59:11
更新时间: 2022.10.10 21:11:34
提示
由于本地执行gerrit相关命令到远端较为繁琐,此处使用了命令替代
Bash | |
---|---|
前提¶
本地gerrit环境概览¶
- 部署地址: 本地局域网
192.168.2.145
, ssh端口29418
, WebUI端口19418
- 部署方式:
docker-compose
- 部署版本: 3.5.0.1
- 容器名称:
gerrit_server
gerrit权限¶
确保本地ssh到gerrit时,拥有管理员权限,因为重载配置需要,具体参考 Gerrit允许远程管理员操作
Replication插件已安装¶
务必确保gerrit安装和启用了Replication插件(docker部署的gerrit默认已安装并启用),查看是否已启用命令
Bash | |
---|---|
Text Only | |
---|---|
配置Replication插件¶
进入到gerrit的docker容器中¶
Bash | |
---|---|
提示
- 在容器内部操作的用户均为root,不是用户gerrit
- 以下命令均在docker内部执行
生成PEM形式的SSH密钥对¶
Bash | |
---|---|
~/.ssh/known_hosts
目录下
将远程服务器域名导入到 known_hosts
文件中¶
以下操作将会把Gitee.com导入到~/.ssh/known_hosts
文件中,其他git服务器域名的操作是一样的
Bash | |
---|---|
执行上述命令过程中会出现错误,不用管,直接 ⌃ + C
退出即可,然后检查~/.ssh/known_hosts
文件
Bash | |
---|---|
如果看到一行以 gitee.com
开头的记录,此步骤即可宣告完成
Text Only | |
---|---|
配置replication.config
¶
写入replication.config
¶
在docker容器中此配置文件位于/var/etc/replication.config
,如果没有,就创建一个,写入内容如下
Properties | |
---|---|
上述配置文件的含义是
- 指定同步的本地gerrit仓库为
DevOps
- 指定了两个远程git服务器,其中一个是git服务厂商 Gitee.com,另一个是个人搭建的Gitea服务器gitea.xxx.com
- 指定了推送到远端的内容是gerrit的两类refs,即分支
refs/heads/
和标签refs/tags/
- 其余更详细的配置可以参考Replication Configuration
重新加载replication.config
¶
在本地执行如下命令
Bash | |
---|---|
Bash | |
---|---|
Text Only | |
---|---|
远程仓库配置¶
- 由于我们要将本地gerrit仓库同步到远程,所以建议在远程新建和本地仓库名完全一致的仓库,即
replication.config
中配置的git地址 - 如果远程已经存在同名仓库,可以选择其他的远程仓库作为目的仓库,如
DevOpsGerrit
开始同步¶
同步准备¶
在本地拉取gerrit的DevOps仓库,通过gerrit change变更单的方式,进行常规的gerrit review后,submit到gerrit仓库中
自动同步¶
当replication插件侦测到监控的git仓库DevOps有变更合入后,默认会在合入的15s后启动同步任务,将变更推送到配置的远程git仓库中
手动同步¶
在本地执行如下命令
Bash | |
---|---|
查看同步日志¶
如果在执行完同步任务后,远程git服务器并未同步此次变更,可通过如下两种方式查看replication日志并排查原因
- 不推荐:使用
docker logs gerrit_server
查看,但是显示的replication日志不完整 - 推荐:进入docker容器内部,直接查看replication的log文件
/var/gerrit/logs/replication_log