Usando GIT y un CDN para contenido estático

Problema:

Tengo una aplicación que despliego usando GIT. Cuando quiero actualizar los files en mi server, hago un simple git pull para get la última versión de la aplicación del repository de GitHub. La cuestión es que quiero servir todo el contenido estático de mi count de Amazon S3, pero quiero que estos files estén sincronizados con la versión en el server principal.

Preguntas:

  1. Cuando git pull mi proyecto desde GitHub, ¿cómo puedo get estos files en mi count S3?
  2. Si quiero cambiar la versión en mi server (a través de una label) ¿cómo puede esto reflejarse en mi count S3?

Ah, bienvenido al mundo de las versiones de contenido.

Esta no es una pregunta de GIT, sino un problema común cuando se intenta sincronizar el contenido estático publicado desde una location con el contenido versionado (desde el control de origen) servido desde una location diferente.
Un uso común es un website con contenido dynamic y estático.
Un ejemplo random es hotels.com . Si inspecciona las imágenes en la página principal verá URL como esta . Obviamente, el nombre de este recurso es generado automáticamente por un Asset Manager .

Usamos Django y Python para algunas tareas, de ahí el uso de Django Mediagenerator . Generamos un directory con nombre versionado de files estáticos que cargamos a S3.

Como puede ver en esta comparación , ¡hay muchas otras opciones disponibles!
Como una ventaja para usar gestores de activos, también obtienes compression, ofuscación, fusión, etc.

En una parte diferente de la aplicación, actualizamos manualmente los files. Calculo automáticamente un module python de hashes de files (un hash por cada file estático). Subo los files estáticos a S3 mientras cambio el nombre de los files para agregar el hash MD5 de su contenido. De esta manera, some_file.txt se convierte en some_file_123123123123.txt en S3 y puedo download la versión específica del file desde S3. El module con hash se almacena en control de fuente (GIT).

Creo que los ganchos de Git deberían hacer lo que quieras. Tal vez sea suficiente post-checkout (para cambiar las tags) o post-merge (para tirar). Luego tendría que escribir un script bash, que copyrá sus files estáticos en su S3 y ejecutará ese script bash en los hooks.

Puede encontrar esto útil, en caso de que use PHP para su aplicación (de lo contrario este código se puede adaptar a sus necesidades): https://github.com/SupersonicAds/git-hook-php-s3-files-revisions