๐ GitLab CI/CD ๅ ฅ้:ๅพ Runner ๅฐ Pipeline ๅฏฆๆฐ้จ็ฝฒ
GitLab CI/CD ๆฏ็ฎๅๆๅฎๆด、ๆๆไธๆ็่ชๅๅ้จ็ฝฒๅทฅๅ
ทไนไธ。ๅช่ฆๅจๅฐๆกไธญๅ ๅ
ฅ .gitlab-ci.yml,ๅฐฑ่ฝ่ฎ็จๅผ็ขผ่ชๅ็ทจ่ญฏ、ๆธฌ่ฉฆไธฆ้จ็ฝฒ。
ๆฌ็ฏๅพ้ถ้ๅง,ๅธถไฝ ๅพ Runner ่จญๅฎ、Pipeline ๆฆๅฟต,ๅฐๅฏฆ้้จ็ฝฒๆกไพ,ไธๆฌกๆๆกๅฎๆดๆต็จ。
๐ ็ฌฌไธ็ซ :ไป้บผๆฏ GitLab CI/CD?
CI/CD ๆฏ็พไปฃ DevOps ็ๅบ็ค,็ฑไธ้จๅ็ตๆ:
- CI(ๆ็บๆดๅ):่ชๅ็ทจ่ญฏ、ๆธฌ่ฉฆ、Lint ๆชขๆฅ
- CD(ๆ็บ้จ็ฝฒ/ไบคไป):่ชๅไฝ็ฝฒๅฐๆธฌ่ฉฆ็ฐๅขๆๆญฃๅผ็ฐๅข
- Pipeline:็ฑๅคๅ Job ็ตๆ็่ชๅๅๆต็จ
ๆดๅๆต็จ็ฑ GitLab Runner ๅท่ก,ๅ ๆญค Runner ๆฏ็ณป็ตฑ็ๆ ธๅฟ。
๐ ็ฌฌไบ็ซ :GitLab Runner ไป็ดน่ๅฎ่ฃ
2.1 Runner ้กๅ
| Runner ้กๅ | ้ฉ็จๆ ๅข |
|---|---|
| Shell Runner | ็ฐกๅฎ็ฐๅข、ๆธฌ่ฉฆ็จ、่ฃธๆฉๅท่ก |
| Docker Runner | ๆๅธธ็จ、้้ขๆงไฝณ、ๅฏไฝฟ็จไธๅ Base Image |
| Kubernetes Runner | ๅคงๅ็ณป็ตฑ、้ฒ็ซฏๅพฎๆๅ、Pod ๅๆ ๅปบ็ซ |
2.2 Linux ๅฎ่ฃ Runner(ๅฎๆนๆนๅผ)
# Debian / Ubuntu
curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh | sudo bash
sudo apt install gitlab-runner -y
2.3 ่จปๅ Runner
้ฒๅ ฅ GitLab → CI/CD → Runners → Register a runner ๅๅพ token ๅพ,ๅจๆฉๅจไธๅท่ก:
sudo gitlab-runner register
# ่ผธๅ
ฅ GitLab URL
# ่ผธๅ
ฅ Token
# ้ธๆ runner executor (shell / docker)
2.4 Docker Runner(ๅปบ่ญฐไฝฟ็จ)
sudo gitlab-runner register \
--executor docker \
--docker-image "python:3.11" \
--description "docker-runner"
ไพๅฆ่ฆ็จ NodeJS、Go、Java,ๅช้่ฆๆดๆ Base Image。
๐ ็ฌฌไธ็ซ :Pipeline ่ Job ๅบ็ค
GitLab CI/CD ่จญๅฎๆช็บๅฐๆกๆ น็ฎ้็ .gitlab-ci.yml。
3.1 ๆ็ฐกๅฎ็ Pipeline
stages:
- test
test_job:
stage: test
script:
- echo "Pipeline is working!"
ๆไบคๅพ GitLab ๆ่ชๅ่งธ็ผ Pipeline。
3.2 ๅ ๅ ฅๅค้ๆฎตๆต็จ
stages:
- build
- test
- deploy
build:
stage: build
script:
- npm install
- npm run build
test:
stage: test
script:
- npm test
deploy:
stage: deploy
script:
- bash deploy.sh
้ๅฐฑๆฏๅฎๆด CI/CD ๅ
ธๅๆต็จ(ไธ้ๆฎต)。
๐ ็ฌฌๅ็ซ :ๅฏฆๆฐๆกไพ(Docker + GitLab Runner)
4.1 ่ชๅๅปบ็ฝฎ Docker Image
stages:
- build
- push
variables:
IMAGE_NAME: registry.example.com/project/app
docker_build:
stage: build
image: docker:stable
services:
- docker:dind
script:
- docker build -t $IMAGE_NAME:$CI_COMMIT_SHORT_SHA .
4.2 ๆจ้ Image ่ณ GitLab Registry
docker_push:
stage: push
image: docker:stable
services:
- docker:dind
script:
- echo "$CI_REGISTRY_PASSWORD" | docker login -u "$CI_REGISTRY_USER" --password-stdin $CI_REGISTRY
- docker push $IMAGE_NAME:$CI_COMMIT_SHORT_SHA
4.3 ๅจ้ ็ซฏไธปๆฉ่ชๅ้จ็ฝฒ
deploy_prod:
stage: deploy
script:
- ssh root@10.10.10.11 "docker pull $IMAGE_NAME:$CI_COMMIT_SHORT_SHA && docker compose up -d"
only:
- main
๐ ็ฌฌไบ็ซ :่ชๅ้จ็ฝฒ Linux ๆๅ(Nginx / Python / NodeJS)
Python App ่ชๅ้จ็ฝฒ:
deploy_python:
stage: deploy
script:
- ssh root@server "cd /srv/app && git pull && systemctl restart app.service"
NodeJS ่ชๅ้จ็ฝฒ:
deploy_node:
stage: deploy
script:
- ssh root@server "pm2 reload app"
Nginx Reload:
deploy_nginx:
stage: deploy
script:
- ssh root@server "nginx -t && systemctl reload nginx"
๐ ็ฌฌๅ ญ็ซ :ๆไฝณๅฏฆๅ
- ๐ ไฝฟ็จ Masked Variables ไฟๅญๅฏ็ขผ่ Token
- ๐ณ ๅปบ่ญฐไฝฟ็จ Docker Runner ไปฅ้้ขๅท่ก็ฐๅข
- ๐ฆ ไฝฟ็จ artifacts ไฟๅญ build ็ตๆ(ไพๅฆ build/)
- ๐ค ้จ็ฝฒ้ๆฎตๅชๅ ่จฑ main / production branch
- ๐️ ่จๅพๆธ ็่ Pipeline artifacts ่่ Runner logs
๐ ็ฌฌไธ็ซ :ๅฎๆดๅฐๆก็ตๆง(ๅฏไธ GitHub)
project/
├── .gitlab-ci.yml
├── src/
├── docker/
├── deploy/
│ ├── deploy.sh
│ └── docker-compose.yml
└── docs/
๐ ็ต่ช
GitLab CI/CD ๆฏๅผทๅคง็ DevOps ๅทฅๅ ท,ๅช่ฆๆๆก Runner、Pipeline Stages、Variables ไปฅๅ่ชๅ้จ็ฝฒๆต็จ,ๅฐฑ่ฝๅฎๆดไธฒ่ตทไฝ ็้็ผ่็ผไฝ็ๅฝ้ฑๆ。 ๆฌ็ฏๅ ฅ้ๆ็ซ ๅทฒ่ถณไปฅ่ฎไฝ ๅปบ็ซ CI/CD MVP ๆต็จ,ๅพ็บไฝ ไน่ฝๅ ๅ ฅ Unit Test、Code Quality、Canary Deployment ็ญๆด้ฒ้็ๅ่ฝ。
ไธไธ็ฏๅฐๆจๅบ: 《GitLab + Proxmox:ๅพ CI/CD ่ชๅ้จ็ฝฒ VM、LXC ่ๅข้่จญๅฎ》(ไผๆฅญ็)》
ๆฒๆ็่จ:
ๅผต่ฒผ็่จ