Angular - CI / CD üçün iş vaxtı ətraf mühit haqqında məlumatı necə oxumaq olar

Əgər NGINX-ni veb-server və Kubernetes kimi istifadə edirsinizsə

Tim Gouw'un Unsplash'dəki şəkli

Bucaq qurma vaxtında konfiqurasiya seçimlərini təmin edir, yəni hər mühit üçün müxtəlif mühit sənədlərini təyin etməlisiniz və Layihəni qurarkən - konfiqurasiya bayrağı təmin etməklə Angular müvafiq konfiqurasiya tələb edir. Qurulma müddətində ətraf mühit məlumatlarını oxumaq haqqında bu yazını nəzərdən keçirə bilərsiniz.

Lakin, on iki faktorlu metodologiya və bugünkü DevOps strategiyaları bir dəfə qurub hər yerdə çalışmalı olduğumuzu göstərir ki, bu da konfiqurasiya faylını təmin etmək üçün yalnız bir şansınız olacaq deməkdir. Bucaq konfiqurasiya variantları kifayət deyil. İş vaxtında konfiqurasiya və ya ətraf mühit barədə məlumat verməlisiniz. Bu yazıda buna necə nail ola biləcəyimizi və iş vaxtı konfiqurasiya parametrlərini və ya ətraf mühit məlumatlarını oxuyacağıq.

  • Misal Layihəsi
  • Qarşılaşdığımız problem
  • Həll
  • İcra
  • Debug necə
  • Xülasə
  • Nəticə

Misal Layihəsi

Nümunə üçün nümunə layihə. Klonlaşdıra və maşında işlədə bilərsiniz.

// layihəni klonlaşdırmaq git klonu https://github.com/bbachi/angular-envread-runtime.git
// yerli inkişaf npm üçün npm başlanğıcını quraşdırın

Bu / aktivlər qovluğundan app.config.json konfiqurasiya faylını yükləyən sadə bucaqlı bir layihədir.

Başlamaqdan əvvəl bu app.config.json faylı yükləmək və bu parametrləri istifadə etmək üçün APP_INITIALIZER istifadə edirik. Budur app.module.ts və app.service.ts faylları.

Parametrləri yüklədikdən sonra aşağıdakı parametrləri app.component.ts-də oxuya bilərsiniz.

Konfiqurasiya əsasında başlıq rəngini, başlıq və masanı görə bilərsiniz. Məsələn, bir inkişaf mühitidirsə başlıq rəngi qara və başlıq inkişafdır. Bənzər bir ekranı aşağıdakı kimi görə bilərsiniz.

inkişaf ekranı

Fon rəngini və başlığını müvafiq olaraq qırmızı və istehsala dəyişdirirsinizsə. Aşağıdakı kimi bir ekran görə bilərsiniz.

istehsal ekranı

Qarşılaşdığımız problem

On iki amil metodologiyası təklif edir ki, hər yerdə bir dəfə çalışmalıyıq, ancaq bu vəziyyətdə hər mühit üçün inşa edirik. Sadəlik üçün, yalnız iki mühitin inkişafı və istehsalını nəzərdən keçiririk. NGINX ilə bucaqlı tətbiqetməyə xidmət etdiyimizdən və yalnız vaxt qurmaqdan daha çox qurma vaxtında konfiqurasiya təmin edə bilərik. Brauzer də ətraf mühit dəyişkənlərini oxumadığı üçün ətraf mühit dəyişkənlərini də təmin edə bilmirik.

Qurulma zamanı konfiqurasiyadan keçmək

Hər bir mühit üçün inşa edirik, çünki qurma zamanı ətraf mühitə aid məlumat ötürməli olduq. Bu məlumatı iş vaxtında ötürməyimiz üçün bir yol tapmalıyıq. Əgər qaçış vaxtında keçsək, bir dəfə qurmalıyıq və aşağıdakı diaqramda gördüyümüz kimi hər yerə qaçmalıyıq.

İşləmə zamanı konfiqurasiyadan keçmək

Həll

Görək bu problemi necə həll edə bilərik. Bunu həll etməyin bir yolu, brauzer URL-i pəncərə location.href ilə oxumaq və bütün konfiqurasiyanı tətbiqetməyə qoymaq və URL-nin müəyyən bir hissəsinə, məsələn, dev, prod və s. Əsaslı uyğun konfiqurasiya yükləməkdir.

Bucaqlı tətbiqetmə ilə Java və ya Nodej'lardan istifadə edirsinizsə, bu proqramı APP_INITIALIZER ilə yükləmədən əvvəl bu konfiqurasiya şəklini əldə edə bilərik. Bəs NGINX-dən istifadə etdiyimiz halda bunu necə edə bilərik?

/ Usr / share / nginx / html / aktivlər qovluğuna quraşdırılmış Pods həcminə konfiqurasiya vurmaq üçün Kubernetes configmap-dan istifadə edə bilərik ki, Bucaq tətbiqləri APP_INITIALIZER köməyi ilə proqramı yükləməzdən əvvəl alır. Daha yaxşı başa düşmək üçün aşağıdakı diaqrama baxaq.

Configmap istifadə edərək konfiqurasiya oxu

İcra

Həllini Kubernetes configMap obyekti ilə həyata keçirək. ConfigMap obyekti qablarınızı onlardan konfiqurasiya açaraq portativ hala gətirir. Bu necə işləyir.

Etməyimiz lazım olan ilk şey docker görüntüsünü yaratmaq və DockerHub-a itələməkdir. Budur ilk mərhələdə bucaqlı tətbiqini quran və o statik aktivləri götürərək NGINX-in kök qovluğuna qoyan çox mərhələli Dockerfile.

Docker görüntüsünü yaratmaq və DockerHub-a itələmək üçün göstərişlər bunlardır. Həqiqətən aşağıdakı şəkildəki DockerHub-da görə bilərsiniz. Bu birbaşa qeyd dəftərindən çəkə biləcəyiniz ictimai bir görüntüdür.

// şəkil docker qurmaq -t bbachin1 / envdemo.
// siyahı şəkillər doker şəkilləri
// Giriş et və Docker hub Docker Giriş Docker push bbachin1 / envdemo
Docker mərkəzi

İndi bir yerləşdirmə, xidmət və konfiqurasiya obyektləri yaratmalıyıq. bütün bu obyektləri manifest.yml adlı bir sənəddə yerləşdiririk. Tələb olunan config.json ilə əvvəlcə Configmap yaradırıq. Əgər yerləşdirmə obyektinə baxsanız Kubernetes yuxarıdakı görüntü bbachin1 / envdemo-nu Docker Hub-dan çıxarır və 5 replika yaradır. Nəhayət, xarici dünyaya məruz qalan Nodeport tipli bir xidmət obyektimiz var.

Configmap'ı / usr / share / nginx / html / aktivlər / qovluğa quraşdırılmış həcmə yüklədik. Bütün bu obyektləri ad sahələri inkişaf etdiririk.

Budur obyektləri yaratmaq və onları yoxlamaq üçün təlimatlar.

// obyektləri yaratmaq kubectl yaratmaq -f manifest.yml
// obyektləri silmək kubectl sil -f manifest.yml
// yerləşdirmə kubectl almaq yerləşdirmək -n inkişaf
// xidmət almaq kubectl almaq svc -n inkişaf
// pods kubectl almaq po -n inkişafına

Kubernetes ümumi ünvanını bu əmr kubektl çoxluq məlumatından əldə edin və xidmət obyekti olan portdan kubectl əldə edin svc -n inkişafını əldə edin və bu ad ilə inkişaf ad zonasında işləyən tətbiqetməyə daxil olun http: // : / appui

xidmət portu və ictimai ünvan

Yuxarıdakı vəziyyətdə tətbiqetməyə http://192.168.64.6:31935/appui ünvanından daxil ola bilərsiniz. Https-dən http-ə dəyişdiyinizdən əmin olun. Diqqət yetirin, bütün konfiqurasiya başlıq fonColor, başlıq və s. Kimi configmap-dan yüklənmişdir.

Minikube-də yerləşdirmə işləyir

Gəlin manifest-prod.yml faylından istehsal yerləşdirməsini yaradaq və tətbiqinizi yerli olaraq işə salmaq üçün yuxarıdakı addımlara əməl edək.

// obyektlər yaratmaq kubectl yaratmaq -f manifest-prod.yml
// obyektləri silmək kubectl sil -f manifest-prod.yml
// yerləşdirmə kubectl almaq yerləşdirmək -n istehsalı
// xidmət almaq kubectl almaq svc -n istehsalı
// pods kubectl almaq po -n istehsalı

İstehsal adları sahəsindəki xidmət 31633 limanında çalışır.

xidmət 31633 limanında işləyirMinikube-də yerləşdirmə işləyir

Debug necə

Bu həlli həyata keçirməkdə çətinlik çəkdiyiniz təqdirdə bəzi tənzimləmə variantları bunlardır.

Birincisi, configmapın düzgün şəkildə və düzgün adlar məkanında yaradıldığını yoxlamaq lazımdır.

// configmapın yaradıldığını və ya kubectl-in sm -n inkişafına başlamadığını yoxlayın
// configmap kubectl-də cm -n inkişafını təsvir edən məlumatları yoxlayın

Konfiqurasiya xəritəsini yoxladıqdan sonra. Bundan sonra configmap ilə yüklənmiş quraşdırılmış həcmi yoxlaya bilərsiniz.

// pod kubectl birini almaq po -n inkişafını almaq
// pod kubectl birinə exec -it / bin / sh -n inkişaf # cd / usr / share / nginx / html / envapp / aktivlər # pişik app.config.json
app.config.json

Xülasə

  • Bucaq hər bir mühit üçün fərqli mühit sənədlərini təyin etməyiniz lazım olduğu deməkdir.
  • Hər yerdə bir dəfə tövsiyə olunan strategiyadır.
  • Bir dəfə qurmaq və hər yerdə yerləşdirmək istəsək açısal mühit seçimini istifadə edə bilmərik, çünki hər mühit üçün ayrıca bir konfiqurasiya təmin etməliyik.
  • Configmap, işləyən qablardan konfiqurasiyanı ayırmaq üçün bir həll təqdim edir.
  • NGINX ilə Angular tətbiqetməyinizə xidmət edirsinizsə və iş vaxtında konfiqurasiyadan keçmək üçün bir yola ehtiyacınız varsa, ConfigMaps ən asan həlldir.
  • Konfiqurasiya xəritəsini ana yoluna quraşdırıla bilən həcmdə yükləməlisiniz və Angular bu JSON-u bu yoldan əldə etməlidir.
  • Mövcud configmapı silə və birini yeniləyə bilərsiniz və dəyişikliklər podları yenidən başlamadan işləyən konteynerdə əks oluna bilər.

Nəticə

Konteynerlərinizdən konfiqurasiyanı ayırmaq və iş vaxtında müvafiq konfiqurasiya vurmaq istəyirsinizsə Configmaps istifadə edin.