ЛЕКЦ 09: CI/CD БА DEVOPS ҮНДЭС (CI/CD & DevOps Fundamentals)
Хичээлийн зорилго: CI/CD (Continuous Integration / Continuous Delivery) ба DevOps-ийн суурь ойлголт, соёл, практик, хэрэгслүүдийг эзэмшүүлэх. GitHub Actions ашиглан Java/Spring Boot төслийн автоматжуулалтыг бодит жишээгээр суралцах.
Хамрах хүрээ: DevOps соёл, CI/CD pipeline, GitHub Actions, Docker суурь, автомат тест, код шалгалт, deploy стратеги, monitoring, Infrastructure as Code ойлголт.
ХЭСЭГ 1: ОНОЛЫН СУУРЬ (Theory & Foundations)
1.1 DevOps гэж юу вэ?
DevOps = Development (Хөгжүүлэлт) + Operations (Ашиглалт). Хөгжүүлэлт ба ашиглалтын багийг нэгтгэж, програм хангамжийг хурдан, найдвартай, байнга хүргэх соёл, практик, хэрэгслүүдийн нэгдэл.
💡 Зүйрлэл: Хуучин арга = Тогооч (Dev) хоол хийж, зөөгч (Ops) түгээнэ — бие биенээсээ мэдэхгүй. DevOps = Тогооч + Зөөгч хамтдаа ажиллаж, хоолыг хурдан, чанартай хүргэнэ.
Уламжлалт vs DevOps
| Шинж | Уламжлалт (Waterfall/Silo) | DevOps |
|---|
| Баг | Dev ба Ops тусдаа | Нэгдсэн баг |
| Deploy | Сард/улиралд 1 удаа | Өдөрт олон удаа |
| Алдаа олох | Deploy-ийн дараа | Хөгжүүлэлтийн явцад |
| Тест | Гараар, төгсгөлд | Автомат, байнга |
| Хариу үйлдэл | Удаан (долоо хоног) | Хурдан (минут, цаг) |
| Соёл | "Энэ миний ажил биш" | "Бүгд хариуцна" |
DevOps-ийн гол зарчмууд (CALMS)
| Зарчим | Англи | Тайлбар |
|---|
| C | Culture | Хамтын ажиллагааны соёл |
| A | Automation | Давталттай ажлыг автоматжуулах |
| L | Lean | Хог хаягдлыг багасгах, урсгалыг сайжруулах |
| M | Measurement | Бүх зүйлийг хэмжих (deploy хугацаа, алдааны хувь) |
| S | Sharing | Мэдлэг, туршлага хуваалцах |
1.2 CI/CD гэж юу вэ?
1.2.1 CI — Continuous Integration (Байнгын нэгтгэл)
CI = Хөгжүүлэгчид кодоо өдөр бүр (эсвэл олон удаа) үндсэн branch руу нэгтгэж, автоматаар build, тест ажиллуулах.
Хөгжүүлэгч A ──push──► Git Repository ──trigger──► CI Pipeline
│
Хөгжүүлэгч B ──push──► ▼
┌─────────────┐
│ Build │
│ Unit Test │
│ Code Quality│
│ Report │
└─────────────┘
CI-ийн ашиг тус:
- Нэгтгэлийн алдааг ЭРАТ олох (Integration Hell-аас зайлсхийх)
- Автомат тестээр кодын чанарыг баталгаажуулах
- "Миний компьютерт ажилладаг" асуудлыг шийдэх
- Хөгжүүлэгчид итгэлтэй, хурдан ажиллах
1.2.2 CD — Continuous Delivery / Deployment
Continuous Delivery = CI + Автомат build → Staging орчинд бэлэн болгох (Deploy гараар)
Continuous Deployment = CI + Автомат build → Production руу АВТОМАТААР deploy
┌──────────────────── CI ────────────────────┐ ┌── CD (Delivery) ──┐ ┌── CD (Deploy) ──┐
│ Code → Build → Unit Test → Integration Test│→ │ Staging → QA Test │→ │ Production │
└────────────────────────────────────────────┘ └───────────────────┘ └─────────────────┘
Автомат Автомат Гараар / Автомат
| Нэр | Тайлбар | Deploy |
|---|
| Continuous Integration | Build + Test автомат | - |
| Continuous Delivery | + Staging бэлэн | Гараар approve |
| Continuous Deployment | + Production автомат | Бүрэн автомат |
1.3 CI/CD Pipeline
Pipeline = Код push-лахаас production deploy хүртэлх автоматжуулсан алхмуудын дараалал.
Үндсэн Pipeline алхмууд:
┌─────────┐ ┌─────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐
│ Source │──►│ Build │──►│ Test │──►│ Analysis │──►│ Package │──►│ Deploy │
│ (Git) │ │(Compile)│ │(JUnit) │ │(Sonar) │ │(Docker) │ │(Server) │
└─────────┘ └─────────┘ └──────────┘ └──────────┘ └──────────┘ └──────────┘
Push mvn mvn sonar docker kubectl
trigger compile test scan build apply
| Алхам | Зорилго | Хэрэгсэл |
|---|
| Source | Код өөрчлөлт (push, PR) | Git, GitHub |
| Build | Код compile, dependency татах | Maven, Gradle |
| Test | Unit test, integration test | JUnit, Mockito |
| Analysis | Код чанар, аюулгүй байдал шалгах | SonarQube, Checkstyle |
| Package | Artifact үүсгэх (JAR, Docker image) | Maven, Docker |
| Deploy | Сервер рүү суулгах | Kubernetes, AWS, Netlify |
1.4 GitHub Actions
GitHub Actions гэж юу вэ?
GitHub Actions = GitHub-д суулгасан CI/CD платформ. .github/workflows/ хавтасд YAML файлаар pipeline тодорхойлно.
Суурь ойлголтууд:
| Нэр | Тайлбар | Жишээ |
|---|
| Workflow | Бүрэн pipeline | .github/workflows/ci.yml |
| Event/Trigger | Юу болоход ажиллах | push, pull_request |
| Job | Бие даасан ажлын нэгж | build, test, deploy |
| Step | Job дотор нэг алхам | mvn test, docker build |
| Runner | Pipeline ажиллах сервер | ubuntu-latest, macos-latest |
| Action | Дахин ашиглагдах алхам | actions/checkout@v4 |
Жишээ: Java/Spring Boot CI Workflow
# .github/workflows/ci.yml
name: Java CI Pipeline
on:
push:
branches: [ main, develop ]
pull_request:
branches: [ main ]
jobs:
build-and-test:
runs-on: ubuntu-latest
steps:
# 1. Код татах
- name: Checkout code
uses: actions/checkout@v4
# 2. Java тохируулах
- name: Set up JDK 17
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'temurin'
# 3. Maven кэш (хурдасгах)
- name: Cache Maven packages
uses: actions/cache@v4
with:
path: ~/.m2/repository
key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
# 4. Build + Test
- name: Build and Test
run: mvn clean verify
# 5. Тестийн тайлан
- name: Upload test results
if: always()
uses: actions/upload-artifact@v4
with:
name: test-results
path: target/surefire-reports/
Workflow ажиллах дараалал:
Developer ─push→ GitHub ─trigger→ Workflow
│
┌───────▼───────┐
│ ubuntu-latest │ (Runner)
├────────────────┤
│ 1. Checkout │
│ 2. Setup JDK │
│ 3. Cache Maven │
│ 4. mvn verify │ ← Build + Test
│ 5. Upload │
└───────┬────────┘
│
✅ Pass / ❌ Fail
1.5 Docker суурь
Docker гэж юу вэ?
Docker = Програмыг бүх dependency-тэй нь container (тусгаарлагдсан орчин) дотор ажиллуулах хэрэгсэл.
💡 Зүйрлэл: Чингэлэг тээвэр шиг — Юу ч чингэлэг дотор байна, ямар ч хөлөгт ачигдана. Docker container = Ямар ч серверт ажиллана.
VM vs Container
| Шинж | Virtual Machine | Container (Docker) |
|---|
| Хэмжээ | GB (бүтэн OS) | MB (зөвхөн app + dependency) |
| Эхлэх хурд | Минут | Секунд |
| Нөөц | Их (CPU, RAM) | Бага |
| Тусгаарлалт | Бүрэн (OS түвшин) | Процесс түвшин |
| Зориулалт | Бүтэн орчин хэрэгтэй | Микросервис, CI/CD |
Dockerfile жишээ (Spring Boot)
# Base image
FROM eclipse-temurin:17-jre-alpine
# Ажлын хавтас
WORKDIR /app
# JAR файл хуулах
COPY target/student-api-0.0.1-SNAPSHOT.jar app.jar
# Port нээх
EXPOSE 8080
# Ажиллуулах
ENTRYPOINT ["java", "-jar", "app.jar"]
Docker командууд:
# Image бүтээх
docker build -t student-api:1.0 .
# Container ажиллуулах
docker run -d -p 8080:8080 --name student-api student-api:1.0
# Ажиллаж буй container харах
docker ps
# Лог харах
docker logs student-api
# Container зогсоох
docker stop student-api
# Image жагсаалт
docker images
Docker Compose (Олон container)
# docker-compose.yml
version: '3.8'
services:
app:
build: .
ports:
- "8080:8080"
environment:
- SPRING_DATASOURCE_URL=jdbc:postgresql://db:5432/studentdb
depends_on:
- db
db:
image: postgres:15-alpine
ports:
- "5432:5432"
environment:
- POSTGRES_DB=studentdb
- POSTGRES_USER=admin
- POSTGRES_PASSWORD=secret
volumes:
- postgres_data:/var/lib/postgresql/data
volumes:
postgres_data:
# Бүгдийг ажиллуулах
docker-compose up -d
# Зогсоох
docker-compose down
1.6 Автомат тест Pipeline-д
Тестийн пирамид:
▲
╱ ╲ E2E Tests (Бага тоо, удаан)
╱ ╲ Selenium, Playwright
╱─────╲
╱ ╲ Integration Tests (Дунд)
╱ ╲ @SpringBootTest, TestContainers
╱───────────╲
╱ ╲ Unit Tests (Олон тоо, хурдан)
╱ ╲ JUnit, Mockito
──────────────────
| Түвшин | Тоо | Хурд | CI-д |
|---|
| Unit Test | Олон (80%) | Маш хурдан | Бүх push-д |
| Integration Test | Дунд (15%) | Дунд | PR merge-д |
| E2E Test | Бага (5%) | Удаан | Deploy-ийн өмнө |
CI Pipeline дахь тест:
jobs:
unit-test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'temurin'
- name: Run Unit Tests
run: mvn test -Dtest="*UnitTest"
integration-test:
needs: unit-test
runs-on: ubuntu-latest
services:
postgres:
image: postgres:15
env:
POSTGRES_DB: testdb
POSTGRES_USER: test
POSTGRES_PASSWORD: test
ports:
- 5432:5432
steps:
- uses: actions/checkout@v4
- uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'temurin'
- name: Run Integration Tests
run: mvn verify -Dtest="*IntegrationTest"
1.7 Код чанарын шалгалт (Code Quality)
Pipeline дахь код шалгалт:
| Хэрэгсэл | Зорилго | Шалгах зүйл |
|---|
| Checkstyle | Кодын формат | Нэрлэлт, indent, Javadoc |
| SpotBugs | Bug олох | Null pointer, resource leak |
| SonarQube | Бүрэн шинжилгээ | Bug, vulnerability, code smell, coverage |
| OWASP | Аюулгүй байдал | Dependency-ийн vulnerability |
| JaCoCo | Тест хамрах хүрээ | Line coverage, branch coverage |
JaCoCo (Test Coverage) тохиргоо:
<!-- pom.xml -->
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.8.11</version>
<executions>
<execution>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
<execution>
<id>report</id>
<phase>verify</phase>
<goals>
<goal>report</goal>
</goals>
</execution>
<execution>
<id>check</id>
<goals>
<goal>check</goal>
</goals>
<configuration>
<rules>
<rule>
<limits>
<limit>
<counter>LINE</counter>
<value>COVEREDRATIO</value>
<minimum>0.80</minimum>
</limit>
</limits>
</rule>
</rules>
</configuration>
</execution>
</executions>
</plugin>
1.8 Deploy стратегиуд
1.8.1 Үндсэн стратегиуд:
| Стратеги | Тайлбар | Эрсдэл |
|---|
| Big Bang | Хуучныг зогсоож, шинийг суулгах | Өндөр (downtime) |
| Rolling | Серверүүдийг нэг нэгээр шинэчлэх | Дунд |
| Blue-Green | 2 орчин: Blue (хуучин), Green (шинэ) → Шилжүүлэх | Бага |
| Canary | 5% хэрэглэгчид шинэ → Амжилттай бол 100% | Маш бага |
Blue-Green Deploy:
Хэрэглэгчид
│
┌────▼────┐
│ Load │
│ Balancer│
└────┬────┘
│
┌────┴────┐
▼ ▼
┌───────┐ ┌───────┐
│ Blue │ │ Green │
│ v1.0 │ │ v1.1 │ ← Шинэ хувилбар
│(Одоо) │ │(Шинэ) │
└───────┘ └───────┘
1. Green-д v1.1 deploy
2. Test Green
3. Load Balancer → Green руу шилжүүлэх
4. Blue = Нөөц (rollback хэрэгтэй бол)
Canary Deploy:
Хэрэглэгчид (100%)
│
├── 95% ──► v1.0 (Хуучин)
│
└── 5% ──► v1.1 (Шинэ) ← Canary
│
Мониторинг
✅ OK → 25% → 50% → 100%
❌ Fail → Rollback
1.9 Infrastructure as Code (IaC)
IaC гэж юу вэ?
IaC = Дэд бүтцийг (сервер, сүлжээ, DB) кодоор тодорхойлж, хувилбарлаж, автоматаар үүсгэх.
| Шинж | Гараар | IaC |
|---|
| Хурд | Удаан (консол дээр дарах) | Хурдан (код ажиллуулах) |
| Давтагдах | Хүн бүр өөрөөр | Ижил код = Ижил үр дүн |
| Хувилбар | Юу өөрчилснийг мэдэхгүй | Git-ээр хувилбарлана |
| Баримт | Баримтгүй | Код = Баримт |
Хэрэгслүүд:
| Хэрэгсэл | Зорилго | Жишээ |
|---|
| Terraform | Cloud дэд бүтэц | AWS EC2, RDS, VPC |
| Ansible | Серверийн тохиргоо | Java суулгах, тохиргоо |
| Docker | Програмын орчин | Container image |
| Kubernetes | Container зохион байгуулалт | Pod, Service, Deployment |
| Helm | K8s package manager | Chart ашиглан deploy |
# main.tf — AWS EC2 instance
resource "aws_instance" "app_server" {
ami = "ami-0c55b159cbfafe1f0"
instance_type = "t2.micro"
tags = {
Name = "student-api"
Environment = "production"
}
}
resource "aws_db_instance" "database" {
engine = "postgres"
engine_version = "15"
instance_class = "db.t3.micro"
db_name = "studentdb"
username = "admin"
password = var.db_password
}
1.10 Monitoring ба Observability
Яагаад мониторинг хэрэгтэй вэ?
Deploy хийсний дараа: Ажиллаж байна уу? Алдаа гарч байна уу? Удаан байна уу?
3 тулгуур (Three Pillars of Observability):
| Тулгуур | Англи | Тайлбар | Хэрэгсэл |
|---|
| Лог | Logs | Юу болсон? Текст бичлэг | ELK Stack, Loki |
| Метрик | Metrics | Хэмжигдэхүүн (CPU, Memory, Request/sec) | Prometheus, Grafana |
| Trace | Traces | Хүсэлт ямар замаар явсан? | Jaeger, Zipkin |
Лог түвшнүүд:
| Түвшин | Хэрэглээ | Жишээ |
|---|
| ERROR | Ноцтой алдаа | DB холбогдохгүй, NullPointerException |
| WARN | Анхааруулга | Кэш дүүрсэн, retry хийж байна |
| INFO | Чухал үйл явдал | Хэрэглэгч нэвтэрсэн, захиалга үүссэн |
| DEBUG | Дэлгэрэнгүй debug | SQL query, request/response body |
| TRACE | Маш дэлгэрэнгүй | Method орох/гарах |
Spring Boot Actuator:
# application.yml
management:
endpoints:
web:
exposure:
include: health, info, metrics, prometheus
endpoint:
health:
show-details: always
# Health check
curl http://localhost:8080/actuator/health
# {"status":"UP","components":{"db":{"status":"UP"},"diskSpace":{"status":"UP"}}}
# Metrics
curl http://localhost:8080/actuator/metrics/jvm.memory.used
1.11 Git Branching Strategy (CI/CD-д)
GitFlow vs Trunk-Based:
| Шинж | GitFlow | Trunk-Based |
|---|
| Branch | main, develop, feature, release, hotfix | main + short-lived feature |
| Merge | Олон удаа, урт branch | Өдөр бүр main руу |
| CI/CD | Нарийн, удаан | Хурдан, энгийн |
| Тохиромжтой | Том баг, release schedule | CI/CD, DevOps, жижиг баг |
Trunk-Based Development:
main ──●──●──●──●──●──●──●──●──●── (Байнга deploy)
╲ ╱ ╲ ╱ ╲ ╱
feature ●──● ●● ●──●
branches (1-2 өдөр) (Богино)
Pull Request + CI:
1. Feature branch үүсгэх: git checkout -b feature/add-enrollment
2. Код бичих, commit хийх: git commit -m "feat: add enrollment API"
3. Push + PR үүсгэх: git push origin feature/add-enrollment
4. CI Pipeline ажиллана: ✅ Build + Test + Quality
5. Code Review: Багийн гишүүн approve
6. Merge to main: PR merge
7. CD Pipeline ажиллана: Deploy to staging/production
1.12 Орчны удирдлага (Environment Management)
Орчнууд:
| Орчин | Зорилго | Deploy |
|---|
| Local | Хөгжүүлэгчийн компьютер | Гараар |
| Dev | Хамтын хөгжүүлэлт, туршилт | Push бүрт |
| Staging | Production-тэй ижил орчин, QA тест | PR merge |
| Production | Бодит хэрэглэгчид | Approve-ийн дараа |
Тохиргооны удирдлага:
# application.yml (Default)
spring:
datasource:
url: jdbc:h2:mem:testdb
---
# application-dev.yml
spring:
datasource:
url: jdbc:postgresql://dev-db:5432/devdb
---
# application-staging.yml
spring:
datasource:
url: jdbc:postgresql://staging-db:5432/stagingdb
---
# application-prod.yml
spring:
datasource:
url: jdbc:postgresql://prod-db:5432/proddb
# Орчин сонгох
java -jar app.jar --spring.profiles.active=prod
Secrets удирдлага:
# GitHub Actions secrets ашиглах
- name: Deploy to Production
env:
DB_PASSWORD: ${{ secrets.DB_PASSWORD }}
API_KEY: ${{ secrets.API_KEY }}
run: |
echo "Deploying with secure credentials..."
⚠️ ХЭЗЭЭ Ч: Нууц мэдээлэл (password, API key, token) кодонд hardcode хийхгүй! GitHub Secrets, Vault, AWS Secrets Manager ашиглах.
1.13 CI/CD шилдэг туршлагууд (Best Practices)
| # | Зарчим | Тайлбар |
|---|
| 1 | Commit бүрт CI | Алдааг ЭРТ олох |
| 2 | Тест бичих | Тестгүй CI = Хоосон CI |
| 3 | Pipeline хурдан | 10 минутаас бага (Cache, parallel) |
| 4 | Main branch = Deployable | Main ҮРГЭЛЖ deploy-д бэлэн |
| 5 | Feature Flag | Дуусаагүй feature → Flag-аар нуух |
| 6 | Rollback бэлэн | Хуучин хувилбар руу хурдан буцах |
| 7 | Мониторинг | Deploy-ийн дараа ШУУД хянах |
| 8 | Secrets хамгаалах | Password кодонд БАЙХГҮЙ |
| 9 | IaC ашиглах | Дэд бүтцийг кодоор |
| 10 | Increment deploy | Жижиг, байнгын өөрчлөлт |
| 11 | Code Review | PR merge-ийн өмнө review |
| 12 | Бүх орчин ижил | Dev ≈ Staging ≈ Production |
ХЭСЭГ 2: ТҮЛХҮҮР ҮГ БА МЭРГЭЖЛИЙН НЭР ТОМЬЁО (Keywords & Glossary)
| # | Англи нэр томьёо | Монгол утга | Дэлгэрэнгүй тайлбар |
|---|
| 1 | DevOps | DevOps | Development + Operations — Хөгжүүлэлт ба ашиглалтын нэгдэл. |
| 2 | CI (Continuous Integration) | Байнгын нэгтгэл | Код push бүрт автомат build + test. |
| 3 | CD (Continuous Delivery) | Байнгын хүргэлт | CI + Staging бэлэн, deploy гараар. |
| 4 | CD (Continuous Deployment) | Байнгын суулгалт | CI + Production руу автомат deploy. |
| 5 | Pipeline | Дамжлага | Код → Build → Test → Deploy автомат дараалал. |
| 6 | Workflow | Ажлын урсгал | GitHub Actions-ийн бүрэн pipeline (YAML). |
| 7 | Job | Ажил | Pipeline-ийн бие даасан ажлын нэгж. |
| 8 | Step | Алхам | Job дотор нэг үйлдэл. |
| 9 | Runner | Ажиллуулагч | Pipeline ажиллах сервер (ubuntu-latest). |
| 10 | Trigger / Event | Гох / Үйл явдал | Pipeline эхлүүлэх нөхцөл (push, PR). |
| 11 | Artifact | Бүтээгдэхүүн | Build-ийн үр дүн (JAR, Docker image). |
| 12 | Docker | Docker | Програмыг container-д ажиллуулах хэрэгсэл. |
| 13 | Container | Контейнер | Тусгаарлагдсан, хөнгөн ажиллах орчин. |
| 14 | Image | Дүрс | Container-ийн загвар (template). |
| 15 | Dockerfile | Dockerfile | Docker image бүтээх зааварчилгаа. |
| 16 | Docker Compose | Docker Compose | Олон container-ийг хамтад нь удирдах. |
| 17 | Kubernetes (K8s) | Kubernetes | Container зохион байгуулалтын платформ. |
| 18 | IaC | Дэд бүтэц кодоор | Infrastructure as Code — Terraform, Ansible. |
| 19 | Terraform | Terraform | Cloud дэд бүтцийг кодоор тодорхойлох. |
| 20 | Monitoring | Хяналт | Системийн төлөв, гүйцэтгэлийг хянах. |
| 21 | Logging | Лог бичих | Системийн үйл явдлыг текстээр бүртгэх. |
| 22 | Metrics | Хэмжигдэхүүн | CPU, Memory, Request/sec зэрэг тоон утгууд. |
| 23 | Tracing | Мөрдөлт | Хүсэлтийн замыг дагаж мөрдөх. |
| 24 | Blue-Green Deploy | Хөх-Ногоон суулгалт | 2 орчин солих → Downtime-гүй deploy. |
| 25 | Canary Deploy | Канар суулгалт | Бага хувьд шинэ хувилбар → Аажмаар нэмэгдүүлэх. |
| 26 | Rolling Deploy | Шатлал суулгалт | Серверүүдийг нэг нэгээр шинэчлэх. |
| 27 | Rollback | Буцаах | Алдаатай deploy-г хуучин хувилбар руу буцаах. |
| 28 | Feature Flag | Боломжийн тугалга | Шинэ feature-ийг тохиргоогоор нуух/харуулах. |
| 29 | SonarQube | SonarQube | Кодын чанарын шинжилгээний хэрэгсэл. |
| 30 | JaCoCo | JaCoCo | Java тест хамрах хүрээ (coverage) хэрэгсэл. |
| 31 | Code Coverage | Тест хамралт | Тестээр хамрагдсан кодын хувь. |
| 32 | Staging | Staging орчин | Production-тэй ижил тест орчин. |
| 33 | Production | Production орчин | Бодит хэрэглэгчдэд зориулсан орчин. |
| 34 | Health Check | Эрүүл мэндийн шалгалт | Систем хэвийн ажиллаж буй эсэхийг шалгах. |
| 35 | Actuator | Actuator | Spring Boot-ийн мониторинг endpoint-ууд. |
| 36 | Secret | Нууц мэдээлэл | Password, API key, token — кодонд хадгалдаггүй. |
| 37 | Trunk-Based Dev | Үндсэн салааны хөгжүүлэлт | Main branch руу байнга merge хийх. |
| 38 | Pull Request (PR) | Татах хүсэлт | Код merge хийхийн өмнөх review хүсэлт. |
| 39 | YAML | YAML | YAML Ain't Markup Language — Тохиргооны формат. |
| 40 | Observability | Ажиглах чадвар | Logs + Metrics + Traces = Систем ойлгох. |