• úvod
  • témata
  • události
  • tržiště
  • diskuze
  • nástěnka
  • přihlásit
    registrace
    ztracené heslo?
    SPACEANGELContinuous integration, App Deployment
    Pouzite metodiky, nastroje, CI servery, na kolik CI pouzivate, nakolik byste ji chteli pouzivat, proc ji pouzivate, ci naopak - proc ji nechcete pouzit...
    rozbalit záhlaví
    MARTEN
    MARTEN --- ---
    MLEKAR_STEIN: Jo, dela bordel ze vse je vuci workspace a ne adresari. Vyreseno ze si nastavim adresar a pak pouzivam promennou. Bouhuzel pouziti dir() ne na vsechno stacilo (hlavne pri pouziti withDockerContainer to zapomnel).
    Pak jsem krasne narazil na to, ze muzu spustit jen jednu pipeline, takze vse prepisuju na scripted pipeline, ktera doufam tohle omezeni nema.
    MLEKAR_STEIN
    MLEKAR_STEIN --- ---
    MARTEN: hele, me prijde ze se tam mota workspace, kterej je pro jenkins jeden a workingdir, kterej se da menit pomocí dir()
    asi bych si cesty k jenkinsfiles dal do listu a pak to iteroval, ze bych odrizl jmeno jenkinsfile, coz by mi dalo cestu, a pripadne k tomu priplacl ten workspace, nebo vychozi workdir, podle toho, jestli je to jen v tom jednomworkdir, nebo to hledam v celym workspace
    VELDRANE
    VELDRANE --- ---
    JON: mno ja sem pro nektere jiz vybuildene veci pouzival nexus, ale nevim jestli je to v tomhle pripade to prave orechove
    MARTEN
    MARTEN --- ---
    Mel bych otazku na jenkinse, doufam ze nekdo bude vedet.
    Mam sve shared library, pres ktere jedu vsechny projekty. Ted mam jeden projekt co je monorepo. V rootu je jenkinsfile ktery najde vsechny Jenkinfile a podle zmenenych adresaru v PR urci co se ma spustit. V nem je vpodstate v iteraci load(file). Problem je ze ty soubory ktere loaduje, tak maji porad WORKSPACE ten hlavni, tedy i context pro vsechny commandy. Urcite by ho slo zmenit v kazdem Jenkinsfile, ale rad bych to nejak ridil z toho jednoho jedineho hlavniho souboru. Je neco co by s tim slo udelat bez zmeny jednotlivych souboru, pouze s tim jednim? Zkousel jsem obalit dir(file.getParent()) { load(file) } pripadne i withEnv(['WORKSPACE=...') {...., ale nic z toho nezabralo. Neresil to tu nahodou nekdo?
    JON
    JON --- ---
    Cus, neni tu moc zivo, presto se zeptam - nemate nekdo zkusenosti s buildovacima pipelinama kompilovanych jazyku (C, Rust)?
    Produktem maj byt jak kontejnery s binarkou, tak binarky samotne.
    Jde mi o hlavne o optimalizaci rychlosti buildu - reusability uz vybuildenych veci.
    V tuhle chvili vyuzivame sccache (ale nejsem si jistej jak dobre), cachovane layery v dockeru a rust chef.
    Napada vas co by este mohlo pomoct?
    URPUTNIK
    URPUTNIK --- ---
    URPUTNIK: tak neznate, vydaj to az v kvetnu :( nejaka podobna osvedcena alternativa?
    URPUTNIK
    URPUTNIK --- ---
    DWICH: jasny, tohle znam, aplikace tak vicemene jsou napsany ..

    pro mne aktualni orisek je, jak dynamicky vyrabet konfiguraci pro prostredi .. kazdopadne vedli jsme tu diskuzi s druhym vyvojarem a dospeli jsme k tomu, ze nechceme prejit hned/rovnou na ukladani secretu do vaultu .. prvni/mensi krok je vyrabet konfiguraci dynamicky, ale persistovat ji do docker image (uz to ze to bude docker image, je velka zmena) .. samozrejme ze vyhledove se dostaneme i k vaultu, ale asi ne hned/ted :) kazdopadne je urcite dobre delat to s predstavou toho, kam se clovek chce dostat a zohlednovat to, viz DWICH, takze diky :)
    DWICH
    DWICH --- ---
    Je to starý a i když s tím člověk nemusí souhlasit, stejně je praktický si to přečíst:
    The Twelve-Factor App
    https://12factor.net/
    Konkrétně:
    The Twelve-Factor App
    https://12factor.net/config
    DWICH
    DWICH --- ---
    URPUTNIK: Koukni se taky na to, jak konfiguraci v kube clusterech řeší ostatní, jaký na to jsou best practices a pak se jim zkus přiblížit. Bude to lepší, než kdybyses na to nepodíval a zkoušel to vymejšlet sám a třeba cestou právě antipatternů.

    Zrovna v kube je praktický ty konfigurace předávat např. jako env proměnný nebo je tam dotáhnout z nějakýho nástroje na správu secrets. A to právě proto, abys nemusel mountovat disky a na nich pár souborů s nastavením.

    Kdybys měl team rozdělenej na dvě části (může to bejt i ten stejnej člověk, ale má tím pádem zároveň dvě role), tak jeden z nich je vývojář, kterej udělá tu aplikaci a doručí docker image. Druhej z nich je provozák, co má pod palcem infrastrukturu, stará se o secrets, který k tý infrastruktuře patří, stará se o env nebo jiný konfig proměnný, co k tomu taky patří.

    Zkus se na to podívat z pohledu toho provozáka, jakej je nejlepší stav pro něj - mít secrets uložený v nástroji na to určenýmu a mít config taky uložený tak, jak je to správně (pro tu infrastrukturu). Pak vyvolej byť třeba fiktivní diskuzi na téma, jak to udělat, aby vývojář udělal aplikaci hostovatelnou na infrastruktuře, která má secrets a konfigy uložený podle best practices a ne podle toho, že to tak vývojář chtěl.
    URPUTNIK
    URPUTNIK --- ---
    ALMAD: super, to mne posunulo v tom, co mam googlit dal, diky :)

    pro mne je to mix secrets (pripojeni do databaze, ktera je pustena v jinem podu), nejaka url glue magie (ale podle tohodle a tohodle bude daleko mensi nez aktualni pro nedockerizovany a neclusterovany prostredi, protoze to pojede mimo frontendu po k8s dns) a runtime konfigurace (treba produktovy/business definice v xml, ktery se v runtime loaduji ..)
    ALMAD
    ALMAD --- ---
    URPUTNIK: To co chceš udělat (namountuj remote storage) mi přijde v K8S prostředí jako antipattern, proto se snažim dobrat coho co v tom je, abych ti dokázal říct, co s tim.

    Secrets? Pak by to chtělo odpovídající storage, třeba Vault.
    Nastavení závislostí / lokace / služeb? Použij service discovery, etcd nebo whatever.
    Nějaký url glue co to drží pohromadě? Pak to možná má být součást buildu co to zapeče do image.
    Něco jinýho? Třeba to má bejt separátní služba, normální databáze, runtime konfigurace a nebo pentagram na vyvolávání konzultantů.

    Bez toho abych věděl co rozumíš pod slovem konfigurace se to řiká špatně ;)
    URPUTNIK
    URPUTNIK --- ---
    MUXX: o k8s se u nas stara nekdo jiny, takze mozna mluvim trochu z cesty :)

    kazdopadne jsem tu diskuzi o deploymentu pochopil tak, ze v typicke konfiguraci se v clusteru pusti pod, ktery obsahuje jednu docker sluzbu ..
    ta docker sluzba ale potrebuje konfiguraci, v nasem pripade soubory, ktere se do toho docker image namountuji 'zvenci' .. protoze se budou poustet v clusteru, musi tam konfiguraci namountovat cluster
    pochopil jsem, ze v k8s se tomu rika volume (resp volumeClaim), coz je defakto odkaz na nejaky uloziste (typicky treba pro zapis dat, aby se nedrzely v docker kontejneru) .. ale stejne tak to muze byt read-only odkaz do fs, kde jsme chteli vystavit ty soubory s konfiguraci ..
    a protoze budeme chtit vyrabet tyhle konfigurace pro kazdou branch, vymyslime zpusob, jak nemuset neustale aplikovat novy .yaml file pro definici novych volume (s upravenyma konfiguracema pro danou branch) ..

    posledni napad je, ze se v k8s pusti nfs server, ktery je bude vracet (tzn jenom prebuildime ten image pro nfs server a k8s si ho aktualizuje na novejsi)
    MUXX
    MUXX --- ---
    URPUTNIK: Pises, ze “...Se to bude poustet...”. Ja myslim, ze prave ten “Se” by mohl tak nejak definovat kde to chce mit .)
    URPUTNIK
    URPUTNIK --- ---
    ALMAD: je to mix ruznych adresaru a souboru, podle sluzby, xml, php, properties, ..
    ALMAD
    ALMAD --- ---
    URPUTNIK: Čemu přesně řikáš konfigurace / co v ní je?
    URPUTNIK
    URPUTNIK --- ---
    tak uz mam zase cas venovat se CI :) diskutovali jsme tu, jakym zpusobem vystavovat souborovy konfigurace pro jednotlivy service (je mix vseho moznyho), protoze se to bude poustet v K8S, ktery to teda bude muset odnekud brat .. takze, pokud pouzivate souborove konfigurace, jak je vystavujete tak, aby je mel dostupny i cluster? zatim se klonime vystavit je pres NFS server, ktery se pusti jako sluzba v clusteru

    resime to kvuli tomu, ze musime resit i branche, aktualne je v planu v clusteru poustet cele prostredi pro danou branch .. coz znamena teda v clusteru pod vlastnim namespace pustit treba 15sluzeb .. kazdopadne tohle prostredi potrebuje konfiguraci, neco je pro konfiguraci uvnitr clusteru mezi servicama, neco je na veci, ktere nejsou a nebudou clusterovany .. takze plan je pouzit docker image s upravenou konfiguraci (konkretizace sablony konfigurace pro danou branch), ktery se vystavi pres ten nfs server .. lepsi napad?

    (edit: upraveno o to, co jsem se dozvedevel v ofiko dokumentaci o adresovatelnosti)
    RUDOLF
    RUDOLF --- ---
    URPUTNIK: Je to spíš o tom, jak blízko chceš být best practice. Ale obecně, jde o to to nasadit podle vašich potřeb a možností a ty jsou všude jiný. Každápádně, obecně ty best practice mají imho smysl.

    a.) Máme sice image v privátním dockerhubu. Repo se zdrojáky v privátním gitu. Ale jakmile k těmhle věcem má přístup nový dev nebo třetí strana. Můžou secrets vynést ven. Asi jim můžeme důvěřovat, ale třeba taky vůbec ne. Tj. chci poskytnou kontejner bez secrets a přístup k repozitáři tak, aby ideálně ani naši devs, nemuseli znát hesla k ničemu. A jim to i tak vyhovuje. Tj. pokud security není problém, tak bych klidně skrz ENV jen volal konfiguráky pro dané prostředí, což už v kontejneru jsou. Jestli je to security priorita, tak bych určitě šel cestou vkládání konfigruace až při deploy.

    b.) Já třeba provozuji Swarm, u některým old school appek jsem musel secret vkládat do swarmu, aby si ho kontejner přimountoval jako soubor. Mělo to jeden nemilej důsledek, když jsem kontejner aktualizoval, musel jsem připojit novej secret a starej odebrat páč swarm neumí update operaci nad secret/config (měl jsem ošklivej bash na přidání secret_temp, odebráný původního secret, přidání nového secret a odebrání secret_temp:-). Když jedu jen z ENV tak nic neřeším a nemusím používat Swarm secrets. Mám pocit, že podobně je to i v Kubernetes. Že config/secret objekt musíš nahradit a nemůžeš udělat update, tak je snažší to všechno rvát přes ENV.
    URPUTNIK
    URPUTNIK --- ---
    MUXX: RUDOLF: chapu vas .. ale protoze ted mame konfiguraci vytahanou do vlastnich souboru (a je jich hodne), prijde mi nejlepsi metoda namountovat do image ty spravny soubory (nez abych to cely tahal do promennych a resil to dplnovani, protoze jsou to 3 ruzny technologie apod) ..

    kazdopadne, ten duvod "proc nedavat secrety do image" je ten, ze se pak neda reusnout image v jinem prostredi, nebo je to kvuli bezpecnosti (protoze image snadno leakne)?
    RUDOLF
    RUDOLF --- ---
    URPUTNIK: já to dělám tak, že mám docker compose (pro swarm) jako ansible template, podle toho kam se to deployuje (local, test, prod), ansible vyplní proměné. Když je to test/prod, tak to ansible krmí z vaultu.
    Kliknutím sem můžete změnit nastavení reklam