CircleCIでgitリポジトリgiantswarm/docs-content
のビルドを実行するときに、別のリポジトリgiantswarm/docs
にコミットをプッシュしたいと思います。
これはcircle.yml
のdeployment
セクションにあります。
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}:[email protected]/giantswarm/docs.git
cd docs/
git commit --allow-empty -m "Trigger build and publishing via docs-content"
git Push -u Origin master
この fails は、最後のコマンドで次のエラーメッセージが表示されます。
ERROR: The key you are authenticating with has been marked as read only.
fatal: Could not read from remote repository.
GITHUB_PERSONAL_TOKEN
環境変数は、プライベートリポジトリgiantswarm/docs
にアクセスするためにrepo
スコープで作成されたユーザーの個人用アクセストークンに設定されます。さらに、そのリポジトリの管理者権限を持つチームにユーザーを追加しました。
その一連のコマンドは、新しいUbuntu VMで実行すると問題なく機能します。 CircleCIにない理由は何か?
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
いくつかのメモ:
git clone
が最初です。git
コマンドは、クローンディレクトリで実行する必要があります。 working_directory
は、これを大幅に簡略化します。DOCS_GITHUB_TOKEN
は 個人アクセストークン で、ターゲットリポジトリのrepo
スコープを持ちます。私は使いました
git Push -q https://${GITHUB_PERSONAL_TOKEN}@github.com/<user>/<repo>.git master
そしてそれは働いた。次のように更新します。
# 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
コマンドにトークンを埋め込むことはこのケースでは機能しますが、すべてのケースで機能するわけではなく、質問に答えません。
その他のケースには、git
コマンドへの直接アクセスを公開しないスクリプトが含まれます。彼らはGH_TOKEN
変数が設定されているため、例のようにそれを注入することはできません。
それは質問に答えません:
CircleCIにない理由は何か?
CircleCIサポートフォーラムで、これに関する回答があります。
Git Pushを実行すると、「エラー:認証に使用しているキーが読み取り専用としてマークされました。」という結果になります。
CircleCIにプロジェクトを追加すると、デフォルトでプロジェクトが構成されているデプロイキーには読み取りアクセス権のみがあるため、上記のエラーメッセージを回避するには、書き込み権限を持つキーを使用するように構成する必要があります。プロジェクトにユーザーキーまたは読み取り/書き込み展開キーが構成されていることを確認してください
https://circleci.com/docs/2.0/gh-bb-integration/#creating-a-github-deploy-key
このプロセスを完了すると、プッシュを許可する書き込み権限を持つデプロイキーが必要になります。