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

๐Ÿš€ GitLab CI/CD ้€ฒ้šŽ:Artifacts、Stages、Environment、Blue-Green、Canary ๅฏฆๆˆฐๅฎŒๆ•ดๆŒ‡ๅ—

    ๐Ÿš€ GitLab CI/CD ้€ฒ้šŽ:Artifacts、Stages、Environment、Blue-Green、Canary ๅฏฆๆˆฐๅฎŒๆ•ดๆŒ‡ๅ—

    ๅปถ็บŒๅ…ˆๅ‰็š„ GitLab CI/CD ๅ…ฅ้–€่ˆ‡ Docker ่‡ชๅ‹•้ƒจ็ฝฒ็ฏ‡,ๆœฌ็ฏ‡ๅฐ‡ๆญฃๅผ้€ฒๅ…ฅไผๆฅญ็ดš็š„ CI/CD ๆžถๆง‹,ๆทฑๅ…ฅ่งฃๆž:

    • ๐Ÿ“ฆ Artifacts:ๆง‹ๅปบ็”ข็‰ฉ็ฎก็†(Build → Test → Deploy)
    • ๐Ÿ“š Stages:ๅคš้šŽๆฎต Pipeline ่จญ่จˆ
    • ๐ŸŒ Environment:็’ฐๅขƒๆŽงๅˆถ(Dev / Test / Staging / Prod)
    • ๐Ÿ” Blue-Green Deployment:้›ถๅœๆฉŸ้ƒจ็ฝฒ
    • ๐ŸŸก Canary Deployment:็™พๅˆ†ๆฏ”ๆต้‡้ƒจ็ฝฒ
    • ๐Ÿงช Review Apps:MR ่‡ชๅ‹•ๅปบ็ซ‹ๆšซๆ™‚็’ฐๅขƒ

    ๆญค็ฏ‡ๅฑฌๆ–ผ「ไผๆฅญ็ดš GitLab CI/CD ้€ฒ้šŽๆ•™ๅญธ」,ๅฏ็›ดๆŽฅๆ‡‰็”จๆ–ผไธญๅคงๅž‹้–‹็™ผๅœ˜้šŠ、SaaS、ๅพฎๆœๅ‹™็’ฐๅขƒ。


    ๐Ÿ“Œ ็ฌฌไธ€็ซ :CI/CD ้€ฒ้šŽๆžถๆง‹็ธฝ่ฆฝ

    ไปฅไธ‹ๆ˜ฏไผๆฅญๅธธ็”จ็š„ๅฎŒๆ•ด CI/CD ๆต็จ‹:

    Commit → Lint → Build → Test → Security Scan → Package → Deploy Staging → Deploy Prod
    

    ้€™ไธ‰ๅ€‹่ฆ็ด ๆ˜ฏๆ ธๅฟƒ:

    • ๐Ÿ“ฆ Artifacts — ๅ„้šŽๆฎตๅ…ฑ็”จๅปบ็ฝฎ็”ข็‰ฉ
    • ๐Ÿงฑ Stages — ๆœ‰้ †ๅบ็š„ๅŸท่กŒ้šŽๆฎต
    • ๐ŸŒ Environment — ้ƒจ็ฝฒ็’ฐๅขƒ็ฎก็†

    ๐Ÿ“ฆ ็ฌฌไบŒ็ซ :Artifacts — ๆต็จ‹้–“ๅ‚ณ้ž Build ็ตๆžœ

    CI/CD ๅœจ Build → Test → Deploy ไน‹้–“ๅ‚ณ้žๆช”ๆกˆ,ๅฟ…้ ˆไฝฟ็”จ artifacts。

    2.1 ๅŸบๆœฌ็ฏ„ไพ‹

    build_app:
      stage: build
      script:
        - npm install
        - npm run build
      artifacts:
        paths:
          - dist/
        expire_in: 1 week
    

    2.2 ๅธธ่ฆ‹็”จ้€”

    • ๅ‰็ซฏ dist/
    • ๅพŒ็ซฏ compile ็ตๆžœ
    • terraform plan
    • dockerfile build logs
    Artifacts ๆ˜ฏ่ทจ stage ๆบ้€š็š„ๆœ€ไฝณๆ–นๅผ。

    ๐Ÿ“š ็ฌฌไธ‰็ซ :Stages — ๅคš้šŽๆฎต Pipeline ่จญ่จˆ

    Stages ๅฎš็พฉๆ•ดๅ€‹ Pipeline ๅŸท่กŒ้ †ๅบ。

    3.1 ๅธธ่ฆ‹ Multi-Stage ่จญ่จˆ

    stages:
      - lint
      - build
      - test
      - package
      - staging
      - production
    

    3.2 ๆฏๅ€‹ stage ๅฟ…้ ˆๆˆๅŠŸๆ‰่ƒฝ้€ฒไธ‹ไธ€้šŽๆฎต

    ่‹ฅ test ๅคฑๆ•— → package/staging/production ้ƒฝไธๆœƒๅŸท่กŒ。


    ๐ŸŒ ็ฌฌๅ››็ซ :Environment — ๅคš็’ฐๅขƒ้ƒจ็ฝฒ(Dev/Test/Prod)

    GitLab ๅฏไปฅๅปบ็ซ‹ Environment ไพ›้ƒจ็ฝฒไฝฟ็”จ:

    4.1 ๅŸบๆœฌไพ‹ๅญ

    deploy_staging:
      stage: staging
      environment:
        name: staging
        url: https://staging.example.com
      script:
        - bash deploy.sh staging
    

    4.2 ๅคš็’ฐๅขƒ Variables(ๅผท็ƒˆๆŽจ่–ฆ)

    ๆ–ผ GitLab ่จญ็ฝฎ:

    - STAGING_DB - STAGING_API_KEY - PRODUCTION_DB ๆญ้…:
    environment:
      name: production
    
    GitLab ๆœƒ่‡ชๅ‹•ไฝฟ็”จ่ฉฒ Environment ็š„่ฎŠๆ•ธ,้ฟๅ…ๆ‰‹ๅ‹•่ชฟๆ•ด้Œฏ่ชค。

    ๐Ÿ” ็ฌฌไบ”็ซ :Blue-Green Deployment — ้›ถๅœๆฉŸ้ƒจ็ฝฒ

    Blue-Green ๆฆ‚ๅฟต:ๅปบ็ซ‹ๅ…ฉๅ€‹ Production ็’ฐๅขƒ(Blue ่ˆ‡ Green)。 ๆ›ดๆ–ฐๆ™‚ๅชๆ›ดๆ–ฐๅฆไธ€ๅ€‹็’ฐๅขƒ → ๆธฌ่ฉฆๆˆๅŠŸๅพŒๅˆ‡ๆต้‡。

    5.1 ๅ…ธๅž‹ๆžถๆง‹(Nginx / Load Balancer)

    Blue  ← ๆญฃๅœจๆไพ›ๆœๅ‹™
    Green ← ๆ–ฐ็‰ˆๆœฌๆบ–ๅ‚™ๅฅฝ,็ญ‰ๅพ…ๅˆ‡ๆ›
    

    5.2 GitLab CI ๅฏฆไฝœ

    deploy_blue:
      stage: production
      environment:
        name: blue
      script:
        - docker compose -f docker-compose.blue.yml up -d
    
    deploy_green:
      stage: production
      environment:
        name: green
      script:
        - docker compose -f docker-compose.green.yml up -d
    

    5.3 ๅˆ‡ๆ›ๆต้‡

    switch_traffic:
      stage: production
      script:
        - ln -sf /etc/nginx/sites-enabled/green.conf /etc/nginx/sites-enabled/active.conf
        - nginx -s reload
    

    ้€™ๆ˜ฏๅœจๅคšๆ•ธไผๆฅญๆœ€ๅธธ็”จ็š„่—็ถ ้ƒจ็ฝฒๆจกๅผ。


    ๐ŸŸก ็ฌฌๅ…ญ็ซ :Canary Deployment — ้€ๆญฅๆต้‡้‡‹ๅ‡บ

    Canary Deployment ็›ฎ็š„:ๅ…ˆๅฐ‡ๅฐ‘้ƒจๅˆ†ๆต้‡็ตฆๆ–ฐ็‰ˆๆœฌ。

    6.1 ๆต้‡ๅˆ†้…็ฏ„ไพ‹(Nginx)

    split_clients "${remote_addr}" $upstream {
      10%     "canary";
      *       "stable";
    }
    

    6.2 GitLab CI Canary ่จญๅฎš

    deploy_canary:
      stage: production
      environment:
        name: production
        deployment_tier: canary
      script:
        - bash deploy.sh canary
    

    6.3 Canary → Promote ๆต็จ‹

    promote_to_stable:
      stage: production
      script:
        - bash promote.sh
    

    Canary ้ฉๅˆ API、SaaS ๆœๅ‹™็š„ๆผธ้€ฒๅผๆ›ดๆ–ฐ。


    ๐Ÿงช ็ฌฌไธƒ็ซ :Review Apps(MR ่‡ชๅ‹•็”Ÿๆˆๆธฌ่ฉฆ็’ฐๅขƒ)

    Review Apps ๆฏๆฌก Merge Request ้ƒฝ่‡ชๅ‹•ๅปบ็ซ‹็จ็ซ‹ๆธฌ่ฉฆ็’ฐๅขƒ。

    7.1 ่จญๅฎšๆ–นๅผ

    review_app:
      stage: staging
      environment:
        name: review/$CI_COMMIT_REF_NAME
        url: https://review-$CI_COMMIT_REF_SLUG.example.com
      script:
        - bash deploy_review.sh
      only:
        - merge_requests
    

    7.2 ็•ถ MR ้—œ้–‰ๆ™‚่‡ชๅ‹•ๅˆช้™ค

    environment:
      on_stop: stop_review
    

    ้€™ๆ˜ฏๅคงๅž‹ๅœ˜้šŠๆœ€ๅธธ็”จ็š„ๆต็จ‹。


    ๐Ÿ“Œ ็ฌฌๅ…ซ็ซ :ๅฎŒๆ•ด้€ฒ้šŽ็‰ˆ .gitlab-ci.yml(ๅฏ็›ดๆŽฅ็”จ)

    stages:
      - lint
      - build
      - test
      - package
      - staging
      - canary
      - production
    
    lint:
      stage: lint
      script:
        - npm run lint
    
    build:
      stage: build
      script:
        - npm install
        - npm run build
      artifacts:
        paths:
          - dist/
    
    test:
      stage: test
      script:
        - npm test
    
    package:
      stage: package
      script:
        - docker build -t $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA .
        - docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
    
    deploy_staging:
      stage: staging
      environment:
        name: staging
      script:
        - bash deploy.sh staging
    
    deploy_canary:
      stage: canary
      environment:
        name: production
        deployment_tier: canary
      script:
        - bash deploy.sh canary
      only:
        - main
    
    deploy_production:
      stage: production
      environment:
        name: production
      script:
        - bash deploy.sh stable
      only:
        - main
    

    ๐Ÿ“Œ ็ฌฌไน็ซ :ๆœ€ไฝณๅฏฆๅ‹™(ไผๆฅญไฝฟ็”จๅปบ่ญฐ)

    • ๐Ÿšซ Production ๅผทๅˆถ MR ๆ‰่ƒฝๅˆไฝต(็ฆๆญข็›ดๆŽฅๆŽจ main)
    • ๐Ÿ” ไฝฟ็”จ Protected Variables ็ฎก็†้‡‘้‘ฐ่ˆ‡็’ฐๅขƒ่จญๅฎš
    • ๐Ÿ“ฆ Artifact retention ้œ€ไพๅฐˆๆกˆ่ชฟๆ•ด(้ฟๅ…ไฝ”็ฉบ้–“)
    • ๐Ÿงช Canary + Monitoring(ๅฟ…ๅ‚™็›ฃๆŽง)
    • ๐Ÿ”„ Blue-Green ็”จๆ–ผๅคง็‰ˆๆœฌๆ›ดๆ–ฐ,Canary ็”จๆ–ผ API ๅฐๆ›ดๆ–ฐ

    ๐Ÿ“Œ ็ต่ชž

    ๆœฌ็ฏ‡ๅฎŒๆ•ด่งฃๆž GitLab CI/CD ็š„้€ฒ้šŽ้ƒจ็ฝฒๆฆ‚ๅฟต:Artifacts、Stages、Environment、Blue-Green、Canary、Review Apps。 ้€™ไบ›ๅŠŸ่ƒฝ็ต„ๅˆ่ตทไพ†ๅพŒ,ๅฐ‡่ƒฝๆ”ฏๆ’ๅคงๅž‹็ณป็ตฑ、ๅพฎๆœๅ‹™ๆžถๆง‹ไปฅๅŠๅคš็’ฐๅขƒไฝˆ็ฝฒ็ฎก็ทš,ๆ˜ฏไผๆฅญ้ƒจ็ฝฒไธๅฏๆˆ–็ผบ็š„ DevOps ่ƒฝๅŠ›。

    ไธ‹ไธ€็ฏ‡ๅฐ‡ๆŽจๅ‡บ: 《GitLab Runner ้ซ˜ๆ•ˆ็ฎก็†:Docker Executor、Cache、Scaling Runner、Auto DevOps ๆทฑๅ…ฅ่งฃๆž》


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

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

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

    ๅญ—็ดš