Comment publier à Github des Pages de Travis CI?

nous compilons Doxygen docs sur le serveur travis-ci et voulons les pousser sur notre branche gh-pages.

comment gérer l'autorisation pour git push ? Quelqu'un a-t-il un exemple d'utilisation de variables cryptées dans travis-ci? Dois-je demander une autorisation https ou une clé SSH?

27
demandé sur Steven Vascellaro 2014-04-24 22:52:06

5 réponses

exemple étape par étape avec jeton API HTTPS dans la variable d'environnement

D'autres l'ont mentionné, mais voici une procédure plus détaillée.

  1. créer un dépôt séparé pour le site web (facultatif). Cela réduira la probabilité que vous écrasiez votre dépôt principal et empêchera les fichiers de sortie de le polluer.

  2. obtenir un Jeton d'accès personnel sous https://github.com/settings/tokens

    n'autorise l'accès " public_repo "que pour les dépôts publics," repo " pour les dépôts privés.

    sauvegardez le jeton quelque part comme vous ne pouvez le voir qu'une seule fois.

  3. Sur le Travis paramètres pour le référentiel https://travis-ci.org/<me>/<myrepo>/settings créer une variable d'environnement:

    GITHUB_API_KEY=<token>
    

    et assurez-vous de marquer" affichage valeur dans le journal de construction" comme "Off".

    c'est sûr parce que seulement les pushs autorisés par vous voient de telles variables d'environnement, donc si un utilisateur malveillant essaie de faire une demande de pull pour obtenir votre chaîne, la variable ne sera pas là.

    assurez-vous simplement de ne jamais, jamais énumérer vos variables d'environnement sur votre construction!

  4. ajouter ce qui suit à votre .travis.yml :

    after_success: |
      if [ -n "$GITHUB_API_KEY" ]; then
        cd "$TRAVIS_BUILD_DIR"
        # This generates a `web` directory containing the website.
        make web
        cd web
        git init
        git checkout -b gh-pages
        git add .
        git -c user.name='travis' -c user.email='travis' commit -m init
        # Make sure to make the output quiet, or else the API token will leak!
        # This works because the API key can replace your password.
        git push -f -q https://<me>:$GITHUB_API_KEY@github.com/<me>/<myrepo>-gh-pages gh-pages &>/dev/null
        cd "$TRAVIS_BUILD_DIR"
      fi
    

Alternative travis cryptage de la méthode

expliqué en détail à: https://stackoverflow.com/a/33109519/895245

chiffrez la chaîne GITHUB_API_KEY=<key> avec le travis gem, et ajoutez-le à votre .travis.yml :

env:
  secure: <encrypted>

cela a l'avantage qu'il ne nécessite pas l'utilisation de L'interface Web Travis, mais nécessite l'utilisation d'un Gem et certains plus le copier-coller.

33

Je ne sais pas si C'est récent, mais Travis a maintenant une option de déploiement intégrée, essentiellement ajouter à votre fichier travis:

deploy:
  provider: pages
  skip_cleanup: true
  local_dir: myfolder/  # or remove this line to upload from root of repo
  github_token: $GITHUB_TOKEN # Set in travis-ci.org dashboard
  on:
    branch: master

assurez-vous que vous n'avez pas .gitignore dans le dossier téléchargé ; il ne télécharge que des fichiers non ignorés.

voir le doc officiel en ligne de travis : https://docs.travis-ci.com/user/deployment/pages/

il n'y a pas de problème de clé publique utilisant le dépôt Paramètres " approche, vous générez une clé dans Github puis copiez la coller dans les champs secret/non visible de Travis.

Télécharger histoire de la question : Notez que chaque téléchargement écrase toutes les données précédemment téléchargées, sans préserver l'historique.

  • vous pouvez maintenant (Nov 2017+) à la place préserver l'histoire en ajoutant un keep-history: true ligne

  • cela peut être souhaitable car ces les compilations de snapshots peuvent être volumineuses, et elles sont reproductibles à volonté de toute façon (il suffit de rebrancher votre dépôt de la révision que vous voulez). Pointer vers de tels artéfacts est typiquement pointer vers une dernière construction réussie d'un instantané.

  • Cependant pour déclencher le stockage à un endroit stable, il suffit d'éditer votre travis pour ajouter le drapeau:

    target_branch: Branch to push force to, par défaut à gh-pages

    E. g target_branch: rc1.2

et l'exécuter une fois avant de le remettre en mode snapshot.

une autre alternative qui pourrait être bonne pour les versions (Je n'ai pas personnellement testé si) est de publier à une étiquette voir: https://docs.travis-ci.com/user/deployment/releases/

16
répondu Yann TM 2018-03-05 17:23:41

Le travis-ci documentation ici recommande d'ajouter cela pour pousser à un repo git:

after_success:
   - chmod 600 .travis/deploy_key.pem # this key should have push access
   - ssh-add .travis/deploy_key.pem
   - git remote add deploy DEPLOY_REPO_URI_GOES_HERE
   - git push deploy

Toutefois, c'est l'insécurité car il vous permet de stocker vos protégés de la clé privée dans le dépôt github.

à la place, vous pouvez ajouter votre clé ssh comme une variable environnementale cryptée en utilisant l'outil travis:

travis encrypt DEPLOY_KEY=<private ssh key with write access> --add env.matrix

Maintenant, vous avez juste besoin de ajouter cette ligne au début de after_success:

cat $DEPLOY_KEY > .travis/deploy_key.pem

veuillez noter que after_success va basculer dans chaque build dans la matrice de construction donc si vous avez plusieurs travaux par build votre code va être poussé plusieurs fois, ce qui ne fera rien mais est bon de savoir que cela se produit.

12
répondu joshua-anderson 2017-05-16 19:09:06

juste pour ajouter une autre solution, j'ai utilisé un jeton HTTPS de github, Je l'ai crypté et j'ai utilisé HTTPS pour les checkouts et les pushes

10
répondu Stasik 2014-04-27 10:01:16

je viens d'écrire un blog à ce sujet il y a quelques jours. Voici le dossier:

j'ai écrit un custom script de déploiement à cette fin. La fonctionnalité de base du script ressemble à ceci:

#!/bin/bash

git clone --depth=1 --branch=master "https://github.com/iBug/iBug.github.io.git" deploy
cd deploy
git rm -rf .
cd ..
mv _site/* deploy
cd deploy
git add --all
git config user.name "Travis CI"
git config user.email "travis@travis-ci.org"
git commit --message "Auto deploy from Travis CI"
git remote add deploy "https://$GH_TOKEN@github.com/iBug/iBug.github.io.git" &>/dev/null
git push deploy master &>/dev/null

maintenant, passez à https://github.com/settings/tokens et générer un token. Accordez-lui le privilège public_repo . Allez dans les paramètres du dépôt sur Travis CI et stockez le jeton avec le nom de la variable étant GH_TOKEN .

ajouter le script de déploiement à travis:

script: bundle exec jekyll build
after_success:
    - bash .travis/deploy.sh

poussez ces choses à Github et Travis sera déclenché.


mon blog est ici . Il est complet et donc redondant s'il est publié comme réponse ici (parce que les utilisateurs de débordement de pile sont pour la plupart des développeurs expérimentés). Le script que j'ai posté dans mon blog manque aussi d'une fonctionnalité: il ne préserve pas commit l'histoire du site, alors que le script de cette réponse ci-dessus.

0
répondu iBug 2018-04-18 02:06:20