Gitlab CI流水线推送代码报错remote: You are not allowed to upload code.如何解决
解决GitLab CI流水线提交代码报错"remote: You are not allowed to upload code."方案
方案一:使用项目访问令牌(推荐)
- 生成项目访问令牌
进入GitLab项目页,依次打开「设置」→「访问令牌」,创建新令牌:- 名称自定义,例如
CI_PUSH_TOKEN - 勾选
write_repository权限 - 按需设置有效期,生成后复制保存令牌值,仅会显示一次
- 名称自定义,例如
- 配置令牌到CI变量
进入项目「设置」→「CI/CD」→「变量」,新增变量:- 键设为
CI_PUSH_TOKEN,值填写刚才生成的令牌 - 勾选「保护变量」「掩码变量」,防止令牌泄露
- 键设为
- 修改CI Job中的Git远程配置
在执行push操作的Job开头,添加以下命令注入认证信息:git remote set-url origin "https://gitlab-ci-token:${CI_PUSH_TOKEN}@${CI_SERVER_HOST}/${CI_PROJECT_PATH}.git"
用到的CI_SERVER_HOST、CI_PROJECT_PATH均为GitLab内置CI变量,无需额外配置。
方案二:使用SSH部署密钥
- 本地生成无密码的SSH密钥对
- 进入项目「设置」→「仓库」→「部署密钥」,上传生成的公钥,勾选「授予写入权限」
- 将私钥内容配置为CI变量,键名设为
SSH_PRIVATE_KEY,勾选「保护变量」「掩码变量」 - 在执行push操作的Job开头,添加SSH密钥加载步骤:
eval $(ssh-agent -s) echo "${SSH_PRIVATE_KEY}" | tr -d '\r' | ssh-add - mkdir -p ~/.ssh chmod 700 ~/.ssh ssh-keyscan ${CI_SERVER_HOST} >> ~/.ssh/known_hosts chmod 644 ~/.ssh/known_hosts
配套注意事项
- 若要推送的是保护分支,需要进入项目「设置」→「仓库」→「保护分支」,给所用的令牌/部署密钥开放对应分支的推送权限
- 提交前建议先配置Git用户信息,避免提交异常:
git config user.name "GitLab CI Automation"git config user.email "ci@your-domain.com" - 提交时添加
-o ci.skip参数,避免本次提交触发新的流水线导致循环执行:git commit -m "chore: update LAST_EXECUTED_SHA_ID" -o ci.skip
内容的提问来源于stack exchange,提问作者EagleOne
相关产品推荐
相关产品推荐

