No tienes acceso a esta clase

隆Contin煤a aprendiendo! 脷nete y comienza a potenciar tu carrera

Curso de GitHub Actions

Curso de GitHub Actions

Juan Jos茅 Torres

Juan Jos茅 Torres

Buenas pr谩cticas al usar GitHub Actions

16/18
Recursos

En un mundo donde la automatizaci贸n es sin贸nimo de mayor eficiencia y productividad, GitHub Actions se ha revelado como un aliado de oro. Sin embargo, a medida que 铆bamos implementando GitHub Actions en un proyecto open source, surgi贸 un conjunto de buenas pr谩cticas que decidimos hacer expl铆citas para optimizar el flujo de trabajo en cualquier proyecto de desarrollo.

A continuaci贸n, se detalla una serie de recomendaciones transformadas del discurso a la escritura para maximizar tu rendimiento con GitHub Actions.

驴Por qu茅 es recomendable usar workflows peque帽os en GitHub Actions?

Usar workflows peque帽os en GitHub Actions es una pr谩ctica sugerida. Estos permiten mayor modularizaci贸n y facilitan la detecci贸n y correcci贸n de errores en caso de fallos. La idea detr谩s de esta pr谩ctica es tener workflows definidos para cada proceso en lugar de tener un solo workflow que maneje todo el flujo.

驴Cu谩l es la importancia de usar timeouts en workflows GitHub Actions?

Los timeouts son par谩metros que puedes establecer en los jobs de tus workflows. Estos son cruciales para evitar que un proceso corra indefinidamente debido a un error, lo que podr铆a aumentar el tiempo de ejecuci贸n de los runners y, en consecuencia, incrementar los costos - en el caso de los repositorios privados, GitHub cobra por la cantidad de minutos que los runners est谩n en funcionamiento.

驴Qu茅 precauciones se deben tener al utilizar actions de terceros en GitHub Actions?

Con m谩s de 17,000 actions disponibles en el Marketplace de GitHub, la tentaci贸n de utilizar actions de terceros puede ser grande. Pero ten en cuenta que al agregar actions de terceros a tus workflows es similar a agregar una nueva dependencia a tu proyecto.

Aseg煤rate de que las actions sean de un autor confiable, tengan actividad reciente en su repositorio y no presenten amenazas de seguridad para tu proyecto.

驴Por qu茅 es importante especificar la versi贸n de los actions en GitHub Actions?

Especificar la versi贸n de los actions impide que tu trabajo dependa de actualizaciones imprevistas que podr铆an agregar errores a tu trabajo. Consid茅ralo una forma de garantizar la estabilidad de tu proyecto. Tambi茅n puedes usar el SHA de GitHub, el hash que se genera para un commit espec铆fico cuando se requiere alta sensibilidad y fiabilidad en el trabajo.

驴C贸mo puede limitarse los permisos del token en GitHub Actions para aumentar la seguridad?

Una de las claves para una buena seguridad en GitHub Actions es limitar los permisos del token. El token predeterminado que crea GitHub puede ser configurado para tener s贸lo permisos de lectura, agregando permisos de escritura s贸lo cuando sea absolutamente necesario. Esta es una forma eficaz de reducir vulnerabilidades y mantener a salvo tu proyecto en caso de un ataque a un repositorio de terceros.

Aportes 1

Preguntas 0

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad?

o inicia sesi贸n.

Usar Workflows peque帽os

Un Workflow puede contener una gran cantidad de steps que ejecuten ciertos pasos, donde podr铆amos englobar en ciclo entero de CI/CD en un solo archivo. Si bien en la teor铆a es posible, en la realidad notamos que la pura ejecuci贸n tomar铆a horas y un solo error destruir铆a el ciclo entero, adem谩s de que la depuraci贸n de dicho bug contendr铆a m谩s ruido que resultar谩 en m谩s tiempo de troubleshooting.

Lo mejor es crear Workflows modulares que ejecuten una tarea espec铆fica, por esta raz贸n creamos uno para el test, otro para el build y uno para deploy, de esta manera controlaremos cu谩ndo se ejecutar谩n y si han tenido un bug detenerlo en la etapa pertinente.

Usar timeouts

Los timeouts ser谩n limitantes de tiempo en los que si no se ejecuta un step a tiempo se determinar谩 que ha fallado. Podemos determinar un timeout para cada job en minutos.

jobs:
	configlet:
		timeout-minutes: 30
		runs-on: ubuntu-latest
		steps:
			- [...]

Es importante configurar un tiempo m谩ximo dado que en el contexto de repos privados Actions cobra por cada minuto que ha gastado la m谩quina, por lo que si un step genera un bucle infinito o no es capaz de salir de un proceso se reflejar谩 en la factura final.

Cuidado con el uso de Actions de terceros

Los Actions del marketplace los podemos entender como librer铆as de los lenguajes de programaci贸n, son utilidades hechas por terceros para facilitarnos problemas y es mejor implementarlas antes de reescribir todo el c贸digo desde 0.

Si bien usar Actions de terceros siempre ser谩 ideal, es importante fijarse en estos. Debemos revisar que el Action se encuentre en constante mantenimiento y que no ha sido abandonado hace alg煤n tiempo (sin posibilidad de solucionar un bug que tengas), tambi茅n revisar el source code y asegurar que sea de un proveedor con reputaci贸n. Un Action malicioso o defectuoso reflejar谩 una falla de seguridad grave en nuestro proyecto y pondr谩 en riesgo la integridad del c贸digo.

Especificar versi贸n de los Actions

Cuando usamos un Action debemos especificar que versi贸n usaremos, esto normalmente se hace despu茅s del s铆mbolo 鈥淍鈥 con una versi贸n (v3 por ejemplo), sin embargo, puede suceder que se sobrescriba esta versi贸n con otro commit de manera inconsciente.

Cada commit se Git genera un hash, este hash es un identificador 煤nico por cada cambio, por lo que no importa si algo se sobrescribe de nombre, el hash original ser谩 煤nico y podremos acceder a esta versi贸n del Action a trav茅s del tiempo.

Si es posible, debemos acceder a la versi贸n de los Actions con el hash indicando con un comentario a qu茅 versi贸n apunta.

name: Checkout code
uses: actions/checkout@a12a3943b4bdde767164f7792f33f40b04645d846 #v3

Limitar permisos de Tokens

Cuando entregamos diferentes Tokens a los Actions podemos configurar los permisos que tendr谩n, si no los configuramos este tendr谩 otro tipo de permisos (como escritura). Si un Action es comprometido, hemos dado acceso indirecto a un agente malicioso a muchos de nuestros datos.

permissions:
	contents: read

Siempre es mejor limitar los permisos de nuestros tokens, de esta manera siempre estaremos blindados y lo peor que suceder谩 en una falla de seguridad ser谩 cambiar el proveedor y no preocuparnos por un leak de alto nivel.