Das offene Automatisierungssystem Cфicada ermöglicht es, eine Infrastruktur auf einem eigenen Server bereitzustellen, die ähnlich wie GitHub Actions, Azure DevOps und Gitlab CI ist, ohne von Cloud-Diensten abhängig zu sein. Der Projektcode ist in Python geschrieben und unter der AGPLv3-Lizenz verfügbar.
Das System ist in der Lage, Build- und Test-Skripte automatisch auszulösen, wenn bestimmte Ereignisse eintreten, wie z. B. das Eintreffen eines Push-Requests in Git, die Erstellung von Releases, das Öffnen/Schließen von Issues und das Öffnen/Schließen von Pull-Requests. Ein besonderes Merkmal von Cфicada ist die Bereitstellung einer logikbasierten Definition einer domänenspezifischen funktionalen Programmiersprache, die 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 in YAML-basierten Konfigurationsdateien schwer zu beschreiben sind, und ermöglicht es, auf externe Shell- oder Python-Skripte zu verzichten. Dabei löst der implementierte Ansatz auch das Problem der Inkompatibilität von YAML-Konfigurationsformaten, die auf verschiedenen Automatisierungsplattformen verwendet werden. In Cфicada werden plattformunabhängige universelle Ereignistypen angeboten, die es ermöglichen, dass dasselbe Automatisierungsskript an verschiedene Plattformen gebunden wird, z. B. kann ein Push-Handler an Ereignisse gebunden werden, die von GitHub und Gitlab kommen.
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 in verschlüsslter Form (AES-GCM mit einem 256-Bit-Schlüssel) mithilfe von HashiCorp Vault gespeichert. Für jedes Repository und jeden Installationspunkt wird ein separater Verschlüsselungsschlüssel erstellt, der alle 30 Tage automatisch aktualisiert wird. Der Schlüsselbund wird separat gestartet. Server.
Standardmäßig werden keine geheimen Daten über Umgebungsvariablen übertragen, und im Repository wird nur Lesezugriff gewährt. Es gibt einen integrierten Schutz gegen die Injektion von Befehlen in Ausdrücke, der automatisch gefährliche Konstruktionen maskiert, 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 Kompilergebnissen und dem Laden von Ressourcen.
Quelle: opennet.ru
