El sistema de automatización de procesos de ensamblaje abierto Cicada está disponible, permitiendo desplegar en su servidor una infraestructura similar a GitHub Actions, Azure DevOps y Gitlab CI, sin depender de servicios en la nube. El código del proyecto está escrito en Python y se distribuye bajo la licencia AGPLv3.
El sistema puede iniciar automáticamente scripts de construcción y pruebas de bases de código cuando se producen ciertos eventos, como la recepción de un push en Git, la creación de lanzamientos, la apertura/cierre de issues y la apertura/cierre de pull requests. Una característica distintiva de Cicada es la provisión de un lenguaje de programación funcional orientado a objetos, que admite variables, expresiones, bucles, bloques condicionales y funciones incorporadas. on git.push fn test(compiler): env.CC = compiler echo Testing (compiler) shell make clean all let compilers = ["gcc", "clang"] for compiler in compilers: test(compiler)
El lenguaje propuesto permite crear fácilmente manejadores que son problemáticos de describir en archivos de configuración basados en el formato YAML, y permite prescindir de la conexión de scripts externos en Shell o Python. Al mismo tiempo, el enfoque implementado también aborda el problema de la incompatibilidad de los formatos de configuración YAML utilizados en diferentes plataformas de automatización de construcciones. En Cicada se ofrecen tipos de eventos universales independientes de la plataforma, que permiten vincular el mismo script de automatización a diferentes plataformas, por ejemplo, un manejador de push requests se puede adjuntar a eventos provenientes de GitHub y Gitlab.
Se presta especial atención al almacenamiento seguro de tokens y contraseñas utilizados para acceder a APIs, repositorios y entornos para la instalación de las construcciones resultantes. Esta información confidencial se almacena en forma encriptada (AES-GCM con una clave de 256 bits) utilizando las herramientas de HashiCorp Vault. Para cada repositorio y punto de instalación se crea una clave de cifrado separada, y las claves se actualizan automáticamente cada 30 días, almacenándose en una ubicación de claves separada. servidor.
Los datos secretos, por defecto, no se transmiten a través de variables de entorno, y el repositorio solo tiene acceso de lectura. Existe una protección integrada contra la sustitución de comandos en expresiones, que garantiza el escape automático de construcciones peligrosas; por ejemplo, la expresión ‘let name = «; rm -rf /»; echo Hello, (name)’ no permitirá la ejecución del comando «rm». Entre las optimizaciones, se destaca un sistema de caché integrado para los resultados de compilación y carga de recursos.
Fuente: opennet.ru
