๐Ÿš€ CI/CD ํ™˜๊ฒฝ์—์„œ Playwright ๋ฌธ์ œ ํ•ด๊ฒฐํ•˜๊ธฐ: ์„ค์น˜ ์˜ค๋ฅ˜ ๋ถ„์„ ๋ฐ ํ•ด๊ฒฐ ๋ฐฉ์•ˆ

@leekh8 ยท August 26, 2024 ยท 3 min read

Code N Solve ๐Ÿ“˜: CI/CD ํ™˜๊ฒฝ์—์„œ Playwright ๋ฌธ์ œ ํ•ด๊ฒฐํ•˜๊ธฐ: ์„ค์น˜ ์˜ค๋ฅ˜ ๋ถ„์„ ๋ฐ ํ•ด๊ฒฐ ๋ฐฉ์•ˆ

Gatsby๋ฅผ ์‚ฌ์šฉํ•ด ๋ธ”๋กœ๊ทธ๋ฅผ ๋ฐฐํฌํ•  ๋•Œ, Playwright ์„ค์น˜์™€ ๊ด€๋ จํ•ด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค.

์–ด๋–ป๊ฒŒ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ๋Š”์ง€ ๋‹จ๊ณ„๋ณ„๋กœ ์‚ดํŽด๋ณด์ž.

๋ฌธ์ œ

  • ๋กœ์ปฌ ํ™˜๊ฒฝ์—์„œ๋Š” ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ํ•˜๋Š” Gatsby ๋ธ”๋กœ๊ทธ๊ฐ€ CI/CD ํŒŒ์ดํ”„๋ผ์ธ์—์„œ Playwright ๋ธŒ๋ผ์šฐ์ € ์„ค์น˜ ์˜ค๋ฅ˜๋กœ ์ธํ•œ ๋นŒ๋“œ ์‹คํŒจ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค.
  • ํŠนํžˆ, Playwright ์„ค์น˜ ํ›„, ๋ธŒ๋ผ์šฐ์ € ์‹คํ–‰ํ•  ๋•Œ ๊ฒฝ๋กœ๊ฐ€ ์ œ๋Œ€๋กœ ์„ค์ •๋˜์ง€ ์•Š์•„ ๋ฐœ์ƒํ•˜์˜€๋‹ค.1
  •   Error: Failed to launch chromium because executable doesnโ€™t exist
    
      browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium-1124/chrome-linux/chrome
    
      Error:browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-  playwright/chromium-1124/chrome-linux/chrome

Playwright2 ? ๐Ÿค”

  • ์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ž๋™์œผ๋กœ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ๋Š” ๋„๊ตฌ๋กœ ์—ฌ๋Ÿฌ ๋ธŒ๋ผ์šฐ์ €(Chromium, Firefox, WebKit ๋“ฑ)์—์„œ ์›น ํŽ˜์ด์ง€์˜ ๊ธฐ๋Šฅ์„ ํ…Œ์ŠคํŠธ ํ•  ์ˆ˜ ์žˆ๋‹ค.

Playwright ์‚ฌ์šฉ ๋ชฉ์ 

  • CI/CD ํŒŒ์ดํ”„๋ผ์ธ์—์„œ ์ž๋™ํ™”๋œ ๋ธŒ๋ผ์šฐ์ € ํ…Œ์ŠคํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด Playwright๋ฅผ ์„ค์น˜ํ•˜๊ณ ์ž ํ•˜์˜€๋‹ค.
  • ์ด๋ฅผ ํ†ตํ•ด ์ฝ”๋“œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์‹ค์ œ ๋ธŒ๋ผ์šฐ์ € ํ™˜๊ฒฝ์—์„œ ์ž˜ ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ๊ณ , ์ด๋กœ ์ธํ•œ ์ž ์žฌ์ ์ธ ๋ฌธ์ œ๋ฅผ ๋ฏธ๋ฆฌ ๋ฐœ๊ฒฌํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ๊ฒฐ๋ก : ๋ธŒ๋ผ์šฐ์ € ํ™˜๊ฒฝ์—์„œ์˜ ์ž๋™ํ™”๋œ ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด ์‚ฌ์šฉ.

CI/CD ์„ค์ •

  • npm ci (๋˜๋Š” yarn install)๋กœ ํ•„์š”ํ•œ ์˜์กด์„ฑ์„ ์„ค์น˜ํ•œ ํ›„, npx playwright isntall ๋ช…๋ น์–ด๋กœ Playwright ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์„ค์น˜ํ•˜์˜€๋‹ค.3

  •  - name: Install Dependencies
        run: npm ci
    
      - name: Install Playwright Browsers
        run: npx playwright install
    • npm ci4
      • CI/CD ํŒŒ์ดํ”„๋ผ์ธ์—์„œ Node.js ํ”„๋กœ์ ํŠธ์˜package-lock.json ํŒŒ์ผ์— ๊ธฐ๋ก๋œ ์ •ํ™•ํ•œ ๋ฒ„์ „์˜ ๋ชจ๋“  ์ข…์†์„ฑ์„ ์„ค์น˜ํ•˜๋Š” ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.
      • ํ”„๋กœ์ ํŠธ์˜ ์˜์กด์„ฑ์„ ์ผ๊ด€๋˜๊ฒŒ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์ค‘์š”
    • npm ci VS npm install5 ?
      • npm ci๋Š” npm install๊ณผ ๋น„์Šทํ•˜์ง€๋งŒ, CI ํ™˜๊ฒฝ์— ํŠนํ™”๋œ ๋ช‡๊ฐ€์ง€ ์ฐจ์ด์ ์ด ์žˆ๋‹ค.
        • package-lock.json ํŒŒ์ผ์— ์ •ํ™•ํžˆ ๋งž๋Š” ๋ฒ„์ „์˜ ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•˜๋ฉฐ, node_modules ํด๋”๋ฅผ ๋จผ์ € ์‚ญ์ œํ•œ ํ›„ ์„ค์น˜๋ฅผ ์ง„ํ–‰ํ•œ๋‹ค.
          • ๋”ฐ๋ผ์„œ ์ถ”๊ฐ€์ ์ธ ๊ณ„์‚ฐ ์—†์ด ๋ฐ”๋กœ ์„ค์น˜๋ฅผ ์ง„ํ–‰ํ•˜๋ฏ€๋กœ npm install์— ๋น„ํ•ด ์ข…์†์„ฑ ์„ค์น˜ ์†๋„๊ฐ€ ๋น ๋ฅด๋‹ค.
        • npm install์€ package.json ํŒŒ์ผ์— ์ •์˜๋œ ์ข…์†์„ฑ์„ ๊ธฐ๋ฐ˜์œผ๋กœ node_modules ํด๋”์— ์„ค์น˜ํ•˜๋ฉฐ ์ด ๊ณผ์ •์—์„œ package-lock.json ํŒŒ์ผ๋„ ์ฐธ๊ณ ํ•˜์—ฌ ๊ฐ€๋Šฅํ•œ ํ•œ ๋™์ผํ•œ ๋ฒ„์ „์˜ ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•˜๋ ค๊ณ  ํ•œ๋‹ค.
          • ๋˜, ํ•„์š”์‹œ package-lock.json ์„ ์—…๋ฐ์ดํŠธํ•œ๋‹ค.
        • package.json๊ณผ package-lock.json ํŒŒ์ผ์ด ์ผ์น˜ํ•˜์ง€ ์•Š์œผ๋ฉด ์‹คํŒจํ•˜๋ฏ€๋กœ ๋กœ์ปฌ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ๊ณผ CI ํ™˜๊ฒฝ๊ฐ„์˜ ์˜์กด์„ฑ ์ผ๊ด€์„ฑ์„ ๋ณด์žฅํ•œ๋‹ค.

๋ฌธ์ œ ๋ถ„์„

  • ๊ถŒํ•œ ๋ฌธ์ œ
    • Playwright ๋ธŒ๋ผ์šฐ์ € ์„ค์น˜ ์ค‘ ๊ถŒํ•œ์ด ๊ฑฐ๋ถ€๋˜์–ด sudo npx playwright install์„ ์‹œ๋„ํ–ˆ์œผ๋‚˜ ์—ฌ์ „ํžˆ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์˜€๋‹ค.
  • ์„ค์น˜ ๊ฒฝ๋กœ ๋ฌธ์ œ
    • Playwright์˜ ๊ธฐ๋ณธ ์„ค์น˜ ๊ฒฝ๋กœ์— ๋Œ€ํ•œ ๊ถŒํ•œ ๋ฌธ์ œ๋กœ ์ธํ•ด ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์„ค์น˜๋˜์ง€ ์•Š์•˜๊ฑฐ๋‚˜, ์„ค์น˜๋œ ์œ„์น˜์—์„œ ์‹คํ–‰๋˜์ง€ ์•Š๋Š” ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์˜€๋‹ค.

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

  • ์„ค์น˜ ๊ฒฝ๋กœ ์ˆ˜์ •
    • Playwright ๋ธŒ๋ผ์šฐ์ €์˜ ์„ค์น˜ ๊ฒฝ๋กœ๋ฅผ $HOME/.cache/ms-playwright๋กœ ๋ณ€๊ฒฝํ•˜๊ณ , ์ด ๊ฒฝ๋กœ๋ฅผ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋กœ ์„ค์ •ํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ๋‹ค.
  • ์บ์‹œ ๋ฌดํšจํ™”
    • ์†์ƒ๋˜์—ˆ๊ฑฐ๋‚˜ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋Š” ์บ์‹œ๋ฅผ ๋ฌดํšจํ™”ํ•˜๊ณ , ์ƒˆ๋กœ์šด ์บ์‹œ๋ฅผ ์ƒ์„ฑํ•˜๋„๋ก ๋นŒ๋“œ๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.
  • ์„ค์น˜ ๊ฒฝ๋กœ ๊ฒ€์ฆ
    • ์„ค์น˜ ํ›„ ํ•ด๋‹น ๊ฒฝ๋กœ์— ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ œ๋Œ€๋กœ ์„ค์น˜๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ์ ˆ์ฐจ๋ฅผ ์ถ”๊ฐ€ํ–ˆ๋‹ค.

CI/CD ํŒŒ์ดํ”„๋ผ์ธ์—์„œ์˜ Playwright ์„ค์ •

  • CI ํŒŒ์ดํ”„๋ผ์ธ

    • Playwright ๋ธŒ๋ผ์šฐ์ €๋ฅผ $HOME/.cache/ms-playwright ๊ฒฝ๋กœ์— ์„ค์น˜ํ•˜๊ณ  ์ด ๊ฒฝ๋กœ๋ฅผ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋กœ ์„ค์ •ํ•˜์—ฌ ๋นŒ๋“œ ๊ณผ์ •์—์„œ ํ™œ์šฉํ•˜์˜€๋‹ค.
    • - name: Set Playwright Browsers Path
        run: echo "PLAYWRIGHT_BROWSERS_PATH=$HOME/.cache/ms-playwright" >> $GITHUB_ENV
      
      - name: Check Playwright Browsers Path
        run: echo "Playwright Browsers Path ---> ${{ env.PLAYWRIGHT_BROWSERS_PATH }}"
      
      - name: Install Playwright Browsers
        run: npx playwright install
  • CD ํŒŒ์ดํ”„๋ผ์ธ

    • CI์—์„œ ์„ค์น˜๋œ ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์žฌ์‚ฌ์šฉํ•˜๋ ค ํ–ˆ์œผ๋‚˜, GitHub Actions ํ™˜๊ฒฝ์—์„œ CI์˜ ์บ์‹œ๊ฐ€ CD๋กœ ์ด์–ด์ง€์ง€ ์•Š์œผ๋ฏ€๋กœ CD์—์„œ๋„ ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์„ค์น˜ํ•˜๋Š” ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•ด์•ผ ํ–ˆ๋‹ค.
  • ํšจ์œจ์ ์ธ ์„ค์ •

    • Playwright ๋ธŒ๋ผ์šฐ์ € ์„ค์น˜ ํ›„ ์„ค์น˜ ๊ฒฝ๋กœ๋ฅผ ํ™•์ธํ•˜๋Š” ๋‹จ๊ณ„๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ๋ฌธ์ œ ๋ฐœ์ƒ ์—ฌ๋ถ€๋ฅผ ์‚ฌ์ „์— ํŒŒ์•…ํ•˜๊ณ , ์„ค์น˜๋œ ํŒŒ์ผ์˜ ์ •ํ™•์„ฑ์„ ๊ฒ€์ฆํ•˜์˜€๋‹ค.

๊ฒฐ๋ก 

  • Playwright ์„ค์น˜ ๋ฌธ์ œ
    • CI/CD ํ™˜๊ฒฝ์—์„œ ๋ฐœ์ƒํ•˜๋Š” Playwright ๋ธŒ๋ผ์šฐ์ € ์„ค์น˜ ๋ฌธ์ œ๋Š” ๊ถŒํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์„ค์น˜ ๊ฒฝ๋กœ๋ฅผ ์ˆ˜์ •ํ•˜๊ณ , ์บ์‹œ ๋ฌดํšจํ™” ๋ฐ ์„ค์น˜ ๊ฒฝ๋กœ ๊ฒ€์ฆ ์ ˆ์ฐจ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ํšจ์œจ์ ์ธ ๋นŒ๋“œ
    • ์ด๋Ÿฌํ•œ ์ ‘๊ทผ๋ฒ•์„ ํ†ตํ•ด ๋กœ์ปฌ ํ™˜๊ฒฝ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, CI/CD ํ™˜๊ฒฝ์—์„œ๋„ ์•ˆ์ •์ ์ธ ๋นŒ๋“œ๋ฅผ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค.
@leekh8
Hello :)