push automatizado a un repository github con travis

Tengo un repository de gitub.io que aloja mi página web: el origen de esa página web (código de Jade / Sass sin comstackr) se encuentra en un repository público separado. Travis-CI está configurado para ver mi repository de origen para los cambios y ejecutar el set de compilation, generando el HTML / CSS que será enviado al repo de github.io.

¿Puedo configurar Travis para que automáticamente haga un push a un repository github que poseo si la compilation pasó, sin codificar mi nombre de usuario y contraseña en mi file .travis.yml (obviamente esto es un problema de security)?

He visto esta pregunta , pero no fue respondida con Travis en mente. No creo que pueda usar la authentication del par de keys porque tendré que poner la key privada en el repository o en el guión travis, que es tan grande como un agujero de security como poner mi contraseña.


Para cualquier otra persona que termina aquí, encontré la siguiente información usando la respuesta de Roidrage como un trampolín:

  1. Travis usa encryption de key pública / privada para permitirle insert información confidencial en un file .travis.yml . Puedes instalar su gem llamada "travis" y usarla para encriptar cosas, y la descifrarán de forma segura. Documentación: http://docs.travis-ci.com/user/encryption-keys/

  2. En github, puede generar un "token de acceso personal" en la configuration de sus aplicaciones . Esto se puede usar como una contraseña por las aplicaciones. Cifre eso usando la técnica anterior y tírelo a su yaml.

Esto se puede lograr almacenando un token para acceder a GitHub de forma encriptada en el file .travis.yml. Consulte nuestros documentos para get ejemplos sobre cómo cifrar datos.

En cuanto a la inserción en GitHub Pages, hay una publicación de blog que resume bastante bien los pasos, e incluso apunta a un script que puedes usar en tu compilation.

Un espejo del guión está aquí:

 #!/usr/bin/env bash # This script was written to facilitate the deployment process of Pelican # websites using Travis CI. See this blog post for more information: # http://kevinyap.ca/2014/06/deploying-pelican-sites-using-travis-ci/ usage="Usage: $(basename "$0") (deploy | diff | serve) Commands: deploy Upload site to Github Pages diff Compare locally generated site to live site serve Generate and serve site (auto-reloads on changes)" TARGET_REPO="iKevinY/iKevinY.github.io" GH_PAGES_BRANCH="master" DEVELOP_CONF="pelicanconf.py" PUBLISH_CONF="publishconf.py" OUTPUT_DIR="output" REMOTE_DIR="remote" PY_CMD="python3" SERVER="http.server" PORT="8000" rootPath="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" generate_site() { # Based on http://zonca.github.io/2013/09/automatically-build-pelican-and-publish-to-github-pages.html if [ "$TRAVIS" == "true" ]; then # Ensure that builds triggenetworking by pull requests are not deployed if [ "$TRAVIS_PULL_REQUEST" != "false" ]; then echo "Successfully built pull request #$TRAVIS_PULL_REQUEST." exit 0 fi echo "Deploying site to $GH_PAGES_BRANCH branch of $TARGET_REPO." git config --global user.email "travis@travis-ci.org" git config --global user.name "Travis CI" else cd "$rootPath" || exit 1 pelican -s $PUBLISH_CONF fi # Pull hash and commit message of the most recent commit commitHash=$(git rev-parse HEAD) commitMessage=$(git log -1 --pretty=%B) # Clone the GitHub Pages branch and rsync it with the newly generated files GITHUB_REPO=https://${GH_TOKEN:-git}@github.com/${TARGET_REPO}.git git clone --branch $GH_PAGES_BRANCH --depth 1 "$GITHUB_REPO" $REMOTE_DIR &> /dev/null rsync -r --exclude=.git --delete $OUTPUT_DIR/ $REMOTE_DIR/ pushd $REMOTE_DIR > /dev/null git add -A git status -s $1 # execute the function that was passed as an argument } push_changes() { if [ "$TRAVIS" == "true" ]; then longMessage="Generated by $commitHash; pushed by build #$TRAVIS_BUILD_NUMBER." git commit -m "$commitMessage" -m "$longMessage" git push origin $GH_PAGES_BRANCH &> /dev/null || echo "Push failed." else read -rp "Push changes to GitHub Pages? [y/N] " response if [[ "$response" =~ ^[Yy]$ ]]; then git commit -m "$commitMessage" -m "Generated by $commitHash." git push origin $GH_PAGES_BRANCH fi popd > /dev/null rm -rf -- $REMOTE_DIR $OUTPUT_DIR && echo "Removed $REMOTE_DIR and $OUTPUT_DIR." fi } case "$1" in 'deploy') generate_site push_changes ;; 'diff') generate_site 'git --no-pager diff --cached --color-words' ;; 'serve') developPath=${rootPath}/develop local_ip=$(ifconfig | grep 'inet ' | awk 'NR==2 {print $2}') # Seed directory with site content cd "$rootPath" && pelican -s $DEVELOP_CONF > /dev/null echo "Serving HTTP at $(tput bold)${local_ip}:${PORT}$(tput sgr0)." cleanup() { pkill -f $SERVER cd "$rootPath" && rm -r "$developPath" && echo && exit 0 } trap cleanup SIGINT (pelican -rs $DEVELOP_CONF 2> /dev/null) & (cd "$developPath" || exit 1; $PY_CMD -m $SERVER $PORT 1> /dev/null) & wait ;; *) echo "$usage" exit 2 ;; esac 

Mac OS El Capitan requiere Ruby ^ 2.2

 brew unlink ruby; brew install Ruby gem install travis 

Usa la gem travis para encriptar tu PAT secreto y actualiza tu .travis.yml

 travis encrypt GH_TOKEN=<secret github personal access token> --add