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 2

Preguntas 0

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

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.

like 👍