Cicada er et åbent automatiseringssystem til byggeprocesser, som gør det muligt at implementere en infrastruktur på sin egen server, der ligner GitHub Actions, Azure DevOps og GitLab CI, uden at være afhængig af cloud-tjenester. Projektets kode er skrevet i Python og distribueres under AGPLv3-licensen.
Systemet kan automatisk køre byggeri- og testskripter, når bestemte hændelser indtræffer, såsom modtagelse af pull-anmodninger i Git, oprettelse af udgivelser, åbning/lukning af issues og åbning/lukning af pull-anmodninger. En særpræg ved Cicada er muligheden for at definere logikken for arbejdet i et domænespecifikt funktionsprogrammeringssprog, der understøtter variabler, udtryk, løkker, betingede blokke og indbyggede funktioner. 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)
Det foreslåede sprog gør det nemt at oprette håndterere, som er problematiske at beskrive i konfigurationsfiler baseret på YAML-formatet, og giver mulighed for at undgå at tilslutte eksterne skripter i Shell eller Python. Den implementerede tilgang løser også problemerne med inkompatibilitet mellem YAML-konfigurationsformater, der anvendes på forskellige automatiseringsplatforme. I Cicada tilbydes platform-uafhængige universelle hændelsestyper, som gør det muligt at knytte det samme automatiseringsscript til forskellige platforme, f.eks. kan en håndterer for pull-anmodninger knyttes til hændelser, der kommer fra GitHub og GitLab.
Der lægges også særlig vægt på sikker opbevaring af tokens og adgangskoder, der anvendes til adgang til API'er, repositories og miljøer til installation af de resulterende builds. Sådan fortrolig information opbevares i krypteret form (AES-GCM med 256-bits nøgle) ved hjælp af HashiCorp Vault. For hvert repository og installationspunkt oprettes en separat krypteringsnøgle, og nøglerne opdateres automatisk hver 30. dag, mens nøglelageret kører på en separat. serveren.
Standarddata overføres som standard ikke gennem miljøvariabler, og der åbnes kun for skrivebeskyttet adgang til repositoryet. Der er indbygget beskyttelse mod kommandoindsættelse i udtryk, hvilket sikrer automatisk escape af farlige konstruktioner. For eksempel vil udtrykket 'let name = "; rm -rf /"; echo Hello, (name)' ikke resultere i udførelsen af kommandoen 'rm'. Der er bemærkelsesværdige optimeringer som en indbygget kompilering og ressourceindlæsning cache-system.
Kilde: opennet.ru
