You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Ushbu qo'llanma **Java Spring Boot** applicationlarnni **GitLab CI/CD** va **GitHub Actions** yordamida avtomatlashtirilgan tarzda deploy qilishni o'rganishni maqsad qilgan. Bu amaliyot DevOps Engineerlar va Java dasturchilari uchun zarur bo'lgan bilim va ko'nikmalarni qamrab oladi. Qo'llanmada Java Spring Boot applicationining tuzilishini tushunish va konfiguratsiya qilish jarayonlari ko'rib chiqamiz.
13
+
Ushbu qo'llanma **Java Spring Boot** applicationlarnni **GitLab CI/CD** va **GitHub Actions** yordamida avtomatlashtirilgan tarzda deploy qilishni o'rganib chiqamiz. Bu amaliyot DevOps Engineerlar va Java dasturchilari uchun zarur bo'lgan bilim va ko'nikmalarni qamrab oladi. Qo'llanmada Java Spring Boot applicationining tuzilishini tushunish va konfiguratsiya qilish jarayonlari ko'rib chiqamiz.
14
14
15
15
Shuningdek, biz Dockerfile yozishni o'rganamiz va uni samarali ishlashi uchun optimallashtiramiz. Docker asosida konteynerlash jarayonlarini o'zlashtirgach, GitLab CI/CD va GitHub Actions yordamida CI/CD pipeline'larini sozlash va avtomatlashtirish usullarini ko'rib chiqamiz.
16
16
@@ -265,6 +265,34 @@ Environment variablelarni Gitlab CI variablega qo'shib chiqishimiz kerak bo'ladi
265
265
Gitlab CI variablega secret keylarni qo'shib chiqdik endi Gitlab CI/CD pipeline'larimizda bu secret keylarni ishlatishimiz mumkin.
CI/CD deployment bosqichida biz applicationimizni vm(virtual machine)ga deploy qilamiz bu uchun vm tayyorlashimiz kerak bo'ladi, yani pipeline serverga ssh bilan ulanib ishlaydigan qismi bor shu qismi uchun ssh sozlashimiz va docker o'rnatishimiz kerak bo'ladi.
271
+
272
+
Docker o'rnatish uchun quyidagi qo'llanmadan foydalanishingiz mumkin - **[Linux serverlarga Docker o'rnatish](https://devops-journey.uz/guides/konteyner/docker-ornatish)**
273
+
274
+
CD pipelien serverga ssh orqali kira olishi kerak buning uchun serverda ssh-key generatsiya qilishimiz kerak bo'ladi.
275
+
276
+
```bash
277
+
ssh-keygen
278
+
```
279
+
Yuqoridagi buyruqni yozib **ENTER**ni bosib key generatsiya qilib oling
CD pipeline serverga kira olishi uchun private(`id_rsa`) keyni `authorized_keys` fayliga qo'shib chiqishimiz kerak bo'ladi.
285
+
```bash
286
+
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
287
+
```
288
+
289
+
Keyin esa private(`id_rsa`) keyni Gitlab CI variablega `SSH_PRIVATE_KEY` nomi bilan qo'shamiz private keyni `cat ~/.ssh/id_rsa` buyruqini ishga tushirib olishimiz mumkin.
Okey yuqorida biz loyihani tushundik, Dockerfile yozdik va konfiguratsiyalarimizni sozladik endi Gitlab CI/CD pipeline'larimizni yozamiz. Gitlab CI/CD pipeline'larini yozish uchun `.gitlab-ci.yml` faylini loyihaning asosiy katalogiga yaratamiz.
@@ -404,28 +432,7 @@ Ushbu CD pipeline'ni tushunish uchun quyidagi qadamlarni ko'rib chiqamiz:
404
432
405
433
Bu CD pipelineni ishga tushirish uchun kerakli secretlarni Gitlab CI variablega qo'shib chiqamiz.
406
434
407
-
CD pipelien serverga ssh orqali kira olishi kerak buning uchun serverda ssh-key generatsiya qilib uni Gitlab CI variablega qo'shib chiqamiz.
408
-
409
-
```bash
410
-
ssh-keygen
411
-
```
412
-
Yuqoridagi buyruqni yozin **ENTER**ni bosib key generatsiya qilib oling
CD pipeline serverga kira olishi uchun private(`id_rsa`) keyni `authorized_keys` fayliga qo'shib chiqishimiz kerak bo'ladi.
418
-
```bash
419
-
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
420
-
```
421
-
422
-
Keyin esa private(`id_rsa`) keyni Gitlab CI variablega `SSH_PRIVATE_KEY` nomi bilan qo'shamiz private keyni `cat ~/.ssh/id_rsa` buyruqini ishga tushirib olishimiz mumkin.
Serverda ssh key genratsiya qilib sozlab olganimizdan keyin Gitlab CI variablega qo'shib chiqishimiz kerak bo'ladi.
435
+
Yuqorida biz **[VM tayyorlash](#vm-tayyorlash)** bosqichida serverga docker install qilib ssh-key generatsiya qilgandik endi shu keylarni Gitlab CI variablega qo'shib chiqishimiz kerak bo'ladi.
429
436
**-> Settings -> CI/CD -> Variables** bo'limiga o'tamiz va `SERVER_IP` nomli variablega server ip manzilini(Gitlab bo'glana oladigan IP) yozamiz.
Bu amaliyotimizda biz ham Gitlab CI bilan CI/CD pipeline va Github Actions bilan CI/CD pipeline yozamiz. Yuqorida biz Gitlab CI/CD bilan pipeline yozishni ko'rib chiqdik bu qismda biz Github Actions bilan CI/CD pipeline yozamiz.
469
+
470
+
<Callout type="info" emoji="">
471
+
Agar siz Github Actions bilan tanish bo'lmasangiz quyidagi qo'llanma orqali o'rganib chiqishingiz mumkin: [**Github Actions CI/CD**](https://devops-journey.uz/guides/ci-cd/github-actions-ci-cd).
472
+
</Callout>
473
+
474
+
### CI pipeline
475
+
Github Actions CI pipeline'ni yozish uchun birinchi navbatda `.github/workflows` papkasini yaratib olamiz va ichiga `ci-cd.yml` faylini yaratamiz ba CI pipeline'ni quyidagicha yozamiz.
Agar siz [**Github Actions CI/CD**](https://devops-journey.uz/guides/ci-cd/github-actions-ci-cd) qo'llanmasini o'qib chiqgan bo'lsangiz bu CI pipeline'ni oson tushunasiz. Qisqa qilib aytganda bu CI juda oddiy pipeline bo'lib Github Actions orqali `main` branchga push qilganda yoki pull request ochganda avtomatik ishga tushadi va Docker imageni build qilib Github Container registryga push qiladi.
520
+
521
+
CI pipelineni sinash uchub Githubdagi repositoriyamiz `main` branchiga push qilamiz pipeline avtomatik ishga tushishi kerak.
CI pipeline muvaffaqiyatli ishga tushdi endi esa uni teklshirib ko'rishimiz kerak bo'ladi. Biz container registry sifatida Github Container registryni ishlatdik keling container registryda CI pipelienda yaratilgan imageni tekshirib ko'ramiz, buning uchun **-> Packages** bo'limiga o'tib container registryda yaratilgan imageni ko'ramiz.
Biz Github Actionsda CI pipeline muvaffaqiyatli yozib ishga tushirdik endi esa CD pipeline'ni yozamiz.
553
+
554
+
### CD pipeline
555
+
556
+
CD pipelineda biz CI pipeline'da build qilingan docker imageni Github Actions orqali serverga kirib docker imageni Github Container registrydan pull qilib belgilan qiymatlar bilan uni ishga tushiramiz. Buning uchun `ci-cd.yml` faylini o'zgartirishlar kiritishimiz kerak bo'ladi.
Ushbu CD pipelineni qisqacha tushintiradigan bo'lsam `cd-cd.yml` ga `CONTAINER_NAME`, `PORT`, `SSH_HOST`, `SSH_USER`, `SSH_KEY`, `SPRING_PROFILES_ACTIVE`, `DEV_DATABASE_URL`, `DEV_DATABASE_USERNAME`, `DEV_DATABASE_PASSWORD` nomli yangi o'zgaruvchilari qo'shildi. deploy uchu `deploy` nomli job yozdik bu job afqat `build_and_push` jobi tugagandan keyin ishlaydi va berilgan `SSH_HOST`, `SSH_USER`, `SSH_KEY` secretlarini Github Secretsdan olib serverga ssh orqali kiradi va birinchi navbatda Github Container Registyrga login qiladi va `build_and_push` jobida build qilingan imageni pull qilib oladi va hozir ishlab turgan eski containerni to'xtatatib belgilangan variablelar(`SPRING_PROFILES_ACTIVE`, `PORT`, `CONTAINER_NAME`) orqali yangi containerni ishga tushiradi. `application-dev.properties` faylida dev environment uchun kerakli secretlarni esa Github Secretsdan olib ishlatadi.
633
+
634
+
Ushbu yangilangan to'liq CI/CD pipelieni ishga tushirishdan oldin kerakli secretlarni Github Secretga qo'shib chiqishimiz kerak bo'ladi.
635
+
636
+
Buning uchun **-> Settings -> Secrets and variable -> New repository secret** bo'limiga o'tib kerakli secretlarni qo'shib chiqamiz.
637
+
638
+
`DEV_DATABASE_URL`ga `jdbc:postgresql://134.209.217.179:5432/waifulist` formatda secret keyni yozamiz buyerda IP manzil PostgreSQL server manzili va porti `waifulist` esa database nomi bo'ladi.
`DEV_DATABASE_PASSWORD`ga `lwfjljqwotpreqwt2` secret keyni yozamiz bu PostgreSQL serverga yuqoria belgilangan user bilan ulanish uchun kerak user paroli(yani `postgres` user paroli).
Yuqorida biz **[VM tayyorlash](#vm-tayyorlash)** bosqichida serverga docker install qilib ssh-key generatsiya qilgandik endi shu keylarni Github Actions Secretga qo'shib chiqishimiz kerak bo'ladi.
646
+
647
+
`SERVER_IP`nomli variablega server ip manzilini(Gitlab bo'glana oladigan IP) yozamiz.
Okeyy biz barcha secret va variablelarni to'g'ri qo'shib chiqdik endi esa to'liq CI/CD pipelineni ishga tushirish uchun o'zgarishlarni `main` branchga push qilamiz. CI/CD avtomatik ishga tushishi kerak.
662
+
663
+
664
+
Ko'rib turganingizdek bu safar bizda jobllar ikkita `build_and_push` va `deploy` joblarini ko'ramiz va ular ketma-ketlikda ishlaydi.
Bizda `waifulist` nomli docker containerimiz mavjud va statusi healthy bo'lganini ko'ramiz, keling endi bu API'ning swagger interfeysiga kirib ko'ramiz, bunig uchun brauzerdan `http://server-ip::8080/swagger-ui/index.html` manziliga kirib ko'ramiz bizda API swagger interfeysi ochilishi kerak.
Niyohat biz bugun Spring Boot applicationni Docker konteyneriga ishga tushirishni o'rgandik, Gitlab CI/CD pipelinelarini yozdik va loyihamizni Gitlab CI/CD orqali jarayonlarni avtomatlashtirdik, Spring Bootda multi-environment konfiguratsiyalar bilan ishlashni o'rgandik va secretlarimizni Gitlab CI variablega qo'shib ishladik. Bugungi amaliyot boshlang'ich darajada hisoblanasa bu orqali siz ko'p narsalarni o'rganib chiqasiz, qolganlari esa keyingi boqichlarda.
0 commit comments