Azonao atao izao ny manangana sary Docker amin'ny werf mampiasa Dockerfile mahazatra

Aleo tara toy izay tsy misy. Na ny fomba saika nanao fahadisoana lehibe noho ny tsy fisian'ny fanohanana ny Dockerfiles mahazatra amin'ny fananganana sary fampiharana.

Azonao atao izao ny manangana sary Docker amin'ny werf mampiasa Dockerfile mahazatra

Hiresaka momba izany isika werf - Fampiasa GitOps izay mitambatra amin'ny rafitra CI/CD rehetra ary manome ny fitantanana ny tsingerin'ny fiainana manontolo, mamela:

  • manangona sy mamoaka sary,
  • mametraka fampiharana ao amin'ny Kubernetes,
  • mamafa sary tsy ampiasaina mampiasa politika manokana.


Ny filΓ΄zΓ΄fian'ny tetikasa dia ny fanangonana fitaovana ambany ho an'ny rafitra tokana iray izay manome ny injeniera DevOps mifehy ny fampiharana. Raha azo atao dia tokony hampiasaina ny fitaovana efa misy (toa an'i Helm sy Docker). Raha tsy misy vahaolana amin'ny olana dia afaka mamorona sy manohana izay rehetra ilaina amin'izany isika.

Background: mpanangona sary anao manokana

Izany no nitranga tamin'ny mpanangona sary tao amin'ny werf: tsy ampy ho anay ny Dockerfile mahazatra. Raha mijery haingana ny tantaran'ny tetikasa ianao, ity olana ity dia efa niseho tamin'ny dikan-teny voalohany amin'ny werf (avy eo dia mbola fantatra amin'ny anarana hoe dapp).

Raha namorona fitaovana hananganana rindranasa amin'ny sary Docker izahay dia tonga saina haingana fa tsy mety aminay ny Dockerfile amin'ny asa manokana sasany:

  1. Ilaina ny manangana rindranasa an-tranonkala kely mahazatra araka ity rafitra manaraka ity:
    • mametraka ny fiankinan'ny rindranasa manerana ny rafitra,
    • mametraka andiana tranomboky miankina amin'ny fampiharana,
    • manangona fananana,
    • ary ny tena zava-dehibe dia manavao haingana sy mahomby ny kaody amin'ny sary.
  2. Rehefa misy fanovana natao amin'ny rakitra tetikasa dia tsy maintsy mamorona sosona vaovao haingana ny mpanamboatra amin'ny alΓ lan'ny fametrahana patch amin'ireo rakitra niova.
  3. Raha niova ny rakitra sasany, dia ilaina ny manangana indray ny dingana miankina amin'izany.

Amin'izao fotoana izao, ny mpanangona anay dia manana fahafahana maro hafa, saingy ireo no faniriana sy famporisihana voalohany.

Amin'ny ankapobeny, tsy nieritreritra indroa izahay, dia nitam-piadiana tamin'ny fiteny fandaharana nampiasainay (Zahao etsy ambany) ary tonga amin'ny fampiharana DSL manokana! Mifanaraka amin'ny tanjona, natao hamaritana tsikelikely ny fizotran'ny fivoriambe sy hamaritana ny fiankinan'ireo dingana ireo amin'ny rakitra. Ary nameno izany mpanangona manokana, izay nanova ny DSL ho tanjona farany - sary tafavory. Tamin'ny voalohany dia tao Ruby ny DSL, fa toy ny tetezamita mankany Golang - ny config an'ny mpanangona anay dia nanomboka nofaritana tao anaty rakitra YAML.

Azonao atao izao ny manangana sary Docker amin'ny werf mampiasa Dockerfile mahazatra
Config taloha ho an'ny dapp ao amin'ny Ruby

Azonao atao izao ny manangana sary Docker amin'ny werf mampiasa Dockerfile mahazatra
Config ankehitriny ho an'ny werf amin'ny YAML

Niova ihany koa ny fomba fiasan'ny mpanangona rehefa nandeha ny fotoana. Tamin'ny voalohany, namorona Dockerfile vonjimaika fotsiny izahay tamin'ny sidina avy amin'ny konfigurasinay, ary avy eo dia nanomboka nandefa torolΓ lana momba ny fivoriambe tao anaty fitoeran-javatra vonjimaika izahay ary nanao.

NB: Amin'izao fotoana izao, ny mpanangona anay, izay miasa miaraka amin'ny config azy manokana (ao amin'ny YAML) ary antsoina hoe mpanangom-bokatra Stapel, dia efa nivoatra ho fitaovana mahery vaika. Ny famaritana amin'ny antsipiriany dia mendrika ny lahatsoratra misaraka, ary ny antsipiriany fototra dia azo jerena ao tahirin-kevitra.

Fahatsiarovana ny olana

Tsapanay anefa fa tsy teo no ho eo, fa nanao fahadisoana iray izahay: tsy nampiana ny fahaiza-manao manangana sary amin'ny alΓ lan'ny Dockerfile mahazatra ary ampidiro ao anatin'ny fotodrafitrasa fitantanana fampiharana amin'ny farany (izany hoe manangona sary, manaparitaka ary manadio azy ireo). Ahoana no ahafahana manao fitaovana amin'ny fametrahana ao amin'ny Kubernetes fa tsy mampihatra ny fanohanana Dockerfile, i.e. fomba mahazatra hamaritana sary ho an'ny ankamaroan'ny tetikasa?..

Raha tokony hamaly an'io fanontaniana io izahay dia manolotra vahaolana. Ahoana raha efa manana Dockerfile (na andiana Dockerfiles) ianao ary te hampiasa werf?

NB: Raha ny marina, nahoana ianao no te hampiasa werf? Ny endri-javatra lehibe dia midina amin'ireto manaraka ireto:

  • tsingerin'ny fitantanana fampiharana feno ao anatin'izany ny fanadiovana sary;
  • ny fahafahana mitantana ny fanangonana sary maromaro indray mandeha avy amin'ny config tokana;
  • Nohatsaraina ny fizotry ny fametrahana ho an'ny tabilao mifanaraka amin'ny Helm.

Ny lisitra feno kokoa amin'izy ireo dia azo jerena ao amin'ny pejy tetikasa.

Noho izany, raha teo aloha izahay dia nanolotra ny hanoratra ny Dockerfile ao amin'ny config, izao dia ho faly izahay hoe: "Avelao werf hanorina ny Dockerfiles!"

Ahoana ny fampiasana azy?

Ny fampiharana feno an'io endri-javatra io dia niseho tao amin'ny famoahana werf v1.0.3-beta.1. Ny fitsipika ankapobeny dia tsotra: ny mpampiasa dia mamaritra ny lalana mankany amin'ny Dockerfile efa misy ao amin'ny werf config, ary avy eo dia mitantana ny baiko. werf build... ary izany - werf no hanangona ny sary. Andeha hojerentsika ny ohatra iray tsy misy dikany.

Aleo ambara ny manaraka Dockerfile ao amin'ny fototry ny tetikasa:

FROM ubuntu:18.04
RUN echo Building ...

Ary hambarantsika werf.yamlizay mampiasa izany Dockerfile:

configVersion: 1
project: dockerfile-example
---
image: ~
dockerfile: ./Dockerfile

Rehetra! ANKA Run werf build:

Azonao atao izao ny manangana sary Docker amin'ny werf mampiasa Dockerfile mahazatra

Ankoatra izany, azonao atao ny manambara ireto manaraka ireto werf.yaml hanangana sary maromaro avy amin'ny Dockerfiles samy hafa indray mandeha:

configVersion: 1
project: dockerfile-example
---
image: backend
dockerfile: ./dockerfiles/Dockerfile-backend
---
image: frontend
dockerfile: ./dockerfiles/Dockerfile-frontend

Farany, manohana ihany koa ny fandefasana paramètre fananganana fanampiny, toy ny --build-arg и --add-host - amin'ny alàlan'ny werf config. Misy famaritana feno momba ny fanitsiana sary Dockerfile pejy fampahafantarana.

Ahoana no miasa?

Mandritra ny fizotran'ny fananganana dia miasa ny cache mahazatra an'ny sosona eo an-toerana ao amin'ny Docker. Na izany aza, ny zava-dehibe dia ny werf koa mampiditra ny configuration Dockerfile amin'ny fotodrafitrasany. Inona no dikan'ity?

  1. Ny sary tsirairay natsangana avy amin'ny Dockerfile dia misy dingana iray antsoina dockerfile (azonao atao ny mamaky bebe kokoa momba ny dingana ao amin'ny werf eto).
  2. Ho an'ny sehatra dockerfile werf dia manisa sonia izay miankina amin'ny votoatin'ny config Dockerfile. Rehefa miova ny configuration Dockerfile dia miova ny sonia an-tsehatra dockerfile ary ny werf dia manomboka fananganana indray ity dingana ity miaraka amin'ny config Dockerfile vaovao. Raha tsy miova ny sonia, dia alain'i werf ao amin'ny cache ny sary (Ny antsipiriany bebe kokoa momba ny fampiasana sonia amin'ny werf dia nofaritana tao ity tatitra ity).
  3. Avy eo dia azo avoaka miaraka amin'ny baiko ireo sary voaangona werf publish (na werf build-and-publish) ary ampiasao izany amin'ny fametrahana amin'ny Kubernetes. Ny sary navoaka tao amin'ny Docker Registry dia hodiovina amin'ny fampiasana fitaovana fanadiovana werf mahazatra, i.e. Hodiovina ho azy ireo sary tranainy (efa antitra N andro), sary mifandray amin'ny sampana Git tsy misy, ary politika hafa.

Ny antsipiriany bebe kokoa momba ireo teboka voalaza eto dia azo jerena ao amin'ny antontan-taratasy:

Fanamarihana sy fitandremana

1. Ny URL ivelany dia tsy tohanana amin'ny ADD

Amin'izao fotoana izao dia tsy azo ampiasaina ny fampiasana URL ivelany amin'ny torolΓ lana ADD. Werf dia tsy hanomboka fananganana indray rehefa miova ny loharano ao amin'ny URL voatondro. Mikasa ny hanampy ity endri-javatra ity tsy ho ela izahay.

2. Tsy afaka manampy .git amin'ny sary ianao

Amin'ny ankapobeny, manampy lahatahiry .git amin'ny sary - fanao ratsy masiaka ary izao no antony:

  1. raha .git mijanona amin'ny sary farany, mandika ny fitsipika izany 12 factor app: Satria tsy maintsy ampifandraisina amin'ny commit tokana ny sary farany, dia tsy azo atao izany git checkout manao arbitrary.
  2. .git mampitombo ny haben'ny sary (mety ho lehibe ny tahiry noho ny fisian'ny rakitra lehibe nampidirina tao ary nofafana avy eo). Tsy hiankina amin'ny tantaran'ny asa ao amin'ny Git ny haben'ny hazo iray mifandray amin'ny fanoloran-tena manokana. Amin'ity tranga ity, ny fanampiny sy ny fanesorana manaraka .git avy amin'ny sary farany dia tsy mandeha: mbola hahazo sosona fanampiny ny sary - izany no fomba fiasan'i Docker.
  3. Docker dia afaka manangana fanamboarana tsy ilaina, na dia eo aza ny fanoloran-tena mitovy, fa avy amin'ny hazo fiasana samihafa. Ohatra, ny GitLab dia mamorona lahatahiry cloned misaraka /home/gitlab-runner/builds/HASH/[0-N]/yourproject rehefa mandeha ny fivoriambe parallèle. Ny reassembly fanampiny dia ho noho ny zava-misy fa ny lahatahiry .git dia tsy mitovy amin'ny dikan-teny klônina samihafa amin'ny tahiry mitovy, na dia mitovy aza ny commit natsangana.

Misy vokany koa ny teboka farany rehefa mampiasa werf. Werf dia mitaky ny cache naorina mba ho eo rehefa manatanteraka baiko sasany (oh. werf deploy). Rehefa mandeha ireo baiko ireo dia kajy ny sonia an-tsehatra ho an'ny sary voatondro ao amin'ny werf werf.yaml, ary tsy maintsy ao amin'ny cache fivoriambe izy ireo - raha tsy izany dia tsy afaka manohy miasa ny baiko. Raha miankina amin'ny votoatiny ny sonia an-tsehatra .git, dia mahazo cache izay tsy miorina amin'ny fanovana amin'ny rakitra tsy misy ifandraisany isika, ary tsy ho afaka hamela heloka toy izany ny werf (raha mila fanazavana fanampiny, jereo tahirin-kevitra).

ankapobeny manampy rakitra ilaina ihany amin'ny alalan'ny toromarika ADD Na ahoana na ahoana, dia mampitombo ny fahombiazana sy ny fahatokisana ny soratra Dockerfile, ary manatsara ihany koa ny fahamarinan'ny cache nangonina ho an'izany Dockerfile, amin'ny fanovana tsy misy ifandraisany amin'ny Git.

Ny vokany

Ny lalanay voalohany hanoratana ny mpanamboatra anay manokana ho an'ny filana manokana dia sarotra, mahitsy ary mahitsy: fa tsy mampiasa tehina eo an-tampon'ny Dockerfile mahazatra, dia nanoratra ny vahaolanay tamin'ny syntax mahazatra izahay. Ary nanana tombony izany: ny mpanangona Stapel dia miatrika tsara ny asany.

Na izany aza, teo am-panoratana ny mpanamboatra anay manokana dia tsy hitanay ny fanohanana ireo Dockerfiles efa misy. Ity lesoka ity dia efa raikitra izao, ary amin'ny ho avy dia mikasa ny hamolavola fanohanana Dockerfile miaraka amin'ny mpanamboatra Stapel mahazatra ho an'ny fivoriambe mizara sy ny fivoriambe mampiasa Kubernetes (izany hoe fivoriambe amin'ny mpihazakazaka ao anatin'ny Kubernetes, toy ny atao amin'ny kaniko).

Noho izany, raha toa ka misy Dockerfiles roa mandry tampoka ianao ... manandrana werf!

PS Lisitry ny antontan-taratasy momba ny lohahevitra

Vakio ihany koa ao amin'ny bilaoginay: β€œwerf - fitaovanay ho an'ny CI / CD ao amin'ny Kubernetes (fomba fijery sy tatitra an-tsary)".

Source: www.habr.com

Add a comment