็†ฑ้–€ๅˆ†้กž
 ่ผ‰ๅ…ฅไธญ…
็›ฎ้Œ„

๐Ÿš€ GitLab CI/CD ๅ…ฅ้–€:ๅพž Runner ๅˆฐ Pipeline ๅฏฆๆˆฐ้ƒจ็ฝฒ

    ๐Ÿš€ 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 ่ˆ‡ๅข้›†่จญๅฎš》(ไผๆฅญ็‰ˆ)》


    ๐Ÿ”— ๅˆ†ไบซ้€™็ฏ‡ LINE Facebook X

    ๆฒ’ๆœ‰็•™่จ€:

    ๅผต่ฒผ็•™่จ€

    ๅญ—็ดš