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

๐Ÿ™ GitLab CI/CD ๆœ€ไฝณๅฏฆๅ‹™(้€ฒ้šŽ็ฏ‡):Artifacts、Cache、Stages、่ˆ‡ๅฎ‰ๅ…จๆ€ง็ญ–็•ฅ

    ๐Ÿ™ 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 ๅˆๅฟซๅˆๅฅฝ็ถญ่ญท

    ๅปบ่ญฐๆœ€ๅธธ็”จไธ”้€š็”จ็š„ 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 ๆœ€ๅคงๅทฎ็•ฐ:

    ๅŠŸ่ƒฝArtifactsCache
    ่ทจ 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。


    — WWFandy・GitLab CI/CD ๅฏฆๆˆฐ็ญ†่จ˜

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

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

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

    ๅญ—็ดš