我有一堆使用 Azure Pipelines 进行 CI/CD 的存储库,我现在正在尝试将其移植到 Github Actions。这是我正在做的第一个工作:https://github.com/Azure/AzureAuth/tree/fix-ghaction
我已经完成了 99% 的工作,但在某一步骤中我遇到了奇怪的身份验证错误。该存储库已镜像到另一个组织(cloudyr),我使用此步骤进行镜像:
- name: Copy to Cloudyr
if: runner.os == 'Linux'
env:
token: "${{ secrets.ghPat }}"
run: |
export CLOUDYR_REPO=$(echo $GITHUB_REPOSITORY | sed "s/Azure/cloudyr/")
git push --prune https://[email protected]/${CLOUDYR_REPO}.git +refs/remotes/origin/*:refs/heads/* +refs/tags/*:refs/tags/*
这会从存储库机密中检索 PAT,并执行git push
。它与 Azure Pipelines 完美配合,但现在失败并出现以下错误:
Run export CLOUDYR_REPO=$(echo $GITHUB_REPOSITORY | sed "s/Azure/cloudyr/")
remote: Permission to cloudyr/AzureAuth.git denied to github-actions[bot].
fatal: unable to access 'https://github.com/cloudyr/AzureAuth.git/': The requested URL returned error: 403
Error: Process completed with exit code 128.
谁能解释一下造成这种情况的原因以及如何解决它?我对 Azure/AzureAuth 和 cloudyr/AzureAuth 存储库拥有管理员访问权限。我还检查了 PAT 是否有效。
失败的日志在这里:https://github.com/Azure/AzureAuth/runs/1228152900?check_suite_focus=true
GitHub Actions 使用以下之一存储配置选项http.extraheader
用于发送原始令牌以在自定义授权标头中克隆存储库的选项。这是一个坏主意,因为当您使用另一个存储库时,它会与 Git 添加的授权标头发生冲突,并且颁发的令牌仅对原始存储库有效。
如果您想推送到不同的存储库,那么您需要通过执行以下操作来取消设置该配置选项:
git config -l | grep 'http\..*\.extraheader' | cut -d= -f1 | \
xargs -L1 git config --unset-all
此外,您应该避免在用户名字段中传递授权令牌。虽然 GitHub 对此进行了过滤,但用户名字段更有可能出现在日志中,因此最佳实践是使用虚拟名称将其传递到密码字段中,如下所示:
git push --prune https://token:[email protected]/${CLOUDYR_REPO}.git
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)