Cómo publicar en Github Páginas de Travis CI?


Estamos compilando documentos Doxygen en el servidor travis-ci y queremos enviarlos a nuestra rama gh-pages.

¿Cómo manejo la autorización para git push? ¿Alguien tiene un ejemplo para usar variables cifradas en travis-ci? ¿Debo optar por una autorización https o por una clave SSH?

Author: Steven Vascellaro, 2014-04-24

5 answers

Ejemplo paso a paso con token API HTTPS en variable de entorno

Otros lo han mencionado, pero aquí va un procedimiento más detallado.

  1. Crear un repositorio separado para el sitio web (opcional). Esto reducirá la probabilidad de que sobreescriba su repositorio principal y evitará que los archivos de salida lo contaminen.

  2. Obtenga un Token de Acceso Personal en https://github.com/settings/tokens

    Solo habilitar acceso" public_repo "para repositorios públicos, "repo" para privados.

    Guarde el token en algún lugar, ya que solo puede verlo una vez.

  3. En la configuración de Travis para el repositorio https://travis-ci.org/<me>/<myrepo>/settings cree una variable de entorno:

    GITHUB_API_KEY=<token>
    

    Y asegúrese de marcar "Mostrar valor en el registro de compilación" como "Desactivado".

    Esto es seguro porque solo los push autorizados por usted ven tales variables de entorno, por lo que si un usuario malicioso intenta hacer una solicitud de extracción para obtener su cadena, la variable no estará allí.

    Solo asegúrese de que nunca, nunca lista sus variables de entorno en su compilación!

  4. Añade lo siguiente a tu .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>:[email protected]/<me>/<myrepo>-gh-pages gh-pages &>/dev/null
        cd "$TRAVIS_BUILD_DIR"
      fi
    

Método alternativo de travis encrypt

Explicado en detalle en: https://stackoverflow.com/a/33109519/895245

Encripta la cadena GITHUB_API_KEY=<key> con la gema travis, y añádela a tu .travis.yml:

env:
  secure: <encrypted>

Esto tiene la ventaja de que no requiere el uso de la Travis interfaz web, pero requiere el uso de una Gema y un poco más de pegado de copia.

 33
Author: Ciro Santilli 新疆改造中心 六四事件 法轮功,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-09-25 20:50:36

No se cuán reciente es, pero Travis ahora tiene una opción de implementación incorporada, básicamente agregue a su archivo 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

Asegúrese de que no tiene un .gitignore en la carpeta cargada; solo carga archivos no ignorados.

Ver el documento oficial en línea de travis : https://docs.travis-ci.com/user/deployment/pages /

No hay ningún problema de clave pública usando el enfoque "Configuración del repositorio", generas una clave en Github y luego la copias y la pegas en secret / non campos visibles de Travis.

Problema de historial de carga: Tenga en cuenta que cada carga aplasta los datos previamente cargados, sin preservar el historial.

  • Ahora puede (Nov 2017+) en su lugar preservar el historial agregando una línea keep-history: true

  • Esto puede ser deseable ya que estas compilaciones de instantáneas pueden ser voluminosas, y son reproducibles a voluntad de todos modos (simplemente ramifique su depósito desde la revisión que desea). Apuntar a tales artefactos es típicamente apuntar a una última compilación exitosa de una instantánea.

  • Sin embargo, para activar el almacenamiento en un lugar estable, simplemente edite su travis para agregar la bandera :
    target_branch: Rama para empujar fuerza a, por defecto a gh-pages
    E. g target_branch: rc1.2

Y ejecútelo una vez antes de volver a configurarlo en modo instantánea.

Otra alternativa que podría ser buena para las versiones (aunque no he probado personalmente) es publicar en una etiqueta see : https://docs.travis-ci.com/user/deployment/releases /

 16
Author: Yann TM,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-03-05 17:23:41

La documentación de travis-ci aquí recomienda agregar esto para enviar a un repositorio de 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

Sin embargo, esto es inseguro ya que tiene que almacenar su clave privada desprotegida en el repositorio de github.

En su lugar, puede agregar su clave ssh como una variable ambiental cifrada utilizando la herramienta travis:

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

Ahora solo necesita agregar esta línea al comienzo de after_success:

cat $DEPLOY_KEY > .travis/deploy_key.pem

Tenga en cuenta que after_success alternará en cada construya en la matriz de compilación, por lo que si tiene varios trabajos por compilación, su código se enviará varias veces, lo que no hará nada, pero es bueno saber que está ocurriendo.

 12
Author: joshua-anderson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-16 19:09:06

Solo para agregar otra solución, usé un token HTTPS de github, lo cifré y usé HTTPS para las compras y los envíos

 10
Author: Stasik,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-04-27 10:01:16

Acabo de escribir un blog sobre esto hace unos días. Este es el resumen:

Escribí un script de despliegue personalizado para este propósito. La funcionalidad principal del script se ve así:

#!/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 "[email protected]"
git commit --message "Auto deploy from Travis CI"
git remote add deploy "https://[email protected]/iBug/iBug.github.io.git" &>/dev/null
git push deploy master &>/dev/null

Ahora vaya a https://github.com/settings/tokens y generar un token. Conceder public_repo privilegio. Vaya a la configuración del repositorio en Travis CI y almacene el token con el nombre de la variable GH_TOKEN.

Agregue el script de implementación a travis:

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

Empujar estas cosas a GitHub y Travis se activarán.


Mi blog está aquí . Es completo y por lo tanto redundante si se publica como una respuesta aquí (porque los usuarios de Stack Overflow son en su mayoría desarrolladores experimentados). El script que publiqué en mi blog también carece de una funcionalidad: No conserva el historial de confirmaciones del sitio construido, mientras que el script en esta respuesta anterior lo hace.

 0
Author: iBug,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-04-18 02:06:20