Despliegue automático usando Git

Con objetivo de reconstruir mi blog (y diseñar muchas partes), he empezado un proceso de migrarlo a mi propio host, que tengo un VPS sin utilizar y es hora de meterle mano. Sin embargo, mi blog está hecho con Jekyll y tengo el repositorio en GitHub, cosa que me gustaría que siguiese siendo así (hasta que lo migre a Gitlab), así que, necesito poder automatizar el pull del repositorio (y el build, pero eso ya es otra cosa) en el nuevo servidor.

Estoy mirando los webhooks de GitHub y tal, pero no me aclaro con este tema… ¿Alguien me echa una linterna o algo?

Yo… como no quieras que te traiga una del BricoMart que están muy baratas… Tienen hasta imán.
A partir de la segunda línea te hago un Paul Brown… es decir, no entiendo nada, pero te deseo mucha suerte

Si lo tienes en GitHub con Jekyll… ¿para que instalarlo en tu propia máquina en vez de github pages?

Pero bueno. Básicamente un WebHook lo que hace es una llamada a una dirección HTTP cuando se realice cierta acción, como un push en este caso.

Teniendo un Jenkins bien configurado y con los puertos hacia fuera a la espera del WebHook podrás a hacer que se lance la tarea automáticamente.

Un ejemplo

Yo genero el webo en local y el directorio resultante lo sincronizo al servidor con rsync. Va fetén.

Principalmente por las limitaciones con respecto a gemas que admite GH Pages. Tienen su propia whitelist, y las que no entren en esa lista, no las admite, lo cual me limita un poco a la hora de dar rienda suelta a mi “creatividad”. Pero además de que quiero tener todo en mi servidor propio.

Ya con esto se resuelven el 90% de mis dudas, thanks!

¿pero tienes un repo público con tu blog y tal?

Para mi webo personal no.

Y si fuera público el método puede ser exactamente el mismo. Hay que hacer un paso manual pero no te mueres por eso. E incluso puede que se pueda automatizar con alguno de los activadores de git.

Por que no usas travis??

https://travis-ci.org/

Configuras un script que haga lo que necesites. Así podrías hacer el despliegue automatizado.

[olea] olea http://foro.hacklabalmeria.net/u/olea
17 Agosto

SrFreak:

¿pero tienes un repo público con tu blog y tal?

Para mi webo personal no.

Y si fuera público el método puede ser exactamente el mismo. Hay que
hacer un paso manual pero no te mueres por eso. E incluso puede que se
pueda automatizar con alguno de los activadores de git
https://git-scm.com/book/en/v2/Customizing-Git-Git-Hooks.

También creo que hay por ahí un git-ftp o similar, que se puede disparar
tras hacer el commit.

Me viene bien este hilo porque en mi caso también necesito hacer algo
similar.

Salud y Revolución.

Lobo.

Ea:

$ cat  mirepo.git/hooks/post-receive
#!/bin/sh
git --work-tree=/var/www/webo-felpudo.com-tmp --git-dir=/var/lib/gitolite/repositories/mirepo.git/ checkout -f
rsync  -auz -e ' ssh -p 22  ' --delete /var/www/webo-felpudo.com-tmp/* [email protected]:/home/taca/public_html/web-felpudo.com
ssh [email protected] "~/bin/jekyll build -s /home/taca/public_html/web-felpudo.com -d /home/taca/public_html/web-felpudo.com/_site"
ssh [email protected] "chmod -R a+r /home/taca/public_html/web-felpudo.com/_site"

# ésto ya no me acuerdo si era necesario:
# find /var/www/webo-felpudo.com-tmp/_site/ -type d -exec chmod a+x {} \;

# avisando de los cambios a los buscadores:
curl "http://www.google.com/webmasters/sitemaps/ping?sitemap=http://felpudo.com/sitemap.xml" > /dev/null &
curl "http://www.bing.com/webmaster/ping.aspx?siteMap=http://felpudo.com/sitemap.xml" > /dev/null &

Consideraciones:

  • mirepo.git es el repo principal, en mi caso creado con gitolite pero con esta modificación hecha a mano
  • http://felpudo.com es la web que publico
  • /home/taca/public_html/web-felpudo.com/_site es la raiz de tu web pública.

No sabía que podría hacerse con travis, curioso.

Es básicamente lo que quiero hacer con webhooks.

El ejemplo de @olea está curioso, oye.

Hola,
Simplemente tienes que llamar a la URL donde tengas el script de despliegue.
Busca “deploy.php git” y encontrarás ejemplos de como hacerlo.
Si no encuentras nada dímelo y miro de pasarte algun ejemplo de los míos, no te lo mando ya porque no tengo acceso ahora.
Saludos

Qué te puedo decir que no sepáis ya: si es que para algunas cosas a veces soy un máquina.

1 me gusta

+1 quien haya entrado también a felpudo.com para probar.

1 me gusta

¿Es una pagina porno?

Hostia, que curioso. Lo único malo que le veo es que no tienes un “log” de cada vez que has publicado algo, pero supongo que no lo vas a necesitar nunca.

Yo tiraría por un webhook y un scrip tonto que haga pull y genere los estáticos.

Lo del log se podría hacer, pero como dices es que no lo necesito por ahora.

Lo del webhook es añadir complejidad innecesaria. El repo Git sabe cuándo hay un evento y si tienes acceso ssh a la máquina ya te ahorras al menos una configuración.

Pero vamos, q estos disparadores son de toda la vida.Hasta en Svn los tenías. Lo de depender sólo de webooks es muy «de millennials» :wink:

Ya, lo de webhooks es atarte a GitHub.
Había usado los hooks de los he utilizado para pasar linters y tests después de un commit, o para este mismo caso pero llamando a un script que hace pull en el servidor. Lo que me parece curioso es lo de usar rsync, y me mola.
Lo que se podría hacer para simplificarlo aún más ( y no necesitar jekyll en el servidor) es generar los estáticos en tu máquina y empujarlos al servidor.

Si Git tiene disparador correspondiente seguro que se puede hacer.

Los hooks de toda la vida, los hay en subversion y en git, no hace falta ni github ni gitlab para nada.

https://git-scm.com/book/gr/v2/Customizing-Git-Git-Hooks

Saludos.

2 Me gusta

Suena más interesante aún.