我目前正在使用 gitlab.com(不是本地安装)及其多运行程序进行 CI 集成。这在我的一个项目中效果很好,但在另一个项目中却失败了。
我的主机使用的是 2012R2,MSBuild 版本为 14.0.23107.0。我知道下面的错误显示 403,这是访问被拒绝的消息。我的问题是找到要更改的权限设置。
错误信息:
使用 Shell 运行 gitlab-ci-multi-runner 1.5.3 (fb49c47) 执行器...在 WIN-E0ORPCQUFHS 上运行...
正在获取更改...
HEAD 现在位于 6a70d96 更新运行程序文件远程:访问被拒绝致命: 无法访问 'https://gitlab-ci-token:[电子邮件受保护]/##REDACTED##/ADInactiveObjectCleanup.git/': 请求的 URL 返回错误:403 将 60ea1410 签出为 生产...
致命:引用不是树: 60ea1410dd7586f6ed9535d058f07c5bea2ba9c7 错误:构建失败:退出 状态 128
gitlab-ci.yml 文件:
variables:
Solution: ADInactiveObjectCleanup.sln
before_script:
#- "echo off"
#- 'call "%VS120COMNTOOLS%\vsvars32.bat"'
## output environment variables (usefull for debugging, propably not what you want to do if your ci server is public)
#- echo.
#- set
#- echo.
stages:
- build
#- test
#- deploy
build:
stage: build
script:
- echo building...
- '"%ProgramFiles(x86)%\MSBuild\14.0\Bin\msbuild.exe" "%Solution%" /p:Configuration=Release'
except:
#- tags
为了解决这个问题,我必须将自己添加为项目成员。这是一个私人仓库。我不确定这是否会导致跑步者因不同的权限设置而失败,但这很有可能。
gitlab 的这篇帮助文章概述了这个问题。
随着新的权限模型的到位,有时您的 构建将会失败。这很可能是因为您的项目试图 访问其他项目的源代码,并且您没有合适的资源 权限。在构建日志中查找有关 403 或 禁止访问消息。
作为管理员,您可以 验证 用户是他们尝试访问的组或项目的成员 到,您可以模拟用户来重试失败的构建 以验证一切是否正确。
在项目页面中单击设置齿轮,然后单击成员。将您自己(或生成构建的用户)添加为项目的成员。我使用了“Master”角色,但根据this document,您可能至少可以使用“Reporter”角色。报告者角色是仍然有权访问“拉取项目代码”的最小权限。这消除了我的 403 错误并允许我继续。
我也遇到这个问题了
fatal: unable to access 'http://gitlab-ci-token:xxxx.git':The Requested URL returned error:403
ERROR: Job Failed: command terminated with exit code 1
但是好像和上面答案的原因不太一样,因为我的账户是管理员,ci job拉取项目报错403,因为管理员账户不是项目成员,添加为项目成员就会不再报告此错误。
重置 access_token 时出现此错误,然后我在 .git/config 中设置用户名和密码,密码是新的 access_token 然后它就可以工作了。
[remote "origin"]
url = https://username:[email protected]/myusername/myproject
来源:https://forum.gitlab.com/t/remote-you-are-not-allowed-to-upload-code-403/60153
这看起来您需要添加一个
cd
命令来将当前目录打印到 before_script 中。然后修复访问该文件夹父级的权限。如果您将 gitlab runner 安装到 c:\glrunner
,您可能需要修复 c:\glrunner\builds
权限。
第二个问题是您可能需要通过删除 builds 文件夹来强制进行新的 git 克隆。
您可能需要将 gitlab 运行程序服务的登录凭据更改为
gitlabuser
,该帐户应该是非管理员帐户,该帐户的权限可能比 gitlab 运行程序默认使用的本地系统帐户少。
如果您想知道谁登录了,请将
set
添加到您的 before_script 中,您将获得环境变量转储。从那里你可以看到哪个帐户登录了,它的用户配置文件在哪里以及其他信息。
也许您的 ISP IP 被 GitLab 屏蔽了。
在您的系统上设置美国 DNS,然后重试。
依赖存储库
Job 环境变量
CI_JOB_TOKEN
可用于
验证依赖存储库的任何克隆。例如:
git clone https://gitlab-ci-token:${CI_JOB_TOKEN}@gitlab.com/<user>/<mydependentrepo>.git
也可用于系统范围的身份验证 (仅在 docker 容器中执行此操作,它将覆盖
~/.netrc
):
echo -e "machine gitlab.com\nlogin gitlab-ci-token\npassword ${CI_JOB_TOKEN}" > ~/.netrc
我已经见过这个问题好几次了,这是因为你使用 HTTPS 进行克隆。 - 要了解有关此问题的更多信息,您可以阅读此page
我遇到过这个问题,所以我改用了 ssh。 转到 PowerShell 然后输入
ssh-keygen
继续输入,无需输入任何详细信息。
然后转到路径 c://User/*
cd .ssh
cat id.rsa.pub
复制密钥并将其粘贴到您的 GitHub 或 GitLab 个人资料中。 并使用 ssh 克隆项目。
确保您的 CI_JOB_TOKEN 被允许访问目标存储库。
在您尝试克隆的存储库中,转到
Settings > CI/CD > Token Access
并添加尝试克隆它的存储库。那么它应该可以正常工作。
您可以在这里阅读更多相关信息: https://docs.gitlab.com/ee/ci/jobs/ci_job_token.html#allow-access-to-your-project-with-a-job-token