Sarok - Hogyan olvassuk el a környezeti információkat a CI / CD futási idején

Ha NGINX-t használ webszerverként és a Kubernetes-t a telepítéshez

Fotó: Tim Gouw az Unsplash-en

Az Angular konfigurációs lehetőségeket biztosít az építkezés során, ami azt jelenti, hogy meg kell határoznia az egyes környezetekhez tartozó különféle környezeti fájlokat, és a Szög megfelelő konfigurációt vesz igénybe a projekt felépítésekor, amikor megadja a --configuration zászlót az ng buildhez. Nézze meg ezt a cikket a környezeti információk olvasásáról az építkezés során.

A tizenkét faktoros módszertan és a mai DevOps stratégiák azonban azt sugallják, hogy egyszer kell építenünk és mindenütt futtatnunk, ami azt jelenti, hogy csak egy esélyed lesz a konfigurációs fájl biztosítására. A szögkonfiguráció nem elegendő. Futási időben konfigurációs vagy környezeti információkat kell megadnia. Ebben a bejegyzésben meglátjuk, hogyan érhetjük el ezt, és elolvashatjuk a konfigurációs beállításokat vagy a környezeti információkat futási időben.

  • Példa projekt
  • A felmerült probléma
  • Megoldás
  • Végrehajtás
  • Hogyan hibakeresés
  • összefoglalás
  • Következtetés

Példa projekt

Íme egy példaprojekt a demonstrációhoz. Klónozhat és futtathatja a számítógépen.

// klónozza a projekt git klónját https://github.com/bbachi/angular-envread-runtime.git
// helyi fejlesztéshez npm install npm start

Ez egy egyszerű szögletes projekt, amely betölti az app.config.json konfigurációs fájlt az / eszközök mappába.

Az APP_INITIALIZER használatával töltjük be ezt az app.config.json fájlt a rendszerindítás előtt, és használjuk ezeket a beállításokat. Itt vannak az app.module.ts és app.service.ts fájlok.

Miután betöltötte a beállításokat és elolvasta ezeket a beállításokat az app.component.ts webhelyen, például az alábbiak szerint.

A konfiguráció alapján láthatja a fejléc színét, a fejlécet és a táblát. Például, ha fejlesztési környezet, a fejléc színe fekete, a fejléc pedig a fejlesztés. Láthat egy hasonló képernyőt, mint az alábbiakban.

fejlesztési képernyő

Ha a háttérszínt és a irányt vörösre és a termelésre váltja. Az alábbiakban látható képernyő látható.

gyártási képernyő

A felmerült probléma

A tizenkét tényezőjű módszer azt sugallja, hogy egyszerre kell bárhová építenünk, bárhová kell építeni, de ebben az esetben minden környezetre építünk. Az egyszerűség kedvéért csak két környezet fejlesztését és gyártását vesszük figyelembe. Mivel a Szögletes alkalmazást az NGINX szolgáltatással látjuk el, és a konfigurációt csak építési, és nem futási időben tudjuk biztosítani. Még a környezeti változók kiadásakor sem tudunk szolgáltatni, mivel a böngésző nem olvassa ezeket a környezeti változókat sem.

Konfiguráció átadása az építkezés idején

Minden környezetre építünk, mert az építéskor át kellett adnunk a környezetre vonatkozó információkat. Meg kell találnunk egy módot arra, hogy ezt az információt futási időben továbbítsuk. Ha a futási időn át haladunk, akkor csak egyszer kell építnünk és bárhová futtatnunk, amint azt az alábbi ábra szemlélteti.

Konfiguráció átadása futási időben

Megoldás

Lássuk, hogyan tudjuk megoldani ezt a problémát. Ennek egyik megoldása az, ha elolvassa a böngésző URL-jét a window.href ablakban, és az összes konfigurációt beilleszti az alkalmazásba, és tölti be a megfelelő konfigurációt az URL bizonyos része alapján, például a dev, a prod stb.

Ha Java vagy Nodejs szoftvert használ a Szögletes alkalmazásban, akkor megkaphatjuk ezt a konfigurációt a szerverről, mielőtt az alkalmazást az APP_INITIALIZER segítségével elindítanánk. De hogyan csináljuk ezt, ha NGINX-t használunk webszerverként?

Használhatjuk a Kubernetes configmap programot, hogy beinjektáljuk a konfigurációt a Pods kötetbe, amely a / usr / share / nginx / html / Eszköz mappába van beillesztve, így a Szögletes alkalmazás megkapja, mielőtt elindítja az alkalmazást az APP_INITIALIZER segítségével. Nézzük meg az alábbi ábrát, hogy jobban megértsük.

Olvassa el a konfigurációt futás közben a configmap segítségével

Végrehajtás

Végezzük el a megoldást a Kubernetes configMap objektummal. A ConfigMap objektum hordozhatóvá teszi a tárolókat, elválasztva a konfigurációt tőlük. Így működik.

Az első dolog, amit meg kell tennünk, a dokkoló kép létrehozása és a DockerHub fájlba való áthelyezése. Itt van egy többlépcsős Dockerfile, amely az első lépésben felépíti a Szögletes alkalmazást, és elviszi ezeket a statikus eszközöket, és beteszi az NGINX gyökérmappájába.

Ezek az utasítások a Docker kép létrehozásához és a DockerHubba történő elhelyezéséhez. Valójában a következő képen láthatja a DockerHub-on. Ez egy nyilvános kép, amelyet közvetlenül a nyilvántartásból ki is húzhat.

// a image docker építése build -t bbachin1 / envdemo.
// képek listázása dokkoló képeket
// jelentkezzen be, és nyomja meg a dokkoló központba dokkoló bejelentkezés dokkoló push bbachin1 / envdemo fájlba
Docker Hub

Most létre kell hoznunk egy telepítési, szerviz és configmap objektumokat. ezeket az objektumokat egy manifest.yml nevű fájlba helyezzük. Először a Configmap-et készítjük a szükséges config.json segítségével. A telepítési objektumra nézve a Kubernetes a fenti bbachin1 / envdemo képet húzza a Docker Hubból, és 5 replikát hoz létre. Végül van egy Nodeport típusú szolgáltatási objektum, amely a külvilág számára ki van téve.

Betöltöttük a configmap-t a kötetbe, amely az / usr / share / nginx / html / eszközök / mappa elérési útján található. Mindezeket az objektumokat a névtér fejlesztésében hozjuk létre.

Itt található az objektumok létrehozásának és ellenőrzésének útmutatása.

// objektumok létrehozása kubectl create -f manifest.yml
// objektumok törlése kubectl delete -f manifest.yml
// a telepítés beszerzése kubectl get deploy -n development
// a szolgáltatás beszerzése kubectl get svc -n fejlesztés
// get the pods kubectl get po -n development

Töltse le a Kubernetes nyilvános címet ebből a parancsból a kubectl fürt-info, és szerezze be a portot a szolgáltatási objektumról a kubectl get svc -n fejlesztéshez, és férjen hozzá a fejlesztési névtérben futó alkalmazáshoz ezzel a címmel: http: // : / appui

szolgáltatási kikötő és nyilvános cím

A fenti esetben az alkalmazást a következő címen érheti el: http://192.168.64.6:31935/appui. Ügyeljen arra, hogy a https-ről http-re változtasson. Vegye figyelembe, hogy az összes konfiguráció betöltődik a konfigurációs térképről, például fejléc backgroundColor, cím stb.

A telepítés futtatása a Minikube-on

Hozzuk létre a termelési telepítést a manifest-prod.yml fájlból, és hajtsa végre a fenti lépéseket az alkalmazás futtatásához a helyi oldalon.

// objektumok létrehozása kubectl create -f manifest-prod.yml
// objektumok törlése kubectl delete -f manifest-prod.yml
// a telepítés beszerzése kubectl get deploy -n production
// a szolgáltatás beszerzése kubectl get svc -n produkció
// kapja meg a hüvelyeket kubectl kap po -n produkciót

A szolgáltatás a termelési névtérben a 31633 porton fut.

szolgáltatás fut a 31633 kikötőnA telepítés futtatása a Minikube-on

Hogyan hibakeresés

Ez néhány hibakeresési lehetőség, ha bármilyen problémája van ennek a megoldásnak a végrehajtásával.

Először ellenőriznünk kell, hogy a konfigurációs térképet a megfelelő módon és a megfelelő névtérben hozták-e létre.

// ellenőrizze, hogy létrejött-e a configmap vagy nem a kubectl get cm -n fejlesztést
// ellenőrizze az adatokat a configmap-ban, a kubectl leírja a cm-n fejlesztést

Miután ellenőrizte a konfigurációs térképet. Ezután ellenőrizheti a csatolt kötetet, amely betöltve van a configmap-rel.

// kap az egyik pod kubectl get po -n fejlesztés
// Végrehajtás az egyik pod kubectl exec -it könyvtárba / bin / sh -n fejlesztés # cd / usr / share / nginx / html / envapp / eszközök # macska app.config.json
app.config.json

összefoglalás

  • A Szög konfigurációs lehetőségeket biztosít az építkezéskor, ami azt jelenti, hogy az egyes környezetekhez különféle környezeti fájlokat kell meghatároznia.
  • Ki kell építeni, ha egyszer fut mindenütt az ajánlott stratégia.
  • Nem használhatjuk a Szögletes környezet opciót, ha egyszeri verziót akarunk létrehozni, és mindenütt telepíteni szeretnénk, mivel minden környezethez külön konfigurációt kell megadnunk.
  • A Configmap megoldást kínál a konfiguráció leválasztására a tárolók futtatásától.
  • Ha a Szögletes alkalmazást NGINX-rel szolgálja, és szüksége van egy módra a konfiguráció átadására futásidejű környezetben, akkor a ConfigMaps a legegyszerűbb megoldás.
  • Töltse be a konfigurációs térképet a kötetbe, amely beilleszthető a gazdagép elérési útjára, és a Szögletes lekérdezi a JSON-t az útvonalról.
  • Törölheti a meglévő konfigurációs térképet, és újra létrehozhatja azt. A változások a hüvelyek újraindítása nélkül tükröződhetnek a futó tárolóban.

Következtetés

Használja a Configmaps szoftvert, ha szeretné leválasztani a konfigurációt a tárolóktól, és a megfelelő konfigurációt beadni futási időben.