web-dev-qa-db-fra.com

Comment pousser un commit sur Github à partir d'une build CircleCI en utilisant un jeton d'accès personnel

Lors de l'exécution d'une build pour le référentiel git giantswarm/docs-content dans CircleCI, j'aimerais pousser un commit vers un autre référentiel giantswarm/docs.

Je l'ai dans la section deployment de 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}:[email protected]/giantswarm/docs.git
cd docs/
git commit --allow-empty -m "Trigger build and publishing via docs-content"
git Push -u Origin master

Cette échoue dans la toute dernière commande avec ce message d'erreur:

ERROR: The key you are authenticating with has been marked as read only.
fatal: Could not read from remote repository.

Le GITHUB_PERSONAL_TOKEN la variable d'environnement est définie sur le jeton d'accès personnel d'un utilisateur, qui a été créé avec la portée repo pour accéder au référentiel privé giantswarm/docs. De plus, j'ai ajouté l'utilisateur à une équipe disposant des autorisations d'administrateur pour ce dépôt.

Cette série de commandes fonctionne très bien lorsque je l'exécute dans une nouvelle machine virtuelle Ubuntu. Une idée pourquoi ce n'est pas le cas sur CircleCI?

15
Marian

Merci à l'indice de ALi Amin J'ai maintenant cette solution de travail:

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

Quelques notes:

  • Le git clone est le premier.
  • Toutes les commandes git suivantes doivent être exécutées dans le répertoire clone. working_directory simplifie beaucoup cela.
  • Le jeton DOCS_GITHUB_TOKEN est un jeton d'accès personnel avec une portée repo pour le référentiel cible.
10
Marian

J'ai utilisé

git Push -q https://${GITHUB_PERSONAL_TOKEN}@github.com/<user>/<repo>.git master

et ça a marché. Mettez-le à jour pour être:

# 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
19
Ali Amin

Bien que l'incorporation du jeton dans la commande fonctionne pour ce cas, il peut ne pas fonctionner pour tous les cas et ne répond pas à la question.

  1. D'autres cas incluraient des scripts qui n'exposent pas un accès direct à la commande git. Ils comptent sur le GH_TOKEN variable étant définie et vous ne pourriez pas l'injecter comme dans l'exemple.

  2. Cela ne répond pas à la question:

Une idée pourquoi ce n'est pas le cas sur CircleCI?

Sur le forum de support CircleCI, il y a une réponse à ce sujet:

https://support.circleci.com/hc/en-us/articles/360018860473-How-to-Push-a-commit-back-to-the-same-repository-as-part-of- the-CircleCI-job

L'exécution de git Push entraîne "ERREUR: la clé avec laquelle vous vous authentifiez a été marquée en lecture seule".

La clé de déploiement avec laquelle le projet est configuré, par défaut lorsque vous ajoutez un projet sur CircleCI, n'a qu'un accès en lecture, donc une clé avec des autorisations d'écriture doit être configurée pour être utilisée, afin d'éviter le message d'erreur ci-dessus. Veuillez vous assurer qu'une clé utilisateur ou une clé de déploiement en lecture-écriture a été configurée pour le projet

https://circleci.com/docs/2.0/gh-bb-integration/#creating-a-github-deploy-key

Après avoir suivi ce processus, vous devriez avoir une clé de déploiement avec des autorisations d'écriture qui autorise le Push.

0
Matt Mazzola