Sådan konfigureres kontinuerlig implementering i dit hjemmeprojekt på den lette måde

Foto af Sarah Phillips

Kontinuerlig implementering er en smuk ting. At forpligte dit projekt og se det blive bygget og implementeret uden at skulle gøre noget er betagende.

Og i denne artikel vil jeg gerne vise dig, hvordan du får det til i dit hjemmeprojekt med lethed.

For at rydde op her er et flowdiagram, der viser forskellene mellem Kontinuerlig levering og Kontinuerlig implementering.

Kontinuerlig levering kontra kontinuerlig implementering

Da det meste af tiden ingen andre men du er afhængige af dit hjemmeprojekt, går vi på en arbejdsgang med kontinuerlig implementering, da du vil se dine ændringer straks implementeret. Hvis det ikke er tilfældet, kan du ændre arbejdsgangen senere.

Du lærer om følgende:

  • Hvordan man laver en Dockerfile
  • Sådan skubbes dit projekt til GitHub
  • Bygning af docker-billedet automatisk på Docker Hub
  • Download og kør billedet automatisk med Watchtower

Forudsætninger:

  • Noget viden om Docker og Dockerfile, selvom jeg vil forklare noget af det undervejs
  • Har git installeret
  • En Docker Hub-konto
  • En (Linux) server (enten fysisk eller virtuel), der kører Docker

Som reference er dette eksemplet GitHub-lager, og dette er eksemplet på docker-hub-depot, som jeg vil bruge.

Således vil denne tutorial kun være nyttig, hvis du har til hensigt at køre din software med Docker (hvilket jeg anbefaler, da Docker er fantastisk).

Hvorfor bruge Docker?

Docker giver dig mulighed for at have det samme miljø til udvikling og produktion, der eliminerer Heisenbugs og problemet "det fungerer på min maskine". Containere er også isoleret, hvilket giver os sikkerhedsfordele.
Der er mere ved det, men disse to fordele gør, at jeg altid leverer min software i Docker-containere.

Opsætning af din Dockerfile

Først laver vi en Dockerfile til projektet. Denne specielle fil kaldes altid "Dockerfile" uden en udvidelse og sidder i det øverste bibliotek på dit projekt.

En Dockerfile starter med FROM-sætningen, der fortæller Docker, hvilket basisbillede du vil starte med. Du kan forestille dig dette som at bruge et lærred, hvor baggrunden allerede er tegnet, og kun den centrale del (dit program) mangler.
Det meste af tiden er det billede, du vil trække, basebilledet på dit programmeringssprog, som du kan finde på det tidligere nævnte Docker Hub.

Dernæst kopierer vi vores projektfiler til dockercontaineren med kommandoen COPY ... Hvad gør dette?

Det tager filerne fra det første bibliotek (prikken henviser til den aktuelle mappe for filen, som inkluderer alle dine projektfiler) og sætter dem i det aktuelle bibliotek i din Docker-container (husk, at din docker-container er sit eget operativsystem). Dine filer er nu i det basismapper der, som du muligvis vil ændre.

Dernæst skal vi installere afhængigheder, som jeg vil bruge python pip til, men ethvert ækvivalent pakkehåndteringssystem afhængigt af dit sprog du vælger, gør det. Den kritiske ting at lære her er, hvordan man udfører kommandoer i containeren med RUN.

Fra python: 3.7
KOPI . .
RUN pip installation -r krav.txt

Let, er det ikke? Nu skal vi starte vores program i containeren.

CMD ["python", "./my_script.py"]

CMD-erklæringen er unik. Hver Dockerfile skal have den som sin sidste linje, fordi den starter den primære proces i beholderen.

Du er færdig med din Dockerfile! Du kan nu manuelt bygge dit billede og beholder, men det vil vi springe over i øjeblikket.

Nu opretter vi vores depot på GitHub, men husk at forlade "Initialiser dette depot med en README" ikke markeret.

Derefter skal du kopiere den eksterne URL.

Åbn en cmd / shell i rodkataloget til dit projekt.

Du skal initialisere dit git-arkiv, tilføje dine filer, konfigurere fjernbetjeningen, udføre filerne og skubbe dit projekt til GitHub.

git init
git add *
git remote tilføje oprindelse https://github.com//.git
git commit -a -m "Gør Dockerfile klar til CD"
git push -u oprindelsesmester

Nu skal dit GitHub-arkiv se sådan ud:

Tillykke, du er halvvejs færdig!

Det næste trin er at forbinde GitHub til Docker Hub. For dette går du til kontoindstillingerne.

Rul ned og tilslut din git vært.

Opret dit lager på docker-hub nu.

Giv repoen et navn, og klik på GitHub-ikonet (eller Bitbucket, hvis det er din ting). Vælg nu din organisation (normalt dit brugernavn) og dit projekt navn. Hvis du vil bruge dit hovedbillede til build og altid skubbe til det nyeste, kan du nu klikke på "Opret & byg" og se, at dit billede bliver bygget til dig. Ellers skal du redigere buildindstillingerne.

Sidste trin! Nu har du brug for Watchtower på din målmaskine.
Watchtower er et program, der trækker dine kørende docker-billeder og tjekker for opdateringer. Hvis der er opdateringer, lukker den yndefuldt den originale container og opretter en container fra det nye billede med de samme indstillinger.

Det bedste er, at vi også kan installere Watchtower med Docker!

Indtast følgende i din terminal:

docker run -d - navn Watchtower -v /var/run/docker.sock:/var/run/docker.sock containrrr / Watchtower

Derefter skal du køre Docker-containeren til dit projekt!

docker run -d - navn   / 

Indstillingen "-d" får dit program til at køre i baggrunden, så programmet lukker ikke ned, hvis du lukker terminalen.

Så for at opsummere, hvis du skubber en forpligtelse til dit GitHub-lager, bygger Docker-hub automatisk et Docker-billede til dig. Dette billede trækkes derefter af WatchTower og køres med alle originale indstillinger.

Hvis du på noget tidspunkt har brug for hjælp, skal du ikke være bange for at spørge, er jeg glad for at hjælpe.
Hvis det er et teknisk problem, ville et problem med GitHub-projektet være fantastisk!

Men hvad med test?

Godt spørgsmål!
Du kan bruge Travis CI til at køre dine test på samme tid.
Du kan læse om dette her, men vigtigheden heraf er, at du tilføjer en anden fil til dit depot, som har instruktioner til en ekstern server til at udføre enhedstest eller andre instruktioner.

Men hvad nu hvis jeg kun ønsker, at mit dockerbillede skal bygge, hvis testene består?

Dette bryder vores arbejdsgang lidt.
Vi kan nu ikke stole på docker-hub for at opbygge vores billeder længere. I stedet vil det også være Travis CI, der producerer billedet og derefter skubber det til dit Docker Hub-arkiv. Læs om dette her.