Las implementaciones pueden ser dolorosas, especialmente para infraestructuras grandes y complejas donde hay muchas piezas en movimiento. Además de esto, tienes que recordar implementar todas esas piezas y omitir un paso puede derribar el sitio de una mala manera, no solo porque estás implementando una nueva versión y tienes un poco de tiempo entre diferentes migraciones. Un tema recurrente en todas estas tareas, sin embargo, es que todas son importantes de una forma u otra. Nos ayudan a centrarnos en los verdaderos desafíos del trabajo, no en el drama en la code revisión o tropezando con otra code implementación, pero otro tema, todos requieren humanos para hacerlos.
Eso significa que son propensos a errores humanos. Y ya sea simplemente por olvidar ejecutar algo o olvidar incluir un paso en particular incluso por olvidar hacerlo en el orden correcto, ¿qué podemos hacer para evitar esos errores humanos? Bueno, podemos automatizarlo, por supuesto. Así que aprendamos cómo automatizar todas las cosas.
¿Cómo automatizamos realmente todas las cosas? Si estamos implementando algo incluso moderadamente complejo, tenemos un montón de cosas que normalmente tenemos que hacer para implementar realmente nuestro stack completo. Esos 10 comandos o botones que tienes que ejecutar cada vez que tu servidor Rails y AWS infraestructura, bueno, podemos poner eso en un script. Los scripts son probablemente la forma más sencilla de automation. Esto nos ayuda a automatizar las tareas manuales que podríamos tener que hacer. ¿Por qué no ponerlos en un script bash? O inserta tu lenguaje de scripting favorito, como Node, donde incluso puedes escribir en JavaScript si eso es lo tuyo. El objetivo es tener una lista de pasos repetibles. Y al usar ese único comando con ese script, eres capaz de hacer exactamente lo mismo cada vez. De esa manera nunca olvidas dejar nada fuera.
Pero los scripts también dependen en última instancia de algo para desencadenar eso. Si todavía es un humano, podrías olvidar ejecutar ese script en primer lugar. O si alguien está cubriendo por un día, tal vez ni siquiera saben que tienes un script para ejecutar esta configuración. Una característica que viene incorporada en Git mismo son los Git hooks. Con los Git hooks, puedes desencadenar algo en diferentes puntos del proceso de Git. Por ejemplo, puedes configurar un hook de commit, donde cada vez que realmente ejecutas un commit, tu hook se ejecutará, automatizando alguna parte de tu proceso, donde un buen ejemplo para eso es el formateo. Cada vez que alguien hace un commit, puedes configurar Prettier, u otro formateador, para que se ejecute antes de que el commit se aplique realmente. Con tus scripts existentes para ejecutar el linting y el formateo, esto se llama precommit, donde, con herramientas como Husky, puedes enganchar y gestionar todos esos Git hooks. También estamos aplicando lint staged aquí, lo que nos permite obtener la ruta de todos esos cambios que realmente obtenemos en la etapa para Git, de esa manera, cuando ejecutamos nuestro hook precommit no estamos afectando todo el árbol del repositorio, solo estamos impactando los archivos que realmente cambiaron. Pero una vez que ese script termina, esos cambios se añaden a la etapa de Git antes de que ese commit se aplique realmente. Así que cuando el commit real sucede, todo lo que Git sabe es que el code es bonito y está formateado. Todo lo que el desarrollador sabe es que hizo su trabajo, y cuando el code se sube a GitHub, parece que una sola persona lo escribió. Pero no todo tiene sentido dentro de un Git hook. No quieres ejecutar tus pruebas como un hook precommit, por ejemplo, donde eso va a ser un gran dolor para los desarrolladores. Imagina que estás trabajando en un proyecto con una gran suite de pruebas y para poder hacer un commit, tienes que ejecutar toda esa suite.
Comments