Достъпната отворена система за автоматизация на сборъчни процеси Сicada позволява да се разгръне инфраструктура на ваш сървър, подобна на GitHub Actions, Azure DevOps и Gitlab CI, без да зависи от облачни услуги. Кодът на проекта е написан на Python и се разпространява под лицензия AGPLv3.
Системата автоматично стартира сценарии за сборка и тестване на кодови бази при определени събития, като влизане на push-заявка в Git, създаване на издания, отваряне/затваряне на issue и отваряне/затваряне на pull-заявки. Отличителната черта на Сicada е предоставянето на логика за работа с предметно ориентиран функционален език за програмиране, който поддържа променливи, изрази, цикли, условни блокове и вградени функции. 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)
Предложеният език позволява лесно създаване на обработчици, които трудно могат да бъдат описани в конфигурационни файлове в YAML формат, и дава възможност да се избегне използването на външни скриптове на Shell или Python. При това, реализираният подход решава и проблема с несъвместимостта на YAML форматите за конфигурация, използвани в различни платформи за автоматизация на сборки. В Сicada се предлагат платформа-независими универсални типове събития, които позволяват свързването на един и същ сценарий за автоматизация с различни платформи; например, обработчик за push-заявки може да бъде прикрепен към събития, постъпващи от GitHub и Gitlab.
Особено внимание се обръща на безопасното съхранение на токени и пароли, използвани за достъп до API, репозитории и среди за инсталиране на резултатните сборки. Подобна конфиденциална информация се съхранява в криптиран вид (AES-GCM с 256-битов ключ) с помощта на инструментария на HashiCorp Vault. За всеки репозиторий и точка на инсталация се създава отделен ключ за криптиране, ключовете автоматично се актуализират на всеки 30 дни, а хранилището на ключовете се стартира на отделен сървър.
Секретните данни по подразбиране не се предават чрез променливи среди, а в репозитория се отваря само достъп за четене. Съществува вградена защита от подмяна на команди в изразите, осигуряваща автоматично екраниране на опасни конструкции, например, изразът ‘let name = «; rm -rf /»; echo Hello, (name)’ няма да доведе до изпълнението на командата «rm». От оптимизациите се отбелязва вградената система за кеширане на резултатите от компилацията и зареждането на ресурси.
Източник: opennet.ru
