Das offene Automatisierungssystem zur Verwaltung von Build-Prozessen, Cicsada, ermöglicht es Ihnen, eine Infrastruktur auf Ihrem Server einzurichten, die GitHub Actions, Azure DevOps und GitLab CI ähnlich ist, ohne von Cloud-Diensten abhängig zu sein. Der Code des Projekts ist in Python geschrieben und wird unter der AGPLv3-Lizenz veröffentlicht.
Das System kann automatisch Build- und Testscripts ausführen, wenn bestimmte Ereignisse eintreten, wie z. B. das Erhalten eines Push-Requests in Git, die Erstellung von Releases, das Öffnen/Schließen von Issues und das Öffnen/Schließen von Pull-Requests. Ein herausragendes Merkmal von Cicsada ist die Bereitstellung eines domänenspezifischen funktionsorientierten Programmieransatzes, der Variablen, Ausdrücke, Schleifen, bedingte Blöcke und integrierte Funktionen unterstützt. 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)
Die angebotene Sprache ermöglicht es, einfach Handler zu erstellen, die schwer in YAML-basierten Konfigurationsdateien zu beschreiben sind, und macht die Verwendung externer Skripte in Shell oder Python überflüssig. Der implementierte Ansatz löst zudem das Problem der Inkompatibilität zwischen verschiedenen YAML-Konfigurationsformaten, die in Automatisierungsplattformen verwendet werden. In Cicada werden plattformunabhängige universelle Ereignistypen angeboten, die es ermöglichen, dass dasselbe Automatisierungsskript an verschiedene Plattformen gebunden wird; beispielsweise kann ein Handler für Push-Anfragen an Ereignisse aus GitHub und GitLab angeschlossen werden.
Besonderes Augenmerk wird auch auf die sichere Speicherung von Tokens und Passwörtern gelegt, die für den Zugriff auf APIs, Repositories und Umgebungen zur Installation der resultierenden Builds verwendet werden. Solche sensiblen Informationen werden verschlüsselt (AES-GCM mit einem 256-Bit-Schlüssel) mithilfe des HashiCorp Vault gespeichert. Für jedes Repository und jeden Installationspunkt wird ein separater Verschlüsselungsschlüssel erstellt, die Schlüssel werden automatisch alle 30 Tage aktualisiert, und das Schlüsselverzeichnis läuft auf einem separaten. Server.
Standardmäßige geheime Daten werden nicht über Umgebungsvariablen übergeben, und im Repository wird nur Lesezugriff gewährt. Es gibt einen integrierten Schutz gegen die Einfügung von Befehlen in Ausdrücke, der eine automatische Escapierung gefährlicher Konstrukte gewährleistet. Zum Beispiel führt der Ausdruck 'let name = " ; rm -rf / " ; echo Hello, (name)' nicht zur Ausführung des Befehls 'rm'. Zu den Optimierungen gehört ein integriertes System zur Zwischenspeicherung von Kompilierungsergebnissen und Ressourcenladungen.
Quelle: opennet.ru
