J'essaie de m'authentifier auprès de GitHub à l'aide d'un jeton d'accès personnel. Dans les fichiers d’aide de github, il est indiqué d’utiliser la méthode cURL pour s’authentifier ( https://help.github.com/articles/creating-an-access-token-for-command-line-use =). J'ai essayé cela, mais je ne peux toujours pas pousser vers GitHub. Veuillez noter que j'essaie d'envoyer depuis un serveur non authentifié (Travis-CI).
cd $HOME
git config --global user.email "[email protected]"
git config --global user.name "username"
curl -u "username:<MYTOKEN>" https://github.com/username/ol3-1.git
git clone --branch=gh-pages https://github.com/username/ol3-1.git gh-pages
cd gh-pages
mkdir buildtest
cd buildtest
touch asdf.asdf
git add -f .
git commit -m "Travis build $TRAVIS_BUILD_NUMBER pushed to gh-pages"
git Push -fq Origin gh-pages
Ce code provoque les erreurs:
remote: Accès anonyme à scuzzlebuzzle/ol3-1.git refusé.
fatal: échec de l'authentification pour ' https://github.com/scuzzlebuzzle/ol3-1.git/ ' "
Votre commande curl
est totalement fausse. Vous devriez utiliser ce qui suit
curl -H 'Authorization: token <MYTOKEN>' ...
Cela mis à part, cela n'autorise pas votre ordinateur à cloner le référentiel s'il est en fait privé. (Prendre un coup d'oeil, cependant, indique que ce n'est pas.) Ce que vous feriez normalement est la suivante:
git clone https://scuzzlebuzzle:<MYTOKEN>@github.com/scuzzlebuzzle/ol3-1.git --branch=gh-pages gh-pages
Cela ajoutera vos informations d'identification à la télécommande créée lors du clonage du référentiel. Malheureusement, vous n'avez aucun contrôle sur la manière dont Travis clone votre référentiel. Vous devez donc modifier la télécommande de cette manière.
# After cloning
cd gh-pages
git remote rm Origin
git remote add Origin https://scuzzlebuzzle:<MYTOKEN>@github.com/scuzzlebuzzle/ol3-1.git
Cela permettra à votre projet d’utiliser une télécommande avec des informations d’identification intégrées.
Notez que la réponse de sigmavirus24 nécessite que vous donniez à Travis un jeton avec des autorisations relativement étendues, car GitHub n'offre que des jetons avec des étendues étendues telles que "écrire tous mes dépôts publics" ou "écrire tous mes dépôts privés".
Si vous souhaitez restreindre l'accès (avec un peu plus de travail!), Vous pouvez utiliser des clés de déploiement GitHub combinées avec des champs yaml chiffrés par Travis.
Voici n croquis de la façon dont la technique fonctionne ...
Commencez par générer une clé de déploiement RSA (via ssh-keygen
) appelée my_key
et ajoutez-la en tant que clé de déploiement dans les paramètres de votre référentiel github.
Ensuite...
$ password=`openssl Rand -hex 32`
$ cat my_key | openssl aes-256-cbc -k "$password" -a > my_key.enc
$ travis encrypt --add password=$password -r my-github-user/my-repo
Utilisez ensuite le fichier $password
pour déchiffrer votre clé de déploiement au moment de l'intégration, en ajoutant à votre fichier yaml:
before_script:
- openssl aes-256-cbc -k "$password" -d -a -in my_key.enc -out my_deploy_key
- echo -e "Host github.com\n IdentityFile /path/to/my_deploy_key" > ~/.ssh/config
- echo "github.com ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAq2A7hRGmdnm9tUDbO9IDSwBK6TbQa+PXYPCPy6rbTrTtw7PHkccKrpp0yVhp5HdEIcKr6pLlVDBfOLX9QUsyCOV0wzfjIJNlGEYsdlLJizHhbn2mUjvSAHQqZETYP81eFzLQNnPHt4EVVUh7VfDESU84KezmD5QlWpXLmvU31/yMf+Se8xhHTvKSCZIFImWwoG6mbUoWf9nzpIoaSjB+weqqUUmpaaasXVal72J+UX2B+2RPW3RcT0eOzQgqlJL3RKrTJvdsjE3JEAvGq3lGHSZXy28G3skua2SmVi/w4yCE6gbODqnTWlg7+wC604ydGXA8VJiS5ap43JXiUFFAaQ==" > ~/.ssh/known_hosts
Remarque: la dernière ligne pré-remplit la clé RSA de github, ce qui évite d'avoir à accepter manuellement au moment d'une connexion.
Tout d'abord, vous devez créer un jeton d'accès personnel (PAT). Ceci est décrit ici: https://help.github.com/articles/creating-an-access-token-for-command-line-use/
De manière risible, l'article vous explique comment le créer, mais ne donne absolument aucune idée de ce qu'il faut en faire. Après environ une heure de documentation sur le chalutage et de débordement de pile, j'ai finalement trouvé la réponse:
$ git clone https://github.com/user-or-organisation/myrepo.git
Username: <my-username>
Password: <my-personal-access-token>
J'ai été forcé d'activer authentification à deux facteurs par la politique de l'entreprise alors que je travaillais à distance et que des modifications locales étaient encore en place. En fait, ce n'était donc pas clone
dont j'avais besoin, mais Push
. J'ai lu dans beaucoup d'endroits où je devais supprimer et recréer la télécommande, mais ma commande normale Push
fonctionnait exactement de la même manière que la clone
ci-dessus, et la télécommande n'a pas changé:
$ git Push https://github.com/user-or-organisation/myrepo.git
Username: <my-username>
Password: <my-personal-access-token>
(@YMHuang m'a mis sur la bonne voie avec le lien vers la documentation.)
Automation/automatisation Git avec OAuth jetons
$ git clone https://github.com/username/repo.git
Username: your_token
Password:
Cela fonctionne également dans la commande git Push
.
Référence: https://help.github.com/articles/git-automation-with-oauth-tokens/
Cela a fonctionné pour moi avec ssh:
Paramètres → Paramètres du développeur → Générer un nouveau jeton.
git remote rm Origin
git remote add Origin https://[APPLICATION]:[NEW TOKEN]@github.com/[ORGANISATION]/[REPO].git
Après avoir passé tant d'heures à appliquer le jeton GitHub , il fonctionne comme suit:
$ cf_export GITHUB_TOKEN=$(codefresh get context github --decrypt -o yaml | yq -y .spec.data.auth.password)
%d%H%M
sur la correspondance Word '-123456-whatever'
Voici le code complet:
version: '1.0'
steps:
get_git_token:
title: Reading Github token
image: codefresh/cli
commands:
- cf_export GITHUB_TOKEN=$(codefresh get context github --decrypt -o yaml | yq -y .spec.data.auth.password)
main_clone:
title: Updating the repo
image: Alpine/git:latest
commands:
- git clone https://chetabahana:[email protected]/chetabahana/compose.git
- cd compose && git remote rm Origin
- git config --global user.name "chetabahana"
- git config --global user.email "[email protected]"
- git remote add Origin https://chetabahana:[email protected]/chetabahana/compose.git
- sed -i "s/-[0-9]\{1,\}-\([a-zA-Z0-9_]*\)'/-`date +%d%H%M`-whatever'/g" cloudbuild.yaml
- git status && git add . && git commit -m "fresh commit" && git Push -u Origin master
Sortie...
On branch master
Changes not staged for commit:
(use "git add ..." to update what will be committed)
(use "git checkout -- ..." to discard changes in working directory)
modified: cloudbuild.yaml
no changes added to commit (use "git add" and/or "git commit -a")
[master dbab20f] fresh commit
1 file changed, 1 insertion(+), 1 deletion(-)
Enumerating objects: 5, done.
Counting objects: 20% (1/5) ... Counting objects: 100% (5/5), done.
Delta compression using up to 4 threads
Compressing objects: 33% (1/3) ... Writing objects: 100% (3/3), 283 bytes | 283.00 KiB/s, done.
Total 3 (delta 2), reused 0 (delta 0)
remote: Resolving deltas: 0% (0/2) ... (2/2), completed with 2 local objects.
To https://github.com/chetabahana/compose.git
bbb6d2f..dbab20f master -> master
Branch 'master' set up to track remote branch 'master' from 'Origin'.
Reading environment variable exporting file contents.
Successfully ran freestyle step: Cloning the repo