O sistema de automação de processos de montagem Cicada está disponível, permitindo que você implemente em seu servidor uma infraestrutura semelhante ao GitHub Actions, Azure DevOps e GitLab CI, sem depender de serviços em nuvem. O código do projeto é escrito na linguagem Python e distribuído sob a licença AGPLv3.
O sistema é capaz de iniciar automaticamente scripts de construção e teste de bases de código quando certos eventos ocorrem, como a chegada de um pull request no Git, a criação de versões, a abertura/fechamento de issues e a abertura/fechamento de pull requests. Uma característica distintiva do Cicada é a oferta de um idioma de programação focado em domínio que permite definir a lógica de funcionamento, suportando variáveis, expressões, loops, blocos condicionais e funções embutidas. 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)
A linguagem proposta permite criar facilmente manipuladores que são difíceis de descrever em arquivos de configuração baseados no formato YAML e possibilita operar sem a necessidade de scripts externos em Shell ou Python. Além disso, a abordagem implementada também resolve o problema da incompatibilidade entre formatos YAML de configuração usados em diferentes plataformas de automação de construção. No Cicada, tipos de eventos universais independentes da plataforma são oferecidos, permitindo vincular o mesmo script de automação a diferentes plataformas, por exemplo, um manipulador de pull requests pode ser anexado a eventos provenientes do GitHub e GitLab.
Atenção especial também é dada ao armazenamento seguro de tokens e senhas utilizados para acesso a APIs, repositórios e ambientes para a instalação de construções resultantes. Essas informações confidenciais são armazenadas de forma criptografada (AES-GCM com chave de 256 bits) usando as ferramentas do HashiCorp Vault. Para cada repositório e ponto de instalação, uma chave de criptografia separada é criada, e as chaves são atualizadas automaticamente a cada 30 dias; o armazenamento das chaves é executado separadamente. servidor.
Os dados secretos, por padrão, não são transmitidos através de variáveis de ambiente, e o repositório só recebe acesso somente leitura. Existe uma proteção embutida contra a injeção de comandos em expressões, garantindo a escape automático de construções perigosas; por exemplo, a expressão ‘let name = «; rm -rf /»; echo Hello, (name)’ não resultará na execução do comando «rm». Entre as otimizações, destaca-se o sistema integrado de cache de resultados de compilação e carregamento de recursos.
Fonte: opennet.ru
