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

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

Og i denne artikel vil jeg vise dig, hvordan du nemt får det gjort i dit hjemmeprojekt.

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

Da det meste af tiden ingen, bortset fra dig, afhænger af dit hjemmeprojekt, går vi efter en workflow med kontinuerlig implementering, da du vil se dine ændringer straks implementeres. Hvis det ikke er tilfældet, kan du ændre arbejdsgangen senere.

Du lærer om følgende:

  • Sådan oprettes en Dockerfil
  • Sådan skubber du dit projekt til GitHub
  • Opbygning af dockerbilledet automatisk på Docker Hub
  • Automatisk download og kørsel af billedet med Watchtower

Forudsætninger:

  • Noget viden om Docker og Dockerfilen, 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

Til reference er dette eksemplet med GitHub-lageret, og dette er det eksempel på docker-hub-lager, som jeg bruger.

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

Hvorfor bruge Docker?

Docker giver dig mulighed for at have det samme miljø til udvikling og produktion, som eliminerer Heisenbugs og problemet "det virker på min maskine". Containere er også isoleret, hvilket giver os sikkerhedsfordele.

Der er mere ved det, men disse to fordele får mig til altid at levere min software i Docker-containere.

Opsætning af din Dockerfile

Først laver vi en Dockerfil til projektet. Denne specielle fil kaldes altid “Dockerfile” uden en udvidelse og sidder øverst i dit projekt.

En Dockerfil starter med FROMudsagnet, der fortæller Docker, hvilket basisbillede du vil starte med. Du kan forestille dig dette som at bruge et lærred med baggrunden allerede tegnet og kun den centrale del (dit program) mangler.

Det meste af tiden er det billede, du vil trække, basisbilledet af dit programmeringssprog, som du kan finde i det tidligere nævnte Docker Hub.

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

Det tager filerne fra den første mappe (prikken henviser til den aktuelle mappe i filen, som inkluderer alle dine projektfiler) og placerer den i den aktuelle mappe i din Docker-container (husk at din docker-container er sit eget OS). Dine filer er nu i basismappen der, som du måske vil ændre.

Dernæst skal vi installere afhængigheder, som jeg vil bruge python piptil, men ethvert tilsvarende pakkehåndteringssystem afhængigt af dit valgte sprog vil gøre. Den kritiske ting at lære her er, hvordan man udfører kommandoer i containeren med RUN.

From python:3.7COPY . .RUN pip install -r requirements.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 containeren.

Du er færdig med din Dockerfil! Du kan nu manuelt oprette dit billede og din container, men det springer vi igennem for nu.

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

Derefter skal du kopiere den eksterne URL.

Åbn en cmd / shell i rodmappen på dit projekt.

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

git initgit add *git remote add origin //github.com//.gitgit commit -a -m "Make Dockerfile ready for CD"git push -u origin master

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 skal du gå 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 dine ting). Vælg nu din organisation (normalt dit brugernavn) og dit projekts navn. Hvis du vil bruge dit hovedbillede til buildet og altid skubbe til det nyeste, kan du nu klikke på "Create & Build" og se dit billede blive bygget til dig. Ellers skal du redigere byggeindstillingerne.

Sidste trin! Nu har du brug for Vagttårn på din målmaskine.

Watchtower er et program, der trækker dine kørende dockerbilleder og kontrollerer for opdateringer. Hvis der er opdateringer, lukker den elegant den originale container ned 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 --name watchtower -v /var/run/docker.sock:/var/run/docker.sock v2tec/watchtower

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

docker run -d --name  /

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, vil Docker-hub automatisk opbygge et Docker-billede til dig. Dette billede bliver derefter trukket af WatchTower og køres med alle originale muligheder.

Hvis du har brug for hjælp på noget tidspunkt, skal du ikke være bange for at spørge, jeg er glad for at hjælpe.

Hvis det er et teknisk problem, ville et problem med GitHub-projektet være fantastisk!

Men hvad med tests?

Godt spørgsmål!

Du kan bruge Travis CI til at køre dine tests på samme tid.

Du kan læse om dette her, men kernen i det er, at du tilføjer en anden fil til dit arkiv, der har instruktioner til en ekstern server til at udføre enhedstest eller andre instruktioner.

Men hvad hvis jeg kun vil have, at mit dockerbillede skal opbygges, hvis testene består?

Dette bryder vores arbejdsgang lidt.

Vi kan nu ikke stole på docker-hub til at opbygge vores billeder længere. I stedet bliver det også Travis CI, der producerer billedet og derefter skubber det til dit Docker Hub-lager. Læs om dette her.