Webdriverio: Jenkins์—์„œ ํ…Œ์ŠคํŠธ๋ฅผ ์‹œ์ž‘ํ•  ๋•Œ ESOCKETTIMEDOUT

์— ๋งŒ๋“  2018๋…„ 04์›” 05์ผ  ยท  4์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: webdriverio/webdriverio

๋ฌธ์ œ

Jenkins์—์„œ ์—ฌ๋Ÿฌ ๋ฒˆ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋กœ์ปฌ ์ปดํ“จํ„ฐ์—์„œ ํ…Œ์ŠคํŠธ๋ฅผ ์—ฌ๋Ÿฌ ๋ฒˆ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ํ•ญ์ƒ ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜์ง€๋งŒ Jenkins์—์„œ ESOCKETTIMEDOUT ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

ํ™˜๊ฒฝ

  • WebdriverIO ๋ฒ„์ „: 4.10.1์—์„œ ๋ฐœ์ƒํ–ˆ์œผ๋ฉฐ 4.12.0์œผ๋กœ ์—…๋ฐ์ดํŠธ๋จ
  • Node.js ๋ฒ„์ „: 8.9.1
  • ๋…๋ฆฝ ์‹คํ–‰ํ˜• ๋ชจ๋“œ ๋˜๋Š” wdio ํ…Œ์ŠคํŠธ ์‹คํ–‰๊ธฐ: ๋…๋ฆฝ ์‹คํ–‰ํ˜•
  • wdio ํ…Œ์ŠคํŠธ ๋Ÿฌ๋„ˆ์ธ ๊ฒฝ์šฐ ๋™๊ธฐ ๋˜๋Š” ๋น„๋™๊ธฐ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฒฝ์šฐ: sync
  • ์ถ”๊ฐ€ wdio ํŒจํ‚ค์ง€ ์‚ฌ์šฉ(ํ•ด๋‹น๋˜๋Š” ๊ฒฝ์šฐ): ๋‚˜๋Š” ์˜ค์ด-๋ณด์ผ๋Ÿฌ ํ”Œ๋ ˆ์ดํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์„ธ๋ถ€

์ด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ๋ณต๊ตฌํ•  ์ˆ˜ ์—†๋‹ค๋Š” ์ ์„ ์–ธ๊ธ‰ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค(Jenkins์—์„œ ์ž‘์—…์„ ๋ฐ˜๋ณตํ•ด์„œ ์‹คํ–‰ํ•˜๋ฉด ํ•ญ์ƒ ๋™์ผํ•œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•จ). ํ•˜์ง€๋งŒ ์˜ค๋ฅ˜ ์—†์ด 2-3๋ฒˆ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค(๊ทธ๋ž˜์„œ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ์„ ๋ณด์•˜์Šต๋‹ˆ๋‹ค).
ํ…Œ์ŠคํŠธ๋Š” Chrome์—์„œ ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค. Jenkins ์Šฌ๋ ˆ์ด๋ธŒ๋Š” MacMini์ž…๋‹ˆ๋‹ค. ์…€๋ ˆ๋Š„ ํ˜ธ์ŠคํŠธ ๋ฐ ํฌํŠธ๋ฅผ ์ œ๊ณตํ•ด๋„ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

Selenium/WebdriverIO ๋กœ๊ทธ์— ๋Œ€ํ•œ ๋งํฌ

์ž์„ธํ•œ ๋กœ๊ทธ ์ˆ˜์ค€์˜ Jenkins ์˜ค๋ฅ˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

+ yarn run local-webserver
yarn run v1.3.2
$ forever start -s ./node_modules/.bin/http-server ./demo-app -s
warn:    --minUptime not set. Defaulting to: 1000ms
warn:    --spinSleepTime not set. Your script will exit if it does not stay up for at least 1000ms
info:    Forever processing file: ./node_modules/.bin/http-server
Done in 0.44s.
+ yarn run wdio
yarn run v1.3.2
$ /Users/jenkins/workspace/family-portal-deploy-test/e2etests/node_modules/.bin/wdio
[18:48:07]  COMMAND POST     "/wd/hub/session"
[18:48:07]  DATA        {"desiredCapabilities":{"javascriptEnabled":true,"locationContextEnabled":true,"handlesAlerts":true,"rotatable":true,"maxInstances":5,"browserName":"chrome","loggingPrefs":{"browser":"ALL","driver":"ALL"},"requestOrigins":{"url":"http://webdriver.io","version":"4.12.0","name":"webdriverio"}}}
ERROR: ESOCKETTIMEDOUT
chrome
    at new RuntimeError (/Users/jenkins/workspace/family-portal-deploy-test/e2etests/node_modules/webdriverio/build/lib/utils/ErrorHandler.js:144:12)
    at Request._callback (/Users/jenkins/workspace/family-portal-deploy-test/e2etests/node_modules/webdriverio/build/lib/utils/RequestHandler.js:330:43)
    at self.callback (/Users/jenkins/workspace/family-portal-deploy-test/e2etests/node_modules/request/request.js:186:22)
    at emitOne (events.js:116:13)
    at Request.emit (events.js:211:7)
    at ClientRequest.<anonymous> (/Users/jenkins/workspace/family-portal-deploy-test/e2etests/node_modules/request/request.js:816:16)
    at Object.onceWrapper (events.js:313:30)
    at emitNone (events.js:106:13)
    at ClientRequest.emit (events.js:208:7)
    at Socket.emitTimeout (_http_client.js:708:34)
    at Object.onceWrapper (events.js:313:30)
    at emitNone (events.js:106:13)
    at Socket.emit (events.js:208:7)
    at Socket._onTimeout (net.js:407:8)
    at ontimeout (timers.js:475:11)
    at tryOnTimeout (timers.js:310:5)

error Command failed with exit code 1.

๋ฌธ์ œ๋ฅผ ์žฌํ˜„ํ•˜๋Š” ์ฝ”๋“œ

Jenkins์˜ ์ž‘์—…์€ ๋งค์šฐ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค.

  • ํŠน์ • ๋””๋ ‰ํ† ๋ฆฌ๋กœ ์ด๋™
  • ๋…ธ๋“œ ๋ฒ„์ „ ์„ค์ •
  • ์›์‚ฌ ์„ค์น˜
  • ๋‹ค์Œ์„ ์‚ฌ์šฉํ•˜์—ฌ ํ…Œ์ŠคํŠธ ์‹œ์ž‘: yarn run wdio

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

๊ฐ™์€ ๋ฌธ์ œ๋ฅผ ๊ฒช์„ ์ˆ˜ ์žˆ๋Š” ์‚ฌ๋žŒ๋“ค์„ ์œ„ํ•ด ํ—ค๋“œ๋ฆฌ์Šค ํฌ๋กฌ์„ ์‚ฌ์šฉํ•ด ๋ณด์•˜๋Š”๋ฐ ๋ฉฐ์น  ์ „๋ถ€ํ„ฐ ์ž˜ ์ž‘๋™ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. D ๋”ฐ๋ผ์„œ "ํ—ค๋“œ๋ฆฌ์Šค" chromeOption์„ ๊ธฐ๋Šฅ์— ์ถ”๊ฐ€ํ•˜๊ณ  ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.

๋ชจ๋“  4 ๋Œ“๊ธ€

WebdriverIO๊ฐ€ WebDriver ๋ฐฑ์—”๋“œ(์•„๋งˆ๋„ Chromedriver)์— ์—ฐ๊ฒฐํ•  ์ˆ˜ ์—†๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์ด์œ  ๋•Œ๋ฌธ์ผ ์ˆ˜ ์žˆ์ง€๋งŒ WebdriverIO์™€ ๊ด€๋ จ์ด ์žˆ์„ ๊ฐ€๋Šฅ์„ฑ์€ ๋‚ฎ์Šต๋‹ˆ๋‹ค. ๋“œ๋ผ์ด๋ฒ„ ์„ค์ •์— ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋™์‹œ์— ๋งŽ์€ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ? WebdriverIO์—์„œ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์šฐ๋ฆฌ๊ฐ€ ํ•  ์ˆ˜ ์žˆ๋Š” ์ผ์€ ์—†์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ด๊ฒƒ์„ ๋‹ซ์Šต๋‹ˆ๋‹ค. ์–ธ์ œ๋“ ์ง€ ์ง€์›์— ๋ฌธ์˜ํ•˜์„ธ์š”.Gitter ์ถ”๊ฐ€ ์งˆ๋ฌธ์ด ์žˆ๋Š” ๊ฒฝ์šฐ.

์•ˆ๋…•ํ•˜์„ธ์š” @christian-bromann ๋น ๋ฅธ ์‘๋‹ต์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

๋‚˜๋Š” ํ•˜๋‚˜์˜ ํ…Œ์ŠคํŠธ(ํ•˜๋‚˜์˜ ๊ธฐ๋Šฅ), ๋กœ๊ทธ์ธ๋งŒ ์‹คํ–‰ํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ฑฑ์ •๋ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ์–ธ๊ธ‰ํ•œ ๋ฐ”์™€ ๊ฐ™์ด Jenkins์—์„œ 2-3๋ฒˆ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์—ˆ์ง€๋งŒ ์‹คํŒจํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค(ํ•ญ์ƒ ๋™์ผํ•œ ์˜ค๋ฅ˜๋กœ ). ํ…Œ์ŠคํŠธ๊ฐ€ ๋๋‚ฌ์„ ๋•Œ ์…€๋ ˆ๋Š„/์›น๋“œ๋ผ์ด๋ฒ„์˜ ์—ฐ๊ฒฐ์ด ์ž˜ ๋Š์–ด์ง€๊ฑฐ๋‚˜ ๋‹ซํžˆ์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ์ด์ „ ์‹คํ–‰์—์„œ ์—ด๋ฆฐ ์—ฐ๊ฒฐ์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๋‹ค๋ฅธ ์›น์„ ํ…Œ์ŠคํŠธํ•˜๋ฉด์„œ ๋‹ค๋ฅธ ๋‹ค๋ฅธ ํ…Œ์ŠคํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ณ  Jenkins์—์„œ ์ƒˆ ์ž‘์—…์„ ๊ตฌ์„ฑํ–ˆ์œผ๋ฉฐ ๋™์ผํ•œ ๋ฌธ์ œ๋ฅผ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ ํ…Œ์ŠคํŠธ๋Š” ์ž˜ ์ž‘๋™ํ•˜๊ณ  ESOCKETTIMEDOUT๊ณผ ํ•จ๊ป˜ ์‹คํŒจํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์‹œ ๋งํ•˜์ง€๋งŒ, ๋ฌธ์ œ ์—†์ด ์—ฌ๋Ÿฌ ๋ฒˆ ๋กœ์ปฌ์—์„œ ํ•ด๋‹น ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐ™์€ ๋ฌธ์ œ๋ฅผ ๊ฒช์„ ์ˆ˜ ์žˆ๋Š” ์‚ฌ๋žŒ๋“ค์„ ์œ„ํ•ด ํ—ค๋“œ๋ฆฌ์Šค ํฌ๋กฌ์„ ์‚ฌ์šฉํ•ด ๋ณด์•˜๋Š”๋ฐ ๋ฉฐ์น  ์ „๋ถ€ํ„ฐ ์ž˜ ์ž‘๋™ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. D ๋”ฐ๋ผ์„œ "ํ—ค๋“œ๋ฆฌ์Šค" chromeOption์„ ๊ธฐ๋Šฅ์— ์ถ”๊ฐ€ํ•˜๊ณ  ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.

์•ˆ๋…•ํ•˜์„ธ์š” @LaiaPR , ์˜ค๋Š˜ ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ์ œ์•ˆํ•œ ๋Œ€๋กœ "ํ—ค๋“œ๋ฆฌ์Šค" ์˜ต์…˜์„ ์ถ”๊ฐ€ํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋ฉ๋‹ˆ๋‹ค. ๊ฐ์‚ฌ ํ•ด์š”!

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰