๐ GitLab CI/CD ๆไฝณๅฏฆๅ(้ฒ้็ฏ):Artifacts、Cache、Stages、่ๅฎๅ จๆง็ญ็ฅ
GitLab CI/CD ๆฏ DevOps ๆต็จไธญ็ๆ ธๅฟ,「ๅฏซ .gitlab-ci.yml」ๅชๆฏ่ตท้ป。 ่ฆ่ฎ CI/CD ่ทๅพๅฟซ、่ทๅพ็ฉฉ、่ทๅพๅฎๅ จ,ๅฟ ้ ๆๆก Artifacts、Cache、Stages、Runner、Variable、Rules、Deployment ็ญ็ญ็ฅ。
ๆฌ็ฏ็บ GitLab CI/CD ็「้ฒ้ๅฏฆๅ」,่็ฆๅจๅ้็ๆญฃๆ็จๅฐ็้ซ้่ฝๅ,ๅ ๆฌ:
- ๅฆไฝๆญฃ็ขบไฝฟ็จ Cache / Artifacts
- ๆไฝณ็ Stages + Job ไธฆ่ก่จญ่จ
- ๅฆไฝ้ไฝ Pipeline ๆ้(ๅฏฆ้ๅฏๆธ 40% ไปฅไธ)
- Runner ่็็ญ็ฅ(Kubernetes / ่ฃธๆฉ / VM)
- ้จ็ฝฒ Secrets ่ๅฎๅ จๆง็ฎก็
- ๆดไนพๆทจ็ .gitlab-ci.yml ่จญ่จๆจกๅผ
- ๆฏๆด GitOps、้ ่จญ็ฐๅขๅปบ็ซ่้/่้จ็ฝฒ
๐ ็ฎ้
- ไธ、Stages ่จญ่จ:่ฎ Pipeline ๅๅฟซๅๅฅฝ็ถญ่ญท
- ไบ、Artifacts:่ทจ Stage ๅณ้ๆๆ(Build → Test → Deploy)
- ไธ、Cache:ๅ ้็ทจ่ญฏ、ไพ่ณดไธ่ผ่้่คๅทฅไฝ
- ๅ、Rules:้ฟๅ ไธๅฟ ่ฆ็ Pipeline ๆตช่ฒป่ณๆบ
- ไบ、Parallel ่ Matrix:ๅคงๅน ๆๅๅท่ก้ๅบฆ
- ๅ ญ、Runner ๆถๆง:K8s、VM、่ฃธๆฉ็้ธๆ
- ไธ、ๅฎๅ จๆง็ญ็ฅ:Secrets、Variables、ๆฌ้ๆง็ฎก
- ๅ ซ、ๆไฝณ .gitlab-ci.yml ่จญ่จๆจกๅผ
- ไน、FAQ(ๆญ้ JSON-LD)
- ๐ ๅปถไผธ้ฑ่ฎ
ไธ、Stages ่จญ่จ:่ฎ Pipeline ๅๅฟซๅๅฅฝ็ถญ่ญท
ๅปบ่ญฐๆๅธธ็จไธ้็จ็ Stage ๅๅฑคๅฆไธ:
stages:
- prepare
- build
- test
- scan
- package
- deploy
่จญ่จๅๅ:
- Stage ่ฆๆฝ่ฑก(ๅ่ฝๅฑค็ด),Job ่ฆ็ดฐ็ทป(ๆไฝๅฑค็ด)
- ๅ Stage ๅ ง็ Job ๅ จ้จไธฆ่ก,ๆ้ซ้ๅบฆ
- Job ไน้่ฅๆไพ่ณด,ๅฐฑๆๆๆไธๅ Stage
- Deploy ๅชๅจๅฟ ่ฆๅๆฏๅท่ก(Rules ๆงๅถ)
ไบ、Artifacts:่ทจ Stage ๅณ้ๆๆ
Artifacts ๆฏ CI/CD ไธญ「ๆ้่ฆ็ๆฆๅฟตไนไธ」: ็จไพๅจ Stage ่ Stage ไน้ๅณ้「่ผธๅบๆชๆก」。
ไพๅฆ:
- Build ็ขๅบ็ไบ้ฒไฝๆช็ตฆ Test ไฝฟ็จ
- Test ็ขๅบ็ๆธฌ่ฉฆๅ ฑๅ็ตฆๅพ็บ Stage ไฝฟ็จ
- Build package ็ตฆ Deployment ไฝฟ็จ
✔ ๅบๆฌ็ฏไพ
build:
stage: build
script:
- npm run build
artifacts:
paths:
- dist/
expire_in: 1 week
✔ Artifacts ๅๅ
- ไธ่ฆๅฒๅญๅทจ้ๆชๆก(่ถ ้ 1GB)
- ๅชๅญ Deployment ็ๆญฃ้่ฆ็ๆๆ
- expire_in ่จญๅฎไธ่ฆๅคชไน
ไธ、Cache:ๅ ้ไพ่ณด่ Download
Cache ่ Artifacts ๆๅคงๅทฎ็ฐ:
| ๅ่ฝ | Artifacts | Cache |
|---|---|---|
| ่ทจ Stage ๅณๆช | ✔ | ✘ |
| ๅ ้ Pipeline | ✘ | ✔ |
| ๆ่ขซ GitLab ๅฒๅญ | ✔ | ้จๅ(่ฆ่จญๅฎ) |
ๅธธ่ฆ Cache ไฝฟ็จๆ ๅข:
- Node.js:node_modules/
- Python:pip cache
- Go:module cache
- Maven、Gradle build cache
✔ Cache ็ฏไพ
cache:
key: "$CI_COMMIT_REF_SLUG"
paths:
- node_modules/
✔ ๆไฝณๅฏฆๅ
- ไธ่ฆ Cache ๅคชๅคๆชๆก(็ฉบ้็็ธ)
- Cache ่ฆ็จ branch ็บ key,้ฟๅ ไบ็ธ่ฆ่
- ๆญ้ rules:changes,ๅชๅจไพ่ณด่ฎๅๆ้ๆฐๅฎ่ฃ
ๅ、Rules:้ฟๅ Pipeline ไบ่ท、็ฏ็ๆๆฌ
ๅพๅคไบบ็ .gitlab-ci.yml ๆๅคงๅ้ก: ๆนไธๅ README.md,ๆดๅ CI/CD ๅ จ่ท。
ๅปบ่ญฐ้้ rules ๆงๅถ:
✔ ไพ:ๅชๅจ app/ ่ฎๅๆๅท่ก Build
build:
stage: build
script: npm run build
rules:
- changes:
- app/**/*
✔ ไพ:Deploy ๅชๅจ main ๅๆฏๅท่ก
deploy:
stage: deploy
script: ./deploy.sh
rules:
- if: "$CI_COMMIT_BRANCH == 'main'"
✔ CI/CD ๆๆฌ็ไธ 40% ็้้ต:
- changes
- if ๅๆฏๆขไปถ
- exists(ๆชขๆฅๆชๆกๅญๅจๆๅท่ก)
ไบ、Parallel / Matrix:ๆๅ้ๅบฆ(ๅคง้ๆธฌ่ฉฆๆไฝณ่งฃ)
ๆฏๆด่จฑๅค่ช่จ็ๅนณ่กๆธฌ่ฉฆ,ไพๅฆ:
- Python pytest
- Node jest
- Go test
- Java Maven / Gradle
✔ ็จ parallel ๅนณ่ก่ทๆธฌ่ฉฆ
test:
stage: test
script:
- pytest -n $CI_NODE_TOTAL --dist=loadscope
parallel: 4
✔ ็จ matrix ๅๅค็ฐๅขๅปบ็ฝฎ
build:
stage: build
parallel:
matrix:
- NODE_VERSION: ["18", "20"]
ๅ ญ、GitLab Runner ๆถๆง:้ธ Kubernetes?VM?้ๆฏ่ฃธๆฉ?
ๅปบ่ญฐๆถๆงๆฏ่ผ:
| ้กๅ | ๅช้ป | ็ผบ้ป | ้ฉ็จๆ ๅข |
|---|---|---|---|
| Kubernetes Runner | ๅฝๆงๆ้ซ、่ชๅๅปบ็ซ Pod、ๅฏๆฐดๅนณๆดๅ | ๅๅ้ๅบฆ่ผๆ ข | ้ฒ็ฐๅข、ๅคๅ้ๅ ฑไบซ、ๅๆ ่ณๆบ้ๆฑ |
| VM Runner | ็ฉฉๅฎๅฅฝ็ฎก็、้ๅบฆไฝณ | ้่ช่กๆดๅฎน | ไผๆฅญ่ชๅปบ็ฐๅข、ๅบๅฎ่ฆๆจก |
| ่ฃธๆฉ Runner | ้ๅบฆๆๅฟซ、็ก่ๆฌๅ overhead | ็ถญ้ๆๆฌ้ซ | ้ซๆง่ฝ้ๆฑ、AI/ML、ๅคง้็ทจ่ญฏ |
ไธ、ๅฎๅ จๆง็ญ็ฅ:Variables、Protected、Secret
✔ 1. ๆฐธ้ ไธ่ฆๆๅฏ็ขผๅฏซๅจ .gitlab-ci.yml
✔ 2. ไฝฟ็จ protected variables
CI_REGISTRY_TOKEN=xxxx
CI_DEPLOY_USER=xxxx
✔ 3. .gitlab-ci.yml ่ฆ้ฟๅ ๆ็ขผ
- Secrets ๅญ GitLab Variables
- ๆๆ Deploy ๅช่ฝๅจ protected branch ๅท่ก
- ๆธฌ่ฉฆ็ฐๅข่ๆญฃๅผ็ฐๅขๅ้ Variable Scope
ๅ ซ、ๆไฝณ .gitlab-ci.yml ่จญ่จๆจกๅผ(ๅฏ็ดๆฅ่ค็จ)
✔ ๅฎๆดๆจกๆฟ(ๅปบ็ฝฎ → ๆธฌ่ฉฆ → ๆๆ → ้จ็ฝฒ)
stages:
- build
- test
- scan
- deploy
variables:
NODE_ENV: production
cache:
key: "$CI_COMMIT_REF_SLUG"
paths:
- node_modules/
build:
stage: build
script:
- npm ci
- npm run build
artifacts:
paths:
- dist/
test:
stage: test
needs: ["build"]
script:
- npm test -- --ci
scan:
stage: scan
script:
- npm audit --production
deploy:
stage: deploy
rules:
- if: "$CI_COMMIT_BRANCH == 'main'"
script:
- ./deploy.sh
ไน、ๅธธ่ฆๅ้ก FAQ
✔ Artifacts ่ Cache ๅทฎๅจๅช?
Artifacts ็จๆผ่ทจ Stage;Cache ็จๆผๅ ้ Pipeline。
✔ ไป้บผๆๅๆๆณๆ Stage?
็ถๆต็จๅ ๅซๅปบ็ฝฎ、ๆธฌ่ฉฆ、ๆๆ、้จ็ฝฒๆๅฟ ๆ。
✔ ๅฆไฝ่ฎ CI ่ทๆดๅฟซ?
็จ Cache、ๅนณ่กๅท่ก、Rules ๆธๅฐไธๅฟ ่ฆ็ Pipeline。
๐ ๅปถไผธ้ฑ่ฎ
- ๐ ๆดๅค DevOps / GitLab CI/CD ็ณปๅๆ็ซ
- ๐ Nginx ๅๅไปฃ็้ฒ้:Multisite、Rewrite、Caching、Load Balancing ๅ จๆป็ฅ
- ๐ง Linux ๅฎๅ จๆถๆงๆทฑๅบฆ่งฃๆ:SELinux、AppArmor、auditd、Fail2Ban
- ๐ง Linux LVM ่็กฌ็ขๆดๅฎนๅฎๆดๆๅญธ:PV / VG / LV ๆดๅ 、็ธฎๆธ、็ทไธๆดๅฎน
- ๐ง Linux ็ณปๅๅฎๆดๅฐ่ฆฝ็ดขๅผ
— WWFandy・GitLab CI/CD ๅฏฆๆฐ็ญ่จ
ๆฒๆ็่จ:
ๅผต่ฒผ็่จ