Acabo de poner algo así en el trabajo usando pip, Fabric y git. El flujo es básicamente como este, y toma prestado de this script:
- En nuestro árbol de fuentes, mantenemos un archivo requirements.txt. Mantendremos esto de forma manual.
- Cuando hacemos una nueva versión, la secuencia de comandos Fabric crea un archivo basado en cualquier treeish que lo pasemos.
- La tela encontrará el SHA para lo que estamos implementando con
git log -1 --format=format:%h TREEISH
. Eso nos da SHA_OF_THE_RELEASE
- La tela recibirá el último SHA para nuestro archivo de requisitos con
git log -1 --format=format:%h SHA_OF_THE_RELEASE requirements.txt
. Esto escupe la versión corta del hash, como 1d02afc
que es el SHA para ese archivo para esta versión en particular.
- La secuencia de comandos Fabric buscará en un directorio donde se almacenan nuestros archivos virtuales en los hosts remotos.
- Si no hay un directorio llamado
1d02afc
, se crea un nuevo virtualenv y configuración con pip install -E /path/to/venv/1d02afc -r /path/to/requirements.txt
- Si hay es una ya existente
path/to/venv/1d02afc
, no se hace nada
La pequeña magia parte de esto es pasar cualquier árbol que quieras hacer, y hacer que haga el embalaje (desde Tela). Al usar git archive my-branch
, git archive 1d02afc
o lo que sea, estoy seguro de que obtendré los paquetes correctos instalados en mis máquinas remotas.
Fui por esta ruta ya que realmente no quería tener virtuenvs extra flotando si los paquetes no habían cambiado entre lanzamiento. Tampoco me gusta la idea de tener los paquetes reales de los que dependo en mi propio árbol fuente.
El enlace está roto + ( –