Da du har udviklet webapplikationer i et stykke tid nu, har du sikkert bemærket, at mange ting er rutinemæssigt gentagende for dig, selv om de ikke burde være det. Meget ofte er det teknisk projektstyring, filversionering, automatiseret kodegennemgang, forskellige databehandlinger eller måske udrulning til serveren og sikkerhedsspørgsmål i forbindelse hermed.
Når jeg rådgiver virksomheder, støder jeg meget ofte på det problem, at forebyggelse er meget undervurderet. Årsagen er ofte, at udviklerne opfatter nogle ting som meget udfordrende, og at det vil give dem mere arbejde. Men sandheden er, at du som regel kun behøver at opsætte hele systemet én gang, og derefter kan du høste fordelene på lang sigt.
CI/CD er et værktøj, der kan automatisere rutineopgaver, der har et lignende grundlag og gentages i projekter. Den mest almindelige brug af CI er til at køre automatiserede tests, kodegennemgang, automatiserede udrulninger (udrulning af et program til en webserver), projektstyring eller måske sikkerhedsrevisioner.
Tænk på CI som et virtuelt operativsystem, der udfører foruddefinerede kommandoer til terminalen eller kører bestemte programmer. Resultatet af CI er enten en succes eller en fiasko, som vises direkte i projektet, men også sendes til administratorer, som kan reagere på det. En god praksis er at køre CI-jobs efter en specifik begivenhed (f.eks. en commit til repositoriet, en modtaget merge request/pull request, et tag/version/release eller en cron timeloop-kørsel).
Grundlaget for CI er en konfigurationsfil, hvor vi definerer dens adfærd og reaktion på hændelser. I GitHubs tilfælde skal du blot oprette en hjælpemappe .github/workflows
og oprette enhver fil med udvidelsen .yml
deri. GitHub analyserer den med hver commit og udfører den efter behov.
Lad os forestille os, at vi ønsker at definere en ny konfigurationsfil med en specifik opgave. Da dette er en opgave, der skal køres direkte af GitHub eller et andet miljø på den virtuelle maskine, skal vi definere grundlæggende ting om miljøet, herunder:
I tilfælde af job definerer vi yderligere:
Ovenstående container er allerede den første forberedelse til fuldstændig dockerisering af projektet. Den grundlæggende brug af CI er relativt let, og du behøver ikke at forstå Docker overhovedet, du skal blot kende kommandoerne i Terminal.
Som en del af de specifikke trin i opgaven skal vi køre de enkelte kommandoer, der skal opbygge installationen af det operativsystem, vi netop har installeret. Så i tilfælde af PHP er det vigtigt at installere kun PHP-sproget (og angive versionen), klone projektets repository til runneren, installere projektafhængighederne (oftest Composer) og køre selve testen.
Der er en udbredt overtro i it-verdenen om, at Microsoft er den onde virksomhed, der laver ting af lav kvalitet. I tilfældet GitHub Actions er dette dog slet ikke sandt, for de har helt objektivt set verdens bedste CI-platform.
Den grundlæggende fordel ved GitHub CI er enkelheden og elegancen i notationen. Med få linjer kan du konfigurere dit eget testmiljø og administrere det automatisk, selv uden forudgående kendskab. Samtidig ser jeg hastigheden i behandlingen af specifikke opgaver som en stor fordel. For eksempel kan en test af codestyle (kodeformatering) og PhpStan (kontrol af datatyper, logik og generel korrekthed) evalueres af GitHub Actions på et almindeligt projekt på under 50 sekunder, mens GitLab for eksempel evaluerer den samme test på næsten 8 minutter! Andre løsninger som Travis er relativt dyre, og de fleste udviklere sætter alligevel ikke pris på fordelene ved deres særlige funktioner.
GitHub har en stor database med færdige handlinger og pakker, som du kan bruge med det samme. Det drejer sig typisk om operativsystemer, programmeringssprog eller biblioteker fra fællesskabet.
Du kan finde en database med handlinger direkte på Markedspladsen, f.eks. er min favorithandling Send SMS i tilfælde af fejl via Twillio.
Meget mange eksempler [jeg offentliggør i mine egne repositories] (https://github.com/baraja-core), hvor du kan se, hvilken specifik konfiguration jeg bruger.
I februar 2021 brugte jeg f.eks. denne konfiguration til kontrol af kodetil i et projekt:
name: Coding Styleon:push:branches:- masterpull_request:types: [ assigned, opened, synchronize, reopened ]schedule:- cron: '1 * * * *'jobs:nette_cc:name: Nette Code Checkerruns-on: ubuntu-lateststeps:- uses: actions/checkout@v2- uses: shivammathur/setup-php@v2with:php-version: 7.4coverage: none- run: composer create-project nette/code-checker temp/code-checker ^3 --no-progress- run: php temp/code-checker/code-checker --strict-types --no-progressnette_cs:name: Nette Coding Standardruns-on: ubuntu-lateststeps:- uses: actions/checkout@v2- uses: shivammathur/setup-php@v2with:php-version: 8.0coverage: none- run: composer create-project nette/coding-standard temp/coding-standard ^3 --no-progress --ignore-platform-reqs- run: php temp/coding-standard/ecs check src
Denne konfigurationsfil installerer den nyeste Ubuntu (runs-on: ubuntu-latest
), kloner projektets arkiv (uses: actions/checkout@v2
), installerer PHP (uses: shivammathur/setup-php@v2
) version 7.4 (php-version: 7.4
), installerer code-checker-pakken og kører derefter jobbet via PHP.
Et par yderligere bemærkninger til brugere, der ikke er så erfarne:
0
(nul), betyder det, at det er en succes, og ethvert andet tal betyder en fejl. For eksempel fungerer shell-scripts på samme mådephp file.php
), som kører og kan gøre alt, hvad den har rettigheder til (arbejde med filer, kommunikere over internettet, output til skærmen, ...)composer.json
i filen require-dev
, så de ikke bliver installeret i et specifikt projekt som en obligatorisk afhængighedI modsætning til andre værter for arkiver understøtter GitHub såkaldte GitHub Apps og automatiseringsrobotter. Dette er en stor database med færdige bots, der kan udføre automatiserede operationer på dine projekter (selv uden CI), og når de støder på noget, vil de f.eks. indsende et problem eller sende en pull request med en rettelse.
Jeg bruger den personligt og anbefaler den til dig:
Du kan finde mange andre programmer på [Markedspladsen] (https://github.com/marketplace?type=apps).
Jeg er blevet meget glad for at bruge automatiseringsopgaver i GitHub.
Jeg har oprettet automatiske kontroller i alle mine repositories, så når jeg (eller andre i fællesskabet) indsender et commit, får jeg feedback i realtid om, hvorvidt kodekvaliteten (codestyle og PhpStan), sikkerheden og meget mere er blevet overtrådt.
Jeg har nogle tests, der kører automatisk hver time. Hvis der f.eks. er en sikkerhedssårbarhed eller en CVE, ved jeg det senest om en time, selv på niveauet for specifikke projekter, og hvad der præcist er sket.
Efter at have testet forskellige konfigurationer er jeg med tiden kommet frem til den konklusion, at jeg anser følgende afhængigheder til Composer for at være den ideelle minimumskonfiguration:
phpstan/phpstan
- kontrol af koden for korrekthed og logiktracy/tracy
- fejlrapportering og logning på højt niveauphpstan/phpstan-nette
- Udvidelser og specialiteter til Phpstan i Nettespaze/phpstan-disallowed-calls
- et genialt bibliotek af Michal Spacek, der håndterer (u)brug af farlige ting i kode (fra glemte variabel-dumps til evnen til at køre en brugerstreng som en shell-kommando)roave/security-advisories
- kontrollerer installation af usikre versioner af pakker (hvis der findes en sikkerhedssårbarhed i en bestemt pakke eller hvis der udgives en CVE, vil denne pakke forhindre installation af den beskadigede version)Ideelt set bør du have den grundlæggende sikkerhedsopsætning indstillet til automatisk at køre mindst hver 8. time og få fejl sendt til din e-mail. For når en projektinstallation fejler eller en ny sårbarhed bliver opdaget, vil jeg gerne vide det så hurtigt som muligt og reagere med det samme.
Husk, at alt fungerer automatisk, så du kan altid være sikker på, at selv om du bruger komplicerede processer til at kontrollere sikkerhed og andre ting, koster det dig ikke ekstra kræfter, og du skal blot have en veludført startkonfiguration.
For der er et enormt potentiale i forebyggelse og automatisering!
Jan Barášek Více o autorovi
Autor článku pracuje jako seniorní vývojář a software architekt v Praze. Navrhuje a spravuje velké webové aplikace, které znáte a používáte. Od roku 2009 nabral bohaté zkušenosti, které tímto webem předává dál.
Rád vám pomůžu:
Články píše Jan Barášek © 2009-2024 | Kontakt | Mapa webu
Status | Aktualizováno: ... | da