Programim dhe zhvillim, javascript, python, php, html

vlera të shumëfishta të ndryshueshme specifike të synimeve

Duke ndjekur dokumentin për të menaxhuar vlerat e variablave specifike të synimeve

prog : CFLAGS = -g
prog : prog.o foo.o bar.o

Mund të vendos një ndryshore specifike për objektivin.

Tani pyetja ime është, si të vendosim variabla të shumëfishta specifike për objektivat. A duhet t'i vendos ato një nga një?

dev_deploy: env = dev
dev_deploy: image = abc
dev_deploy: tag = 1.0.4-dev
dev_deploy:
      docker run -t --rm -e env=$(env) \
         $(image):$(tag) \
         sh -c "test.sh"


prod_deploy: env = prod
prod_deploy: image = abc
prod_deploy: tag = 1.0.3-prod
prod_deploy:
      docker run -t --rm -e env=$(env) \
         $(image):$(tag) \
         sh -c "test.sh"

A ka ndonjë mënyrë për të vendosur mjediset lokale (ndryshoret specifike të synimeve) me një mënyrë të thjeshtë?

14.05.2018

Përgjigjet:


1

Përgjigja e drejtpërdrejtë për pyetjen tuaj të parë është po, ju duhet të përdorni një linjë të veçantë të synuar për çdo ndryshore specifike të objektivit dhe t'i vendosni ato një nga një.

Përgjigja për pyetjen tuaj të dytë është po: njëra është përshkruar nga uzsolt. Kjo do të ishte metoda ime e rekomanduar gjithashtu. Një ndryshim midis zgjidhjes së uzsolt dhe zgjidhjes së variablit specifik për objektivin është se variablat specifike të objektivit janë trashëguar nga parakushtet. Ju nuk duket se keni nevojë për atë sjellje këtu, por nëse do ta kishit, atëherë kjo zgjidhje nuk do të funksiononte për ju.

Nëse keni nevojë për variabla specifike për objektivin ose nëse një rresht për caktimin e ndryshoreve është ende shumë i dhimbshëm (për shembull, keni një numër shumë të madh të tyre dhe vërtet dëshironi të keni një rresht për grup), mund të ketë opsione që janë më të ndërlikuara për t'u kuptuar por më e thjeshtë për t'u përdorur më vonë.

Për shembull, nëse e dini se asnjë nga vlerat e ndryshores suaj nuk do të përmbajë hapësirë ​​të bardhë, atëherë mund të krijoni një makro të përcaktuar nga përdoruesi që përdor eval për të vendosur variabla specifike të synuara, si kjo:

assign-vars = $(foreach A,$2,$(eval $1: $A))

$(call assign-vars, dev_deploy,   env=devenv  image=abc  tag=1.0.4-dev)
$(call assign-vars, prod_deploy,  env=prod    image=abc  tag=1.0.3-prod)

Shënim: argumenti i parë është objektivi, çdo detyrë duhet të jetë një "fjalë" e vetme (pa hapësirë ​​të ngulitur) dhe nuk ka presje midis detyrave.

15.05.2018
  • A mund të ndihmoni se si assign-vars mund të modifikohet për të pranuar ndonjë numër objektivash? si $(call assign-vars, dev_deploy, prod_deploy, env=devenv image=abc tag=1.0.4-dev) 29.05.2020
  • Tashmë funksionon me objektiva të shumtë, por ju duhet të jepni një listë objektivash të ndarë me hapësirë, jo një listë objektivash të ndarë me presje. Si $(call assign-vars, dev_deploy prod_deploy, env=devenv image=abc tag=1.0.4-dev) 29.05.2020

  • 2

    Unë do ta bëja:

    dev_deploy_env= devenv
    dev_deploy_image=   abc
    dev_deploy_tag= 1.0.4-dev
    
    prod_deploy_env=    prod
    prod_deploy_image=  abc
    prod_deploy_tag=    1.0.3-prod
    
    dev_deploy prod_deploy:
        @echo docker run -t --rm -e env=${${@}_env} \
          ${${@}_image}:${${@}_tag} \
          sh -c "test.sh"
    
    .PHONY: dev_deploy prod_deploy
    

    Shihni komandat (Unë jam duke përdorur FreeBSD dhe në të komanda GNU make është gmake):

    $  gmake prod_deploy 
    docker run -t --rm -e env=prod abc:1.0.3-prod sh -c test.sh
    $  gmake dev_deploy       
    docker run -t --rm -e env=devenv abc:1.0.4-dev sh -c test.sh
    

    Sigurisht që duhet të hiqni @echo për të ekzekutuar komandat.

    14.05.2018
  • duket shume i zoti, do ta provoj 14.05.2018
  • problemi, ka disa mjedise globale që do të përdoren gjithashtu nga komanda docker, të cilat jo gjithmonë përdoren si ${${@}_image}, për shembull. 14.05.2018
  • Në këtë rast mund të përdorni ${or ${${@}_image},default_image}. 14.05.2018
  • Faleminderit shumë, kjo ka kuptim. 14.05.2018
  • Materiale të reja

    Masterclass Coroutines: Kapitulli-3: Anulimi i korutinave dhe trajtimi i përjashtimeve.
    Mirë se vini në udhëzuesin gjithëpërfshirës mbi Kotlin Coroutines! Në këtë seri artikujsh, unë do t'ju çoj në një udhëtim magjepsës, duke filluar nga bazat dhe gradualisht duke u thelluar në..

    Faketojeni derisa ta arrini me të dhënat false
    A e gjeni ndonjëherë veten duke ndërtuar një aplikacion të ri dhe keni nevojë për të dhëna testimi që duken dhe duken më realiste ose një grup i madh të dhënash për performancën e ngarkesës...

    Si të përdorni kërkesën API në Python
    Kërkesë API në GitHub për të marrë depot e përdoruesve duke përdorur Python. Në këtë artikull, unë shpjegoj procesin hap pas hapi për të trajtuar një kërkesë API për të marrë të dhëna nga..

    Një udhëzues hap pas hapi për të zotëruar React
    Në këtë artikull, do të mësoni se si të krijoni aplikacionin React, do të mësoni se si funksionon React dhe konceptet thelbësore që duhet të dini për të ndërtuar aplikacione React. Learning..

    AI dhe Psikologjia — Pjesa 2
    Në pjesën 2 të serisë sonë të AI dhe Psikologji ne diskutojmë se si makineritë mbledhin dhe përpunojnë të dhëna për të mësuar emocione dhe ndjenja të ndryshme në mendjen e njeriut, duke ndihmuar..

    Esencialet e punës ditore të kodit tim VS
    Shtesat e mia të preferuara - Git Graph 💹 Kjo shtesë është vërtet e mahnitshme, e përdor përpara se të filloj të punoj për të kontrolluar dy herë ndryshimet dhe degët më të fundit, mund të..

    Pse Python? Zbulimi i fuqisë së gjithanshme të një gjiganti programues
    Në peizazhin gjithnjë në zhvillim të gjuhëve të programimit, Python është shfaqur si një forcë dominuese. Rritja e tij meteorike nuk është rastësi. Joshja e Python qëndron në thjeshtësinë,..