que - ¿Cómo publicar en Github Pages desde Travis CI?
travis cli (5)
Acabo de escribir un blog sobre esto hace algunos días. Aquí está 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 ve a https://github.com/settings/tokens y genera un token. public_repo
privilegio public_repo
. Vaya a la configuración del repositorio en Travis CI y almacene el token con el nombre de la variable GH_TOKEN
.
Agregue la secuencia de comandos de implementación a travis:
script: bundle exec jekyll build
after_success:
- bash .travis/deploy.sh
Empuja estas cosas hacia GitHub y se activará Travis.
Mi blog esta here Es completo y, por lo tanto, redundante si se publica como 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 commit del sitio construido, mientras que el script en esta respuesta anterior sí lo hace.
Estamos recopilando documentos de Doxygen en el servidor de travis-ci y queremos insertarlos en nuestra rama gh-pages.
¿Cómo manejo la autorización para git push
? ¿Alguien tiene un ejemplo para usar variables encriptadas en travis-ci? ¿Debo obtener la autorización https o una clave SSH?
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 hace que almacene su clave privada no protegida en el repositorio de github.
En su lugar, puede agregar su clave ssh como una variable de entorno 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 principio de after_success:
cat $DEPLOY_KEY > .travis/deploy_key.pem
Tenga en cuenta que after_success se alternará en cada compilación en la matriz de compilación, por lo que si tiene varios trabajos por compilación, su código se insertará varias veces, lo que no hará nada, pero es bueno saber que está ocurriendo.
No sé qué tan 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úrate de no tener un .gitignore en la carpeta cargada; solo carga archivos no ignorados.
Consulte el documento oficial en línea de travis: https://docs.travis-ci.com/user/deployment/pages/
No existe un problema de clave pública con el enfoque de "Configuración de depósito", usted genera una clave en Github y luego la copia y la pega en campos secretos / no visibles de Travis.
Problema de carga de historial: tenga en cuenta que cada carga aplasta cualquier información cargada previamente, sin preservar el historial.
Ahora puedes (Nov 2017+) preservar el historial agregando un
keep-history: true
líneakeep-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). Señalar esos artefactos generalmente apunta a una última creación exitosa de una instantánea.
Sin embargo, para activar el almacenamiento en un lugar estable, simplemente edite su travis para agregar un indicador:
target_branch: Branch para push force, por defecto gh-pages
Ej target_branch: rc1.2
Y ejecútelo una vez antes de regresar al modo de instantánea.
Otra alternativa que podría ser buena para los lanzamientos (aunque no he probado personalmente) es publicar en una etiqueta, vea: https://docs.travis-ci.com/user/deployment/releases/
Solo para agregar otra solución, utilicé un token de HTTPS de github, lo cifré y usé HTTPS para las compras y los empujones
Ejemplo paso a paso con HTTPS API Token en variable de entorno
Otros lo han mencionado, pero aquí hay un procedimiento más detallado.
Cree un repositorio separado para el sitio web (opcional). Esto reducirá la probabilidad de que sobrescriba su repositorio principal y evitará que los archivos de salida lo contaminen.
Obtenga un token de acceso personal en https://github.com/settings/tokens
Solo habilite el acceso "public_repo" para repositorios públicos, "repo" para privado.
Guarde la ficha en algún lugar, ya que solo puede verla una vez.
En la configuración de Travis para el repositorio
https://travis-ci.org/<me>/<myrepo>/settings
crea 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 las visitas autorizadas pueden ver tales variables de entorno, por lo que si un usuario malintencionado intenta realizar una solicitud de extracción para obtener su cadena, la variable no estará allí.
¡Solo asegúrate de que nunca, nunca, incluyas las variables de tu entorno en tu construcción!
Agregue lo siguiente a su
.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 &2>/dev/null cd "$TRAVIS_BUILD_DIR" fi
Método alternativo de cifrado travis
Explicado en detalle en: https://.com/a/33109519/895245
Encripte la cadena GITHUB_API_KEY=<key>
con la gema travis
, y agréguela a su .travis.yml
:
env:
secure: <encrypted>
Esto tiene la ventaja de que no requiere el uso de la interfaz web de Travis, pero sí requiere el uso de una Gema y más copia de pegado.