# GitLab 镜像到 CodeCommit 接流水线：七步实操，两个真正卡人的点

- 发布日期: 2024-01-30 · 分类: DevOps

我做过一个项目，GitLab 是团队的主代码仓库，但客户侧的部署流水线跑在 AWS 上，中间必须把代码同步到 CodeCommit 才能接 CodePipeline。当时我花了大半天才把整条链路跑通，踩了几个坑，所以把流程整理出来，后面再遇到直接照着走就行。

## 我的整体思路

整条链路七步：建 IAM 用户、配策略、生成 HTTPS 凭证、建 CodeCommit 仓库、GitLab 设镜像、锁保护分支、验证。步骤看着不少，但真正容易卡住的地方就两处——IAM 权限的 ARN 写对，以及 GitLab 镜像 URL 的格式。我按顺序过一遍。

## 具体操作

### 1. 建 IAM 用户

AWS IAM 控制台新建一个用户，名字随意，但我建议带上用途标识，比如 `gitlab-mirror-bot`，后面审计的时候一眼就能认出来。

### 2. 配策略

挂一条内联策略，只授 `codecommit:GitPull` 和 `codecommit:GitPush` 两个 action。我踩过一次坑：资源 ARN 里区域和账户 ID 写错，GitLab 那边一直报 403，排查了快二十分钟才发现是 ARN 的问题。ARN 里必须带正确的区域与账户信息，别偷懒用通配。

### 3. 生成 HTTPS Git 凭证

切到该 IAM 用户的"安全凭证"选项卡，生成 AWS CodeCommit 对应的 HTTPS Git 凭证。AWS 会给你一对用户名和密码，后面 GitLab 镜像时要用。

### 4. 建 CodeCommit 仓库

CodeCommit 控制台新建一个仓库，用来接收来自 GitLab 的镜像，名字跟 GitLab 那边对齐比较省事。

### 5. 配置 GitLab 镜像

进 GitLab 项目 → 设置 → 存储库，拉到"镜像存储库"那一块。Git 存储库 URL 格式为：

`https://git-codecommit..amazonaws.com/v1/repos/`

用户名填第 3 步生成的专用 HTTPS Git 用户 ID，密码填对应密码。

### 6. 保护分支

勾上"仅镜像受保护的分支"。我的判断是这一步别省——镜像是单向推送，一旦把 main 之外的实验分支也同步过去，CodeCommit 那边的仓库会很乱，回滚也麻烦。

### 7. 验证

点"立即更新"，GitLab 会触发一次手动同步。去 CodeCommit 控制台刷新，看到 commit 进来就通了。

## 收尾

跑通之后我日常维护成本很低，GitLab 那边正常 push，CodeCommit 自动跟。后面如果要接 CodePipeline，直接从 CodeCommit 建触发器就行，不用再折腾 webhook。

## References

- 统一DevOps流程：供应商协作的关键
- AWS DevOps CodePipeline体系建设：构建高效、自动化的部署流程

