Despliegue automático usando Git


#1

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?


#2

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


#3

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


#4

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


#5

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?


#6

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.


#7

Por que no usas travis??

https://travis-ci.org/

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


#8

[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.


#9

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/* taca@piticli.com:/home/taca/public_html/web-felpudo.com
ssh taca@piticli.com "~/bin/jekyll build -s /home/taca/public_html/web-felpudo.com -d /home/taca/public_html/web-felpudo.com/_site"
ssh taca@piticli.com "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.

#10

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.


#11

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


#12

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


#13

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


#14

¿Es una pagina porno?


#15

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.


#16

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:


#17

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.


#18

Si Git tiene disparador correspondiente seguro que se puede hacer.


#19

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.


#20

Suena más interesante aún.