如何使用个人访问令牌从CircleCI构建推送到Github的提交

Mar*_*ian 15 git continuous-integration cd github circleci

giantswarm/docs-content在CircleCI中执行git存储库的构建时,我想将提交推送到另一个存储库giantswarm/docs.

我在以下deployment部分中有这个circle.yml:

git config credential.helper cache
git config user.email "<some verified email>"
git config user.name "Github Bot"
git clone --depth 1 https://${GITHUB_PERSONAL_TOKEN}:x-oauth-basic@github.com/giantswarm/docs.git
cd docs/
git commit --allow-empty -m "Trigger build and publishing via docs-content"
git push -u origin master
Run Code Online (Sandbox Code Playgroud)

这种失败与此错误消息的最后命令:

ERROR: The key you are authenticating with has been marked as read only.
fatal: Could not read from remote repository.
Run Code Online (Sandbox Code Playgroud)

GITHUB_PERSONAL_TOKEN环境变量设置为用户的个人访问令牌,已与创建repo范围访问私人回购giantswarm/docs.此外,我将用户添加到具有该回购的管理员权限的团队.

当我在一个新的Ubuntu VM中执行它时,这一系列命令工作得很好.知道为什么它不在CircleCI上吗?

Ali*_*min 19

我用过

git push -q https://${GITHUB_PERSONAL_TOKEN}@github.com/<user>/<repo>.git master
Run Code Online (Sandbox Code Playgroud)

它起作用了.将其更新为:

# Push changes
git config credential.helper 'cache --timeout=120'
git config user.email "<email>"
git config user.name "<user-name>"
git add .
git commit -m "Update via CircleCI"
# Push quietly to prevent showing the token in log
git push -q https://${GITHUB_PERSONAL_TOKEN}@github.com/giantswarm/docs.git master
Run Code Online (Sandbox Code Playgroud)


Mar*_*ian 11

感谢Ali Amin的提示,我现在有了这个有效的解决方案:

version: 2
jobs:
  build:
    machine: true
    steps:
      - run:
          name: Clone docs
          working_directory: ~/workdir
          command: |
            git clone --depth 1 https://${DOCS_GITHUB_TOKEN}@github.com/giantswarm/docs.git
      - deploy:
          name: Trigger docs deployment
          working_directory: ~/workdir/docs
          command: |
            git config credential.helper 'cache --timeout=120'
            git config user.email "<email>"
            git config user.name "Deployment Bot"
            git commit --allow-empty -m "Trigger deployment"
            # Push quietly to prevent showing the token in log
            git push -q https://${DOCS_GITHUB_TOKEN}@github.com/giantswarm/docs.git master
Run Code Online (Sandbox Code Playgroud)

一些说明:

  • git clone是第一次.
  • 所有后续git命令都必须在克隆目录中执行.working_directory简化了这一点.
  • 令牌DOCS_GITHUB_TOKEN是一个个人的访问令牌repo范围的目标存储库.

  • 您实际上如何为特定存储库创建个人访问令牌?我在任何地方都找不到这个选项。 (2认同)