Java (Spring Boot) proyektini CircleCi ilə Google Kubernetes Engine (GKE)-də yerləşdirmək

Valid Akhundov
5 min readApr 6, 2020

--

Salam, məqaləmə xoş gəlmişsiniz. Bu məqalədə Spring Boot da yazdığımız proyekti davamlı integrasiya (continuous integration-CI) xidməti verən CircleCi ilə GitHub-dan Google Kubernetes Engine (GKE)-ə yerləşdirməyə addım-addım baxacıq.

İlk öncə Spring Boot da yazdığım sadə həm də maraqlı olan nümunə tətbiq haqqında qısaca məlumat verim. Tətbiq günümüzün əsas mövsuzu olan koronavirusla bağlı ölkəmizdəki statistik vəziyyəti 5 dəqiqə intervalla yoxlayır və əgər yenilik varsa bazadakı abonəçilərə email vasitəsiylə göndərir.

Tətbiqin nümunə email bildirişi

Tətbiqin kodlarıyla daha ətraflı GitHub hesabımdan tanış ola bilərsiniz.

İndi isə keçək əsas məsələyə. Əvvəlcə Kubernetes Cluster-imizi yaratmaq üçün GCP-nin konsoluna https://consol.cloud.google.com/ daxil oluruq. Proyekt seçiminə tıklayırıq:

Ad təyin edərək yeni proyekt yaradırıq:

Proyekt yaradıldıqdan sonra “Navigation menu” -> “COMPUTE” -> “Kubernetes Engine”->“Clusters”-ə daxil oluruq:

Bizi bu pəncərə qarşılayacaq:

“Create cluster”-ə tıklayaraq yeni bir “cluster” yaradırıq:

Ad təyin edib digər sazlamaları susmaya görə saxlayırıq. “Create”-ə tıklayırıq. Prosess bir neçə dəqiqə çəkə bilər. “Cluster”-imiz tam hazır olduqda aşağıdakı kimi görünəcək.

Google bizim üçün susmaya görə 3 “node”-dan ibarət bir “cluster” verir. İstəyə görə müxtəlif sazlamalar mümkündür. Bizim nümünə üçün bu kifayət edir. Daha ətraflı məlumat üçün “cluster”-in adına tıklayırıq:

“Cluster”-ə “Cloud Shell”-dən qoşulmaq üçün aşağıdakı əmr kifayət edir:

gcloud container clusters get-credentials <cluster name> — zone us-central1-c — project <project id>

Nəzərə almaq lazımdır ki biz bu “cluster”-ə circleci platformasından mürəciət edəcik bunun üçün bizə GCP-nin icazəsi lazım olacaq. Bunun üçün GCP bizə “Service Account”-lar yaratmaq imkanı verir. Elə isə circleci üçün bir servis hesabı yaradaq. “Navigation menu”-dan “PRODUCTS”-a ordan isə “Service Account”- a daxil oluruq:

“CREATE SERVICE ACCOUNT”-a klikləyib yeni ad təyin edib “Create” deyirik:

Daha sonra bu servisə GCP-nin “Kubernetes Engine” və “Storage”-ini idarə etmək rolları əlavə edirik:

“CONTINUE” -ilə davam edirik. Növbəti hissədə “Create Key”-ə tıklayıb “JSON” seçib “Create”-ə tıklayırıq:

Bu zaman json formatında private key komputerimizə yüklənəcək.

Bu faylın məzmunu bizə circleci da lazım olacaq.

GitHub-a push elədiyimiz zaman pipeline-ın başlaması üçün proyektin qovluğunda .circleci qovluğu olmalıdır. Bu qovluğun da içində CircleCi-ın config.yml faylı olmalıdır. Bu fayl əsasında pipeline icra olunur. Pipeline-ımız 2 mərhələ (“job”)-dan ibarətdir:

  1. build- Maven dependency -lərinin yüklənməsi və test-lərin çalışdırılması yerinə yetirilir.
  2. deploy- Tətbiqin qovluğunda olan Dockerfile-ı əsasında docker image-i hazırlayır və GCP-nin “Container Registry”-ə push edir. Daha sonra isə k8s.yml faylı əsasında kubernetes deployment-ini hazırlayıb cluster-imizə tətbiq edir.

İndi isə keçək circleci -ya. https://circleci.com/ -a daxil oluruq. Sol tərəfdən “ADD PROJECTS-i seçirik. Daha sonra bizim github hesabımızdakı proyektlərin siyahısı gələcək.

Bizim nümunə proyekt covid19-notifier-dir. “Set Up Project” -> “Start Building” -> “Add Manual” -> “Start Building” seçirik. Bu zaman “Pipeline”-ımız başlayır config.yml faylında qeyd olunan addımlar icra olunur. Build uğurla tamamlansa da Deploy -da xəta baş verir:

Səbəb aydındır GCLOUD_SERVİCE_KEY dəyişəninin dəyəri boşdur. Bu dəyişənə dəyər təyin etmək üçün “Project Settings” -> “Environment Variables” -ə daxil oluruq:

“Value” xanasına “Service Account”-un private key-i daxil edib “Add Environment Variable”-a tıklayırıq. Daha sonra “pipeline”-ı yenidən başladırıq.

Pipeline uğurla tamamlandı. Artıq tətbiqimiz kubernetes -ə yerləşdirilib.

“Pod”-lar, “load balancer”-imiz hazırdır. Yeni bir email abonə edək:

Daha sonra pod-un loglarına baxsaq:

Tətbiqimiz uğurla Google Kubernetes Engine-də çalışır. Qeyd edim ki bu tətbiqdə baza olaraq PostgreSQL -dən istifadə olunub hansı ki GCP-də çalışır. O haqda olan məqaləmi burdan oxuya bilərsiniz. Faydalı olması ümidi ilə növbəti məqalələr üçün izləmədə qalın :)

--

--