๊ธฐ๋ฅ ์ ์์ฒญํ๊ฑฐ๋ ๋ฒ๊ทธ๋ฅผ๋ณด๊ณ ํ์๊ฒ ์ต๋๊น?
๊ณค์ถฉ
ํ์ฌ ํ๋์ ๋ฌด์์
๋๊น?
์๋ก์ด ์์ ์บ์ ์ฐ๊ธฐ์ ๋ณ๋ ฌ๋ก ํ
์คํธ๋ฅผ ์คํํ ๋ ์ฌ๋ฌ ํ๋ก์ธ์ค๊ฐ ๋์ผํ ํ์ผ์ ์ฐ๊ธฐ๋ฅผ ์๋ ํ ๋ ์ด๋ฆ ๋ฐ๊พธ๊ธฐ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค. --no-cache
์ต์
์ ์ค์ ํด๋ ์ฌ์ ํ ํ์ผ์ ์ฐ๊ธฐ๋ฅผ ์๋ํ๊ณ ์๊ธฐ ๋๋ฌธ์ ์ด๋ฆ ๋ฐ๊พธ๊ธฐ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
์์๋๋ ๋์์ ๋ฌด์์ ๋๊น?
--no-cache
์บ์ ํ์ผ์ ์ฐ๋ฉด ์๋๋ค๊ณ ์๊ฐํฉ๋๋ค์ ํํ Jest ๊ตฌ์ฑ์ ์ ๊ณตํ๊ณ Jest, ๋ ธ๋, yarn / npm ๋ฒ์ ๋ฐ ์ด์ ์ฒด์ ๋ฅผ ์ธ๊ธํ์ญ์์ค.
{
"clearMocks": true,
"collectCoverageFrom": [
"packages/**/src/**/*.{ts,tsx}",
"!packages/sf-lint/**",
"!**/*.d.ts"
],
"coverageReporters": [
"text-summary"
],
"moduleFileExtensions": [
"ts",
"tsx",
"js",
"json"
],
"setupTestFrameworkScriptFile": "<rootDir>/jestEnvironment.js",
"transform": {
"\\.(ts|tsx)$": "<rootDir>/scripts/preprocessTypescript.js",
"\\.(less|css|svg|gif|png|jpg|jpeg)$": "<rootDir>/scripts/preprocessText.js"
},
"testRegex": "(Spec|.spec).tsx?$"
}
๋๋ด 21.0.1
๋
ธ๋ 6.9.2
์์ฌ 0.27.x / 1.0.0
OS Windows
๊ด๋ จ์ด ์๋์? https://github.com/facebook/jest/pull/4432
๋๋ ๊ทธ๋ ๊ฒ ๋ฏฟ์ง ์๋๋ค. ๋ฆฌํฌ์งํ ๋ฆฌ์์ ๋ณผ ์์๋ ๊ฒฝ์ฐ๋ 2 ๊ฐ์ ๋ค๋ฅธ ํ๋ก์ธ์ค (๋ณ๋ ฌ๋ก ์คํ๋๋ ๋์)์ ๋ํด ๋์ผํ ํ์ผ์ด ์กฐ๋กฑ๋์ด ํ ํ๋ก์ธ์ค์ ํ์ผ์ด ์ ๊ฒจ ์๊ธฐ ๋๋ฌธ์ ์บ์ ์ฐ๊ธฐ ์์ ์ด ์คํจํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ๊ทธ ํฐ์ผ์ ๊ฐ์ ๋ด์ฉ์ ๊ฐ์ง ๋ค๋ฅธ ํ์ผ์ ๊ดํ ๊ฒ ๊ฐ์ต๋๋ค. ์ฐ๋ฆฌ๊ฐ ํธ์คํ ํ๋ ๋ฆฌํฌ์งํ ๋ฆฌ์์ด ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ฌ๋ก๊ฐ ์์ต๋๋ค.
์ฐ๋ฆฌ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ํ
์คํธ์์ ๋์ผํ ๋ฌธ์ ์ ์ง๋ฉดํฉ๋๋ค. ์ฌํํ๋ ํ ๊ฐ์ง ์ฌ์ด ๋ฐฉ๋ฒ์ jest cacheDirectory
๋ฅผ ์ ๊ฑฐํ์ฌ ๋ค์ ์คํ์ ์บ์ ์์ฑ์ ๊ฐ์ ํ๋ ๊ฒ์
๋๋ค.
```ํ
์คํธ ์ค์ํธ๋ฅผ ์คํํ์ง ๋ชปํ์ต๋๋ค.
jest: failed to cache transform results in:
C : / myniceproject / src / jest-cache / jest-transform-cache-b2e8f1f700b9bd266a0d27bb01b47a2b-34a7e3d71d38ff01f65fdb5abdf5126b / 3f / settingsProvider_3f1439e55275a95ecfdb7dcb432f7958
์คํจ ๋ฉ์์ง : EPERM : ์์
์ด ํ์ฉ๋์ง ์์, ์ด๋ฆ ๋ฐ๊พธ๊ธฐ
'C : myniceprojectsrcjest-cachejest-transform-cache-b2e8f1f700b9bd266a0d27bb01b47a2b-34a7e3d71d38ff01f65fdb5abdf5126b3fsettingsProvider_3f1439e55275a95ecfdb7dcb432f7958.1630729137'
->
'C : myniceprojectsrcjest-cachejest-transform-cache-b2e8f1f700b9bd266a0d27bb01b47a2b-34a7e3d71d38ff01f65fdb5abdf5126b3fsettingsProvider_3f1439e55275a95ecfdb7dcb432f7958'`
๋์ผํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ฌ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์ฐพ์ ์ ์์ต๋๋ค. Jest๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ด๋ฐ ์์ผ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค.
20.0.4์์ 21.2.0์ผ๋ก ์ ๋ฐ์ดํธํ๋ ค๊ณ ํ๋๋ฐ ์ด์ ๋น๋ ์๋ฒ์ ๋ค์ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
Test suite failed to run
[13:46:50]
[13:46:50] jest: failed to cache transform results in: C:/TeamCity/buildAgent/temp/buildTmp/jest/jest-transform-cache-c60bb8ad55f1dbc29115038800657f2f-4895fc34da3cd9ad1e120af622bca745/3b/fe-selectors_3b56db772e798e2e4d0c9fc7c9e4a770
[13:46:50] Failure message: EPERM: operation not permitted, rename '...\jest\jest-transform-cache-c60bb8ad55f1dbc29115038800657f2f-4895fc34da3cd9ad1e120af622bca745\3b\fe-selectors_3b56db772e798e2e4d0c9fc7c9e4a770.1701848979' -> '...\jest\jest-transform-cache-c60bb8ad55f1dbc29115038800657f2f-4895fc34da3cd9ad1e120af622bca745\3b\fe-selectors_3b56db772e798e2e4d0c9fc7c9e4a770'
[13:46:50]
[13:46:50] at Object.fs.renameSync (fs.js:772:18)
[13:46:50] at Function.writeFileSync [as sync] (node_modules/write-file-atomic/index.js:192:8)
๋๋ ์ด์ ๋์ผํ ๋ฌธ์ ํ ์คํธ๊ฐ ๋ฌด์์๋ก ๊นจ์ก์ต๋๋ค.
--runInBand ํ๋๊ทธ๋ก ํ ์คํธ๋ฅผ ์คํํ๋ฉด ์์๋๋ก ๋ชจ๋ ๊ฒ์ด ์ ์์ ๋๋ค.
๋์ผํ ๋ฌธ์ ๋ฅผ ์๋นํ ์ผ๊ด๋๊ฒ ๋ณผ ์ ์์ต๋๋ค.
โ Test suite failed to run
jest: failed to cache transform results in: .../jest-transform-cache-...
Failure message: EPERM: operation not permitted, rename '...' -> '...'
at Error (native)
at Object.fs.renameSync (fs.js:810:18)
at Function.writeFileSync [as sync] (node_modules/write-file-atomic/index.js:192:8)
๋๋ด 21.2.1
๋
ธ๋ 6.11.1
OS Windows
--no-cache
๋ ๋์ jest-transform-cache
๋ ์์ง ์์ฑ ์ค์
๋๋ค. ๋์์ด๋๋ ์ ์ผํ ๊ฒ์ --runInBand
์ด๋ฉฐ, ์ด๋ ๋๊ท๋ชจ ํ๋ก์ ํธ์์๋ ๊ฑฐ์ ํ์ฉ๋์ง ์์ต๋๋ค.
๋ฌธ์ ์ง๋จ์ ์ํด ํ ์์๋ ์ผ์ด ์์ต๋๊น? ์ฌํ ์ฌ๋ก๋ฅผ ๋ง๋ค์ด์ผํฉ๋๊น?
์ด ์ค๋ฅ๊ฐ ์ค์ํฉ๋๊น? ์ ์ฒด ํ ์คํธ ์ค์ํธ๋ฅผ ์ญ์ ํ์ง ์๊ณ ๊ฒฝ๊ณ ๋ก ์ฒ๋ฆฌ ํ ์ โโ์์ต๋๊น? ๋ฐฑ ์คํํ๊ณ ์ฌ ์๋ํ๋ ๋ฐฉ๋ฒ์ด ์์ต๋๊น?
์์ ์ฌํ์ด ์์ผ๋ฉด ์ข์ ๊ฒ์ ๋๋ค.
์ฌ๊ธฐ ์ฌํ์ด ์์ต๋๋ค : https://github.com/asapach/jest-cache-issue/
๋ณํ ์บ์๋ฅผ ์ฑ์ฐ๊ธฐ ์ํด babel-jest
๊น์ง lodash-es ๋ฅผ ํจ๊ณผ์ ์ผ๋ก ์คํํฉ๋๋ค.
์ด๊ฒ์ ๋ ๊ฐ์ ๋ค๋ฅธ ์ปดํจํฐ (Win8.1 ๋ฐ Win10)์์ 80 %์ ์๊ฐ ๋์ ์คํจํฉ๋๋ค.
--no-cache
๋ฅผ ์ ๊ฑฐํ๋ฉด 100 % ์คํจํฉ๋๋ค. --runInBand
์ถ๊ฐํ๋ฉด 0 %๋ก ๋ฎ์์ง๋๋ค.
(ํธ๊ธฐ์ฌ์ผ๋ก Win10์ WSL ์์ ์คํ์ ์๋ํ์ง๋ง Posix API๋ฅผ ์ฌ์ฉํ์ฌ ๋ฌธ์ ๋ฅผ ์ฌํ ํ ์ ์์)
Windows์์๋ง ๋ฐ์ํฉ๋๊น? ๊ฐ์ ๋จธ์ ์ด์ธ์ Windows ๋จธ์ ์ ์ก์ธ์ค ํ ์ ์์ผ๋ฏ๋ก ๋๋ฒ๊น ํ๊ธฐ ๊ฐ์ฅ ์ฌ์ด ๋ฐฉ๋ฒ์ด ์๋๋๋ค.
@jeanlauliac # 4088์ write-file-atomic
์ (๋ฅผ) ์ถ๊ฐํ์ต๋๋ค. ๋์ ์ฃผ์๊ฒ ์ต๋๊น?
์ด ๋ฌธ์ ๋ https://github.com/npm/write-file-atomic/issues/10 ๋ฐ https://github.com/npm/write-file-atomic/pull/22 ์ ๋งค์ฐ ์ ์ฌํฉ๋๋ค
๋ฐฉ๊ธ procmon ์ถ์ ์ ์คํํ์ต๋๋ค. ๋ค์์ ๋ฌธ์ ์ ์์ ๋๋ค.
์๊ฐ | ํ๋ก์ธ์ค ์ด๋ฆ | PID | ์ด์ | ๊ฒฝ๋ก | ๊ฒฐ๊ณผ | ์ธ๋ถ ๋ฌ์ฌ
-| -| -| -| -| -| -
16 : 54 : 43.2304011 | node.exe | 7624 | SetRenameInformationFile | ... constant_ee286bbcf367680ce61a90e506522f92.82986661 | ์ฑ๊ณต | ReplaceIfExists : True, ํ์ผ ์ด๋ฆ : ... constant_ee286bbcf367680ce61a90e506522f92
16 : 54 : 43.2305499 | node.exe | 8208 | SetRenameInformationFile | ... constant_ee286bbcf367680ce61a90e506522f92.103872574 | ์ก์ธ์ค ๊ฑฐ๋ถ | ReplaceIfExists : True, ํ์ผ ์ด๋ฆ : ... constant_ee286bbcf367680ce61a90e506522f92
๋ณด์๋ค์ํผ ๋ ํ๋ก์ธ์ค๊ฐ ์๋ก 1ms ์ด๋ด์ ๋์ผํ ํ์ผ์ ์ด๋ฆ์ ๋ฐ๊พธ๋ ค๊ณ ์๋ํ๊ณ ๋ ๋ฒ์งธ ํ๋ก์ธ์ค๋ ์คํจํฉ๋๋ค.
npm / write-file-atomic # 22๊ฐ writeFile()
์ ๋น๋๊ธฐ ๋ฒ์ ์ ํด๊ฒฐํ๋ค๊ณ ์๊ฐํ์ง๋ง writeFileSync()
๋ ์ฌ์ ํ ์ํฅ์๋ฐ์ต๋๋ค.
๋์ผํ ํ์ผ์ ๋ํด worker-farm
์์ write-file-atomic
๋ฅผ ์ฌ์ฉํ๋ ๊ฒ๋ง์ผ๋ก๋ ์คํจ๋ฅผ ๋ณด์ฌ์ฃผ๋ ์ฌํ์ ๋ง๋ค ์ ์์ต๋๊น? ๊ทธ ํ๋ก์ ํธ์ ๋ํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๊ฒ์ด ์ข์ ๊ฒ์
๋๋ค.
๋๋ ์์์ด ๋ ์์๋ ๋์ผํ ์ค๋ฅ (์์ฉ ์ CI๊ฐ ์์)๋ฅผ ๋ณด์ฌ์ฃผ๋ jest ๋ด์์ ํ ์คํธ๋ฅผ ์์ฑํ ์ ์๋ค๋ฉด?
์ด ์ค๋ฅ๊ฐ ๋ฐ์ํ์ ๋ ์ฐ๋ฆฌ๊ฐ ์ํ๋ ๋์์ด ๋ฌด์์ธ์ง์กฐ์ฐจ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ๋ค์ ์ฐ์๊ฒ ์ต๋๊น? ํ ์คํธ๋ฅผ ๋ค์ ์คํ ํ์๊ฒ ์ต๋๊น? ์ ์ฒด ํ ์คํธ ํ์ผ?
์ข์์. ๋ค๋ฅธ ์ฌํ์ ๋ง๋ค์ด ๋ณด๊ฒ ์ต๋๋ค. ์ฌ๋ฌ ํ๋ก์ธ์ค๋ฅผ ์์ฑํ๊ณ ์บ์๋ฅผ ๋นํ์ฑํ / ์ ๋ฆฌํ๊ณ ์คํจ ํ ๋๊น์ง ๊ณ์ ์คํํด์ผํ๊ธฐ ๋๋ฌธ์ ๋๋ด ํ ์คํธ๋ฅผ ์์ฑ ํ ์ ์๋์ง ํ์คํ์ง ์์ต๋๋ค.
์ด ์ค๋ฅ๊ฐ ๋ฐ์ํ์ ๋ ์ฐ๋ฆฌ๊ฐ ์ํ๋ ๋์์ด ๋ฌด์์ธ์ง์กฐ์ฐจ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
์, ์ฐ์ --no-cache
๊ฐ ์ผ์ ธ์์ ๋๋ ์บ์๊ฐ ์ฑ์์ง์ง ์์์ผํ๋ฏ๋ก ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ง ์์์ผํฉ๋๋ค.
๋์งธ, ๋๊ธฐํ ์์
์ ์ฌ๋ฐ๋ฅด๊ฒ ์ฌ ์๋ ํ ์ ์๋์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. writeFile()
๋์ writeFileSync()
์์ต๋๊น? ์ด๋ ๊ฒํ๋ฉด write-file-atomic
๊ฐ ์๋์ผ๋ก ์ฌ ์๋๋ฉ๋๋ค (ํ์ธ์ ์ํด ํ
์คํธ๋ฅผ ์์ฑํ๊ฒ ์ต๋๋ค).
์, ์ฐ์
--no-cache
๊ฐ ์ผ์ ธ์์ ๋๋ ์บ์๊ฐ ์ฑ์์ง์ง ์์์ผํ๋ฏ๋ก ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ง ์์์ผํฉ๋๋ค.
์ข์ ์ ์ด๋ฉฐ ๋ณ๋๋ก ์์ ํด์ผํฉ๋๋ค. ์ด๋ฐ ์์ผ๋ก --no-cache
๋ ์ ์ด๋ ํด๊ฒฐ ๋ฐฉ๋ฒ์ด ๋ ์ ์์ต๋๋ค.
๋์งธ, ๋๊ธฐํ ์์ ์ ์ ๋๋ก ์ฌ ์๋ ํ ์ ์๋์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
writeFile()
๋์writeFileSync()
์์ต๋๊น?
@cpojer ๊ฐ ๋๊ธฐํ๋์ง ์๋๋ก ์๊ฐํ์ญ๋๊น? ๊ทธ๊ฒ์ด ์ด๋ป๊ฒ ํ์ฅ๋๋์ง ํ์คํ์ง ์์ต๋๋ค. ๋๋์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ๋ํ ๋ค๋ฅธ ์์ด๋์ด๊ฐ์๋ ๊ฒฝ์ฐ
--no-cache
์ ์ค์ ๋ก --reset-cache
์ ๋น์ทํฉ๋๋ค. ์ด๋ ๊ธฐ์กด ์บ์๋ฅผ ์ฌ์ฉํ์ง ์์ง๋ง ์ฌ์ ํ ์ฐ๊ธฐ ์บ์๋ฅผ ์๋ฏธํฉ๋๋ค. ๋๋ ๊ทธ๊ฒ์ ์ ์งํ๊ณ ์ถ๋ค.require
ํธ์ถ ์ค์ ๋ฐ์ํ๊ธฐ ๋๋ฌธ์ ๋๊ธฐํ๋์ด์ผํ๋ฏ๋ก ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.worker-farm
๋ฐ write-file-atomic
์ ๋ค๋ฅธ ์ฌํ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. https://github.com/asapach/write-atomic-issue
์ง๊ธ๊น์ง ์ฐพ์ ๊ฒฐ๊ณผ : ๋๊ธฐํ ๋ฒ์ ์ด ์์๋๋ก ์คํจํ์ง๋ง ๋๋๊ฒ๋ ๋น๋๊ธฐ ๋ฒ์ ๋ ์คํจํฉ๋๋ค. ์ฆ, ๋์ผํ ํ๋ก์ธ์ค์์ ์คํ๋๋ ๊ฒฝ์ฐ์๋ง ์ฌ์๋ ๋๊ธฐ์ด์ ๊ตฌํํ ์ ์์ผ๋ฉฐ ์ด๋ ์ฐ๋ฆฌ์ ๊ฒฝ์ฐ์ ๋์์ด๋์ง ์์ต๋๋ค.
๋๋ ๊ทธ๊ฒ์ ์ ์งํ๊ณ ์ถ๋ค.
์ ๊น๋ฐ? ๋งค์ฐ ์คํด์ ์์ง๊ฐ์๋ ์ด๋ฆ์
๋๋ค. ๊ทธ๋ฆฌ๊ณ ์๋ฅผ ๋ค์ด CI์์๋ ์ด์จ๋ ์บ์๋ฅผ ๊ฑฐ์ ์ํ์ง ์์ผ๋ฏ๋ก ๋ฆฌ์์ค๊ฐ ๋ญ๋น๋ฉ๋๋ค. ์๋๋ฉด --no-cache
๋์ ๋จ์ผ ํ
์คํธ ์คํ ๋ด์์ ์์ฑ ๋ ์บ์๊ฐ ์ฌ์ฉ๋๋ฉฐ ๊ธฐ์กด ์บ์ ๋ง ๋ฌด์ํฉ๋๊น?
๋ค์์
worker-farm
๋ฐwrite-file-atomic
์ ๋ค๋ฅธ ์ฌํ์ ๋๋ค.
๋๋ฐ! write-file-atomic์ ๋ํ ๋ฌธ์ ๋ฅผ ์ด โโ์ ์์ต๋๊น? ์์ ์ด ํ์ํ ๊ฒ ๊ฐ๊ณ , ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ (ํ ๋ฒ์ ์ฌ๋ฌ ํ๋ก์ธ์ค๋ฅผ ์์ฑํ๋ ๊ฒ์ ์ง์ํ์ง ์์ผ๋ ค๋ ๊ฒฝ์ฐ) ์ฐ๋ฆฌ ์ชฝ์์ ๋ค์ ๊ฒํ ํ ์ ์์ต๋๋ค. ์ด๋ป๊ฒ ์๊ฐํ์ญ๋๊น?
๋ก์ปฌ์์ ์๋ํ์ง๋ง ์๋ํ๋ ๊ฒ์ฒ๋ผ ๋ณด์๋ ํจ์น๋ ๋์ผํ ๋ด์ฉ์ ๊ฐ์ง ํ์ผ๋ก ์ด๋ฆ์ ๋ฐ๊พธ๋ ค๊ณ ํ ๋ ์ค๋ฅ๋ฅผ ๋ฌด์ํ๋ ๊ฒ์ ๋๋ค. ๋ค๋ฅธ ๊ณผ์ ์ด ๊ฒฝ์ฃผ์์ '์น๋ฆฌ'ํ๋ค๋ ์๋ฏธ ์ผ ๋ฟ์ด๋ฏ๋ก ๋ฌด์ํ๊ณ ๊ณ์ ์งํํ ์ ์์ต๋๋ค.
const cacheWriteErrorSafeToIgnore = (
e: Error,
cachePath: Path,
fileData: string,
) => {
if (
e.message &&
e.message.indexOf('EPERM: operation not permitted, rename') > -1
) {
try {
const currentContent = fs.readFileSync(cachePath, 'utf8');
return fileData === currentContent;
} catch (e) {
}
}
return false;
};
@SimenB , ๋ฌผ๋ก ๋ฌธ์ ๋ฅผ ์ ์ถํ๊ฒ ์ต๋๋ค.
@cpojer ,์ด ์ค๋ฅ๋ฅผ ์ผํค๊ฑฐ๋ ๋ฌด์ํ๊ณ ๊ฒฝ๊ณ ๋ก ์ฒ๋ฆฌ ํ ์ โโ์์ต๋๊น? ์ด๋ ํ์ผ์ด ์ด๋ฏธ ๊ธฐ๋ก๋์์ผ๋ฉฐ ๋ฐ์ดํฐ๊ฐ ์์ค๋์ง ์์์ผ ํจ์ ์๋ฏธํฉ๋๋ค.
์ ์คํธ๋ฆผ ๋ฌธ์ : npm / write-file-atomic # 28
๋๋ ์ด๊ฒ์ด "์ด๋ฆ ๋ฐ๊พธ๊ธฐ"๊ฐ Windows์์ ์์ ์ ์ฐ์ฐ์ด ์๋๋ผ๋ ๊ฒ์ ์๋ฏธํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ๊ทธ๋์ write-file-atomic
์ ๊ฐ์ ์ ๊นจ๋จ๋ฆฝ๋๋ค. Windows API ์์ค์์ ํ์ฑํ ํ ์์๋ ํ๋๊ทธ๊ฐ ์์ผ๋ฉด Windows์์ ์์ ์ ์ฐ๊ธฐ / ์ด๋ฆ ๋ณ๊ฒฝ์ด ๋ชจ๋ ๋ถ๊ฐ๋ฅํ ์ ์์ต๋๋ค.
@jwbay ๊ทํ์ ์๋ฃจ์
์ด ๋์๊ฒ ํฉ๋ฆฌ์ ์ผ๋ก ๋ณด์
๋๋ค! ๐ indexOf
๋์ e.code === 'EPERM'
(๋ ๊ฐ๋ ฅํ๊ณ ํน์ ๋ฉ์์ง์ ์์กดํ์ง ์์). ๊ฐ์ ํ์ธํ๊ธฐ ์ํด ํ์ผ์ ๋ค์ ์ฝ์ด์ผํ๋ค๊ณ ์๊ฐํ์ง ์์ต๋๋ค. ์ด๋ก ์ธํด ์ถ๊ฐ ๋์์ฑ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๊ธฐ ๋๋ฌธ์
๋๋ค (์ : ํ์ผ์ด ๋์์ ๋ค๋ฅธ ํ๋ก์ธ์ค์ ์ํด ์์ฑ๋๋ ๊ฒฝ์ฐ). PR ์ข ๋ณด๋ด ์ฃผ ์๊ฒ ์ด์?
write-file-atomic
์ ๋ํ PR ์์
์ ์์ํ๋ คํ์ต๋๋ค. "ํ์ผ ๋๊ธฐํ๋ฅผ ์์ฑํ๋ผ๋ ์์ฒญ์ ๋ฐ์์ง๋ง ์ด๋ฏธ ๋น๋๊ธฐ๋ก ์์ฑ๋๋๋ก ๋๊ธฐ์ด์์๋ ๊ฒฝ์ฐ, ๊ตฌ์ ์กฐ์น๋ฅผ ์ทจํ์ญ์์ค."(์ต์
์ด์์ ์ ์์) ๋์์ ์ผ๋ ค๋ฉด). ํ์ง๋ง Jest ์์ค์์์ด ๋ฌธ์ ๋ฅผ ์ฒ๋ฆฌ ํ ์ โโ์๋ค๋ฉด ์๋๋ฅด์ง ์์ ๊ฒ์
๋๋ค. cc @jeanlauliac
ํ์๋ "ํ์ผ ๋๊ธฐํ๋ฅผ ์์ฑํ๋ผ๋ ์์ฒญ์ ๋ฐ์์ง๋ง ๋น๋๊ธฐ๋ก ์์ฑ ๋ ๋๊ธฐ์ด์ ์ด๋ฏธ์๋ ๊ฒฝ์ฐ"(์๋ง๋ ๋ค์ ์ต์ ์ ์ฌ์ฉํ ์์๋ ๊ฒฝ์ฐ)์ ๋ํ PR ์์ ์ ์์ํ๋ ค๊ณ ํ์ต๋๋ค. ๋์์ ์ผ์ญ์์ค).
์ด ๋ ผ๋ฆฌ (๋ก์ปฌ ํ)๋ฅผ ์ถ๊ฐํด๋ ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋์ง ์์ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ๋๋ถ๋ถ ๋ค๋ฅธ ํ๋ก์ธ์ค๊ฐ ๋์ผํ ํ์ผ์ ์ฐ๋ ค๊ณ ํ ๋ (์ด๋ฆ ๋ฐ๊พธ๊ธฐ) ๋ฐ์ํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
๋์์ฑ ๋ฌธ์ ๋ฅผ ํ ๋ฒ์ ํด๊ฒฐํ๋ ค๋ฉด ์บ์ฑ์ ์ํํ๋ ๋ฐฉ๋ฒ์ ์ฌ๊ณ ํด์ผ ํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ์บ์์ ์ก์ธ์คํ๋ ๋จ์ผ ํ๋ก์ธ์ค๊ฐ ์๊ณ ์ผ์ข
์ IPC๋ฅผ ํตํด ํต์ ํฉ๋๋ค. memcached
์ ๊ฐ์ ๊ธฐ์กด ํค / ๊ฐ ์ ์ฅ์ ์์คํ
์ด ์ ์ฉ ํ ์ ์์ต๋๋ค.
์ด ๋ ผ๋ฆฌ (๋ก์ปฌ ํ)๋ฅผ ์ถ๊ฐํด๋ ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋์ง ์์ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ๋๋ถ๋ถ ๋ค๋ฅธ ํ๋ก์ธ์ค๊ฐ ๋์ผํ ํ์ผ์ ์ฐ๋ ค๊ณ ํ ๋ (์ด๋ฆ ๋ฐ๊พธ๊ธฐ) ๋ฐ์ํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
์, ์๋ง ๊ทธ ๋ฌธ์ ๋ฅผ ์คํดํ์ ๊ฒ์ ๋๋ค. ๋ด๊ฐ ์ฝ์ ๋ฐฉ์์ผ๋ก ๋ผ์ด๋ธ๋ฌ๋ฆฌ์๋ ์ด๋ฏธ ๋น๋๊ธฐ ์์ฒญ์ ๋ํด ์ ์๋ํ๋ ๋๊ธฐ์ด ๋ฉ์ปค๋์ฆ์ด ์์ง๋ง ๋๊ธฐํ ์์ฒญ์ ํผํฉํ๋ฉด ์ถฉ๋์ด ๋ฐ์ํ ์ ์์ต๋๋ค.
์์์ ์ธ๊ธ ํ ํ ์์ฒญ์ด์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํด์ผํฉ๋๋ค. ์ ์ด๋ ๊ทธ๊ฒ์ ๋๋ฅผ ์ํด ๊ทธ๊ฒ์ํ๋ค!
@mekwall, ๋๋ ๊ทธ๋ค์ด ์ฌ์ฉํ๋ ์๊ฐ rename()
์์ ์ ๋น๋๊ธฐ ๋ฒ์ writeFile()
, ๊ทธ๋ฆฌ๊ณ ์ฌ์ ํ ๋ด ํ
์คํธ์ ์คํจ https://github.com/asapach/write-atomic-issue. ๋ด ์ฌํ์ ์คํ ํด ์ฃผ์๊ฒ ์ต๋๊น? ๊ทํ์ ๋ณ๊ฒฝ์ด์ด ๋ฌธ์ ๊ฐ ๋ฐ์ํ ๊ฐ๋ฅ์ฑ์ ์ต์ํ ํ ์ ์๋ค๊ณ ์๊ฐํ์ง๋ง ์์ ํ ์ ๊ฑฐํ์ง๋ ์์ต๋๋ค.
@asapach ๋ด ๋ณ๊ฒฝ ์ฌํญ์ ์๋ ํ์ต๋๊น? ์ฌ๋ฌ ๋ฒ ์๋ํ์ง๋ง ๋ณ๊ฒฝ ์ฌํญ ์์ด๋ ๋งค๋ฒ ๊ฐ์ ธ ์ค๋ ๋์ EPERM: operation not permitted, rename
๋ฅผ๋ฐ์ง ๋ชปํ์ต๋๋ค.
@mekwall , ๊ทธ๋, ์ฌ์ ํ ๋ณ๊ฒฝ ์ฌํญ์ผ๋ก ์ธํด ์คํจํฉ๋๋ค (๋น๋๊ธฐ ์ ์ด์ง๋ง). (์๋์์ ์์ ๋จ)
๋๋ ๊ธฐ์ ์ ์ผ๋ก๋ ์คํจํ์ง ์์ง๋ง (๋๊ธฐํ ํ๋ฆ์ด ์ค๋จ๋์ง ์์๊ธฐ ๋๋ฌธ์) ์ฝ์์ ์ฌ์ ํ โโEPERM ์ค๋ฅ๋ก ๊ฐ๋ ์ฐจ ์์ต๋๋ค.
@asapach ๋๋ ๋น์ ์ด ๊ฐ์ง๊ณ ์๋ ๋ฌธ์ ๋ฅผ ๋ฐ๊ฒฌํ์ต๋๋ค. graceful-fs
ํด๋ฆฌ ํ์ ์์ต๋๋ค. ์ด PR์ ์์ ์ฌํญ์ ๊ฒ์ํ์ต๋๋ค : https://github.com/isaacs/node-graceful-fs/pull/119
@mekwall , ์ ์ด๊ฒ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๊ฒ ๊ฐ์ต๋๋ค. ๋๊ธฐํ ๋ฐ ๋น๋๊ธฐ ๋ฒ์ ๋ชจ๋์์ ๋ ์ด์ ์ค๋ฅ๊ฐ ์์ต๋๋ค.
์ด์ ๋ฌธ์ ๋ fs.unlinkSync(tmpfile)
๊ฐ ํธ์ถ๋์ง ์๊ธฐ ๋๋ฌธ์ ์์ ํ์ผ์ด ์ ๊ฑฐ๋์ง ์๋๋ค๋ ๊ฒ์
๋๋ค. https://github.com/npm/write-file-atomic/pull/29/files#diff -168726dbe96b3ce427e7fedce31bb0bcR198
@asapach graceful-fs
์ด๋ฆ ๋ฐ๊พธ๊ธฐ์ ์ฐ๊ฒฐ ํด์ ๋ฅผ ์ถ๊ฐํ์ง๋ง ์ด๊ฒ์ด ์ฌ๋ฐ๋ฅธ ๋ฐฉ๋ฒ์ธ์ง ํ์คํ์ง ์์ต๋๋ค. Afaik fs.rename
๋ MoveFile ํจ์๋ฅผ ์ฌ์ฉํ๋ฉฐ ์์ค๋ฅผ ๋์์ ๋ณต์ฌํด์๋ ์๋ฉ๋๋ค. ์์ค๋ ์ด๋ฆ ๋ง ๋ณ๊ฒฝํด์ผํ๋ฉฐ ์์ค์ ๋์์ ๋์์ ์กด์ฌํ์ง ์์์ผํฉ๋๋ค.
@mekwall ์ ์ฝ๊ฐ ๋์์ด๋์ง๋ง ์์ ์๊ฐ ์ผ์ฐ ์ข ๋ฃ๋๋ฉด (๋ชจ๋ ์์ ์ด ์๋ฃ ๋์๊ธฐ ๋๋ฌธ์) ์ผ๋ถ ํ์ผ์ ์ ๋ฆฌ๋ฅผ ๊ธฐ๋ค๋ฆฌ์ง ์๊ธฐ ๋๋ฌธ์ ์ ๋ฆฌ๋์ง ์์ต๋๋ค. ๋น๋๊ธฐ ๋ฒ์ ์ด ์ ์๋ํ๋ ๊ฒ ๊ฐ์ต๋๋ค.
@asapach ์์๋๋ก ์๋ํ์ง ์์ต๋๋ค. ๋ ธ๋ ๋ด๋ถ๋ก ๋ค์ด๊ฐ ์ค์ ๋ก ์๋ํ๋ ๋ฐฉ์๊ณผ ์๋ ํ ๋์์ด ๋ฌด์์ธ์ง ํ์ ํด์ผํฉ๋๋ค. graceful-fs์ ์์ ์ ๋ชจ๋ ํ๋ซํผ์์ ๋์ผํ๊ฒ ์๋ํ๋ ๊ฒ์ด๋ฏ๋ก ๋ ์์ธํ ์ดํด ๋ณด๊ฒ ์ต๋๋ค. ์ ์ด๋ ์ฐ๋ฆฌ๋ ๋ฒ์ธ์ ์ฐพ์์ต๋๋ค :)
@asapach ๋๋ ๊นจ๋ฌ์๋ค ๋ด PR์์ํ write-file-atomic
ํ๊ณ ์ํ์ง ์์
, ๋๋ ์ถ๊ฐํ์ฌ ๋ค๋ฅธ ์ ๊ทผ์ํ๋ค, ๊ทธ๋์ fs.renameSync
์์ graceful-fs
์ ๊ฐ์ ํด๊ฒฐ ๋ฐฉ๋ฒ์ผ๋ก fs.rename
๊ทธ๋ฌ๋ ์ฐจ๋จ. ์ด๋ ๊ฒํ๋ฉด ํ
์คํธ๊ฐ ์์๋๋ก ์๋ํฉ๋๋ค!
@mekwall , ๊ฐ์ฌํฉ๋๋ค. ๋ ์ฌํ ์ฌ๋ก ๋ชจ๋์์ ๋ณ๊ฒฝ ์ฌํญ์ ํ์ธํ์ง๋ง ์คํจํ ์ฌ๋ก๋ ์์ต๋๋ค.
๋จ์ ์ผ๋ก๋ ๋๊ธฐํ๋ฅผ ์ํด CPU ๋ฐ ๋์คํฌ ์ฌ์ฉ๋์ด ์ฆ๊ฐํ๋ค๊ณ ์๊ฐํ์ง๋ง ์๋ง๋ ์์ ํ ์ ์์ต๋๋ค.
์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ณ ํด๊ฒฐํ๋ ๋ฐ ๋์์ ์ฃผ์ ๋ง์ ๋ถ๋ค๊ป ๊ฐ์ฌ๋๋ฆฝ๋๋ค. ๋งค์ฐ ๊ฐ์ฌ! โค๏ธ graceful-fs์ ์์ ์ด ์ฌ๋ฐ๋ฅธ ์์ ์ด๋์ด ์ถ์๋๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
@SimenB ์ฒ๋ง ์์! ์ฐ๋ฆฌ๋ ์ง์ฅ์์ ์ด๋ก ์ธํด ๊ณ ํต์ค๋ฌ์์ ์ฐ๋ฆฌ ํ์์ ์ด๊ฒ์ ์กฐ์ฌ ํ ์๊ฐ์ด ์์ต๋๋ค. ๋ณ๊ฒฝ ์ฌํญ์ ๋ง์ ํจํค์ง์ ์ํฅ์ ๋ฏธ์น๋ฏ๋ก ์๋ฝํ๋ ๋ฐ ์๊ฐ์ด ๊ฑธ๋ฆด ๊ฐ๋ฅ์ฑ์ด ํฝ๋๋ค.
์ด ํด๊ฒฐ ๋ฐฉ๋ฒ์ด ์ธ์ ์ถ์ ๋ ์ง ์ ์ ์์ต๋๊น?
@cpojer ํ์ ์ด์ ์ ๋ํ ์ถ๊ฐ ์ ๋ณด๋ฅผ ์ ๊ณต ํ ์ ์์ต๋๊น? ์ ๊ณต๋ ์์ ์ฌํญ์ด ์์ต๋๊น? ์ฌ์ ํ์ด ๋ฌธ์ ๊ฐ ์์ต๋๋ค
์ฃ์กํฉ๋๋ค. ์์ ์ฌํญ์ด ์์ง graceful-fs์ ํฌํจ๋์ง ์์ ๊ฒ ๊ฐ์ต๋๋ค.
์ฌ๋ฌ ์ฌ๋์ด https://github.com/isaacs/node-graceful-fs/pull/119 ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋์๋์ง ํ์ธํ ์ ์์ต๋๊น?
์์ฌ ํด์๋๋ฅผ ์ฌ์ฉํ์ฌ ํฌํฌ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค ( https://yarnpkg.com/en/docs/selective-version-resolutions ์ฐธ์กฐ). CI ๋ฑ์ ์์ ์ฌํญ์ ๋ฐฐํฌ ํ ์ ์์ด์ผํฉ๋๋ค.
์
{
"resolutions": {
"graceful-fs": "mekwall/node-graceful-fs#a10aa576f771d7cf3dfaee523f2e02d6eb11a89f"
}
}
@SimenB ๊ทธ๊ฒ์ ์ ์ด๋ ๋๋ฅผ ์ํด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํฉ๋๋ค ๐
+1 ๋์๊ฒ๋.
@SimenB ๋ํ ๋ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ผ๋ฉฐ ์ด์ Windows์์
ํธ์ง : ์ฌ์ค, ๊ทธ๊ฒ์ ๋ด dev ๋ฉํฑ์์ ์๋ํ์ง๋ง ๋น๋ ์๋ฒ์์๋ ์๋ํ์ง ์์์ต๋๋ค. ๊ทธ๋๋ yarn 1.2.1์ ์คํํ๊ณ ์์ต๋๋ค. ๊ทธ๊ฒ ์ด์ ์ผ๊น์?
[16:47:55][Step 5/8] jest: failed to read cache file: D:/TeamCity/buildAgent2/temp/buildTmp/jest/jest-transform-cache-c39254d365b4bcb2c90f133d4b359d91-56a1804d8d831b3401a35a7e81857f3b/7e/rafPolyfill_7e7a83ed3f2680ba9aec0e45f59ade5d
[16:47:55][Step 5/8] Failure message: EPERM: operation not permitted, open 'D:\TeamCity\buildAgent2\temp\buildTmp\jest\jest-transform-cache-c39254d365b4bcb2c90f133d4b359d91-56a1804d8d831b3401a35a7e81857f3b\7e\rafPolyfill_7e7a83ed3f2680ba9aec0e45f59ade5d'
[16:47:55][Step 5/8]
[16:47:55][Step 5/8] at readCacheFile (node_modules/jest-runtime/build/script_transformer.js:465:60)
Yarn 1.0.0์ด๋ฉด ์ถฉ๋ถํฉ๋๋ค. ์ ๊ทธ๋ ์ด๋๋ฅผ ์๋ํด ๋ณผ ๊ฐ์น๊ฐ ์์ต๋๋ค.
ํด๊ฒฐ์ฑ ์ ๋ฃ์ผ๋ ค๊ณ ํ์ง๋ง ์ฌ์ ํ ์คํจํฉ๋๋ค. ๊ทธ๋ฌ๋ ENOENT ๋ฐ EPERM ์๋ฐ์ด ๋ชจ๋ ์์ต๋๋ค.
jest: failed to read cache file: C:/Users/dev/AppData/Local/Temp/jest/jest-transform-cache-857f905b2da01d52a9d1d17b6772ea4a-3a91587e29d4fef23c6e0cf16b2f5679/7d/index_7d0afc82f0b29ec31c4b5f296cbdee74
Failure message: ENOENT: no such file or directory, open 'C:\Users\dev\AppData\Local\Temp\jest\jest-transform-cache-857f905b2da01d52a9d1d17b6772ea4a-3a91587e29d4fef23c6e0cf16b2f5679\7d\index_7d0afc82f0b29ec31c4b5f296cbdee74'
at Object.fs.openSync (../fs.js:653:18)
at Object.fs.readFileSync (../fs.js:554:33)
๊ณผ
jest: failed to read cache file: C:/Users/dev/AppData/Local/Temp/jest/jest-transform-cache-857f905b2da01d52a9d1d17b6772ea4a-3a91587e29d4fef23c6e0cf16b2f5679/c4/std_pb_c403e6e7645c904896b66f44a3e43606
Failure message: EPERM: operation not permitted, open 'C:\Users\dev\AppData\Local\Temp\jest\jest-transform-cache-857f905b2da01d52a9d1d17b6772ea4a-3a91587e29d4fef23c6e0cf16b2f5679\c4\std_pb_c403e6e7645c904896b66f44a3e43606'
at Object.fs.openSync (../fs.js:653:18)
at Object.fs.readFileSync (../fs.js:554:33)
@mreishus ๋น๋ ์๋ฒ์์ Windows๋ฅผ ์คํํฉ๋๊น? graceful-fs
์ ์์ ์ฌํญ์ Windows ๋ง ๋์์ผ๋กํ์ง๋ง Linux ๊ธฐ๋ฐ OS์์๋ ๋ฐ์ํ์ง ์์์ผํฉ๋๋ค.
@mekwall ์,
์ด๊ฒ์ ์ ์๊ฒ ์ค์ํ ๋ฌธ์ ์ด๋ฉฐ 2016 ๋
11 ์ ์ดํ๋ก graceful-fs
๋ํด ์๋ฌด ์ผ๋ ์ผ์ด๋์ง ์์์ต๋๋ค. ๊ทธ๋์ @mekwall์ด ์ ๊ณต ํ ์์ ์ฌํญ์ด ๊ณง ๋ณํฉ๋์ง ์์ ๊ฒ์ด๋ผ๋ ๋น๊ด์ ์
๋๋ค. -i
ํ๋๊ทธ ๋ฐ ํด๊ฒฐ ๋ฐฉ๋ฒ ์ธ์ ์ฌ์ฉํ ์์๋ ์์ ์๋ฃจ์
์ด ์์ต๋๊น?
--runInBand๊ฐ @frenic์์ ์๋ํ์ง ์์ต๋๊น?
-i
์ ๋์ผํ๋ฉฐ ๋ค, ์๋ํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ํ๊น๊ฒ๋ ๋๊ท๋ชจ ํ๋ก์ ํธ์ ๊ฒฝ์ฐ ์ฅ๊ธฐ์ ์ผ๋ก ์ง์ ๊ฐ๋ฅํ์ง ์์ต๋๋ค.
ํฌํฌํ๊ณ ์ฐ๋ฆฌ ์์ ์ ๊ฒ์ ๊ฒ์ ํ ์ ์๋ค๊ณ ์๊ฐํ์ง๋ง ์์ ์ด ๋ชจ๋ ์ฌ๋์๊ฒ ํจ๊ณผ๊ฐ์๋ ๊ฒ ๊ฐ์ง๋ ์์ต๋๋ค.
์ ๋ ๊ฐ์ ์ํฉ์ด์ง๋ง ์ ๊ฒฝ์ฐ์๋ --runInBand๊ฐ ์๋ํ์ง ์์ต๋๋ค.
์ต์ ๋ฒ์ ์ Jest๋ก graceful-fs
์ฌ์ ์๋ฅผ ํ์ธํ๋๋ฐ ์ํ๊น๊ฒ๋ ๋ง์ง๋ง์ผ๋ก ํ
์คํธ ํ ์ดํ๋ก ๋ ์ด์ ์์ ์ ์ผ๋ก ์๋ํ์ง ์๋ ๊ฒ ๊ฐ์ต๋๋ค. ๋๊ท๋ชจ ํ
์คํธ ์ค์ํธ์์ ๊ฒฝ์ ์กฐ๊ฑด์ด ๋ฐ์ํ ๊ฐ๋ฅ์ฑ์ ์ฌ์ ํ โโ0์ด ์๋๋๋ค.
์ด ์ค๋ ๋๋ฅผ ์คํฌ๋กค ํ ํ yarn
์ฌ์ฉํ์ฌ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์ฐพ์์ต๋๋ค. ๋์ npm
๋ฅผ ์ฌ์ฉํ๋ ํด๊ฒฐ ๋ฐฉ๋ฒ์ด ์์ต๋๊น?
์ง๊ธ๊น์ง package.json์ graceful-fs
ํจ์น ๋ฒ์ ์ ์ถ๊ฐํ๋ ๊ฒ๋ง์ผ๋ก๋ ํ์ด์ ๋น๋๋ค. npm๊ณผ ์ค๋ก ์ฐ๋ฆฌ๋ฅผ ์ํด ์ผํฉ๋๋ค.
"graceful-fs": "https://github.com/mekwall/node-graceful-fs.git#patch-1",
์๋ ํ์ธ์,
์ด๋ค ์ด์ ๋ก ๋ก์ปฌ์์ ์คํํ ๋๊ฐ ์๋๋ผ Jenkins์์ ์คํํ ๋๋ง์ด ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค (๋์ผํ ์ปดํจํฐ / ํด๋ ๋ฑ์์๋).
@jsheetzati ์ ์๋ฃจ์
์ (npm ์ฌ์ฉ) ์ฐ๋ฆฌ์๊ฒ๋ ํจ๊ณผ๊ฐ ์์ง๋ง ๊ฒฐ๊ตญ ํจ์น์
๋๋ค. ์ด ๋ฌธ์ ๋ฅผ ์๊ตฌ์ ์ผ๋ก ํด๊ฒฐํ๊ธฐ์ํ ETA๊ฐ ์์ต๋๊น?
๊ฐ์ฌ,
๋ชจ๋ฅด
Jenkins์์ jest๋ฅผ ์คํํ ๋๋์ด ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค. --runInBand
์ต์
์ ๋จ์ผ ์์
์คํ ์ค ์คํจ๋ฅผ ๋ฐฉ์งํ๋ ๋ฐ ๋์์ด๋์ง๋ง ์ฌ๋ฌ ๋น๋๋ฅผ ๋ณ๋ ฌ๋ก ์คํํ ๋ jest๋ ์ฌ์ ํ ์คํจํฉ๋๋ค.
ํด๊ฒฐ ๋ฐฉ๋ฒ์ผ๋ก ์ ๊ธ ๊ฐ๋ฅํ ๋ฆฌ์์ค ํ๋ฌ๊ทธ์ธ ์ ์ฌ์ฉํ์ฌ --runInBand
์ต์
์ ์ ์งํ๋ฉด์ ๋์์ ํ๋์ jest
ํ๋ก์ธ์ค ๋ง ์คํ๋๋๋กํฉ๋๋ค.
์ด ์๊ฒฌ์ด ๋๊ตฐ๊ฐ์๊ฒ ์ ์ฉํ๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
@nyrkovalex ์ค๋ช ํ๋ ๋ฌธ์ ๋ฅผ ํผํ๊ธฐ ์ํด ์ฐ๋ฆฌ๊ฐํ๋ ์ผ์ Jest์ ์บ์ ๋๋ ํ ๋ฆฌ ์ต์ ์ ์ฌ์ฉํ์ฌ ์บ์๊ฐ ์์ ๊ณต๊ฐ์์ ๊ณต์ ๋์ง ์๋๋กํ๋ ๊ฒ์ ๋๋ค.
cacheDirectory: '<rootDir>/.jest-cache'
๋ฅผ ์ค์ ํ๋ Jest ์ฌ์ ์ค์ ์ ๊ฒ์ํ๊ณ ๋ชจ๋ ํจํค์ง์์์ด๋ฅผ ์ฌ์ฉํ๋๋กํฉ๋๋ค. ์ด ๊ฒฝ์ฐ .jest-cache
์ .gitignore
ํฉ๋๋ค.
์ด ์ต์ ์ ์ถ๊ฐํ๊ธฐ ์ ์ Jenkins ์์ด์ ํธ ๋น 16 ๊ฐ์ ์คํ๊ธฐ์์ ์ ์ญ Jest ์บ์๋ฅผ ๊ณต์ ํ๋ ๊ฒฐ๊ณผ๋ก ๋ช ๊ฐ์ง ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค. ์ ๊ธ ์์๋ ๋ฆฌ์์ค ๋ฅผ ์ฌ์ฉํ๋ฉด ์ธ๊ธ ํ๋๋ก ๋ฌธ์ ๋ฅผ ๋ฐฉ์ง ํ ์ ์์ง๋ง Jenkins ์์ด์ ํธ๋ฅผ ์ ์ฌ์ ์ผ๋ก ์ฌ์ฉํ์ง ์๊ธฐ ๋๋ฌธ์ ๋ญ๋น์ ๋๋ค (Jest ํ ์คํธ๊ฐ ๋ณ๋ชฉ ํ์์ด ๋จ).
@ anescobar1991 ์ด ์ต์
์ ํ์คํ ๋ ๋์ ์๋ฃจ์
์ด๋ฏ๋ก ์ฌ์ฉ์ ๊ณ ๋ คํ ๊ฒ์
๋๋ค.
ํ ์ฃผ์
์ ๊ฐ์ฌํฉ๋๋ค!
์๋ ํ์ธ์,
์ฐ๋ฆฌ๋ gradle์ ์ฌ์ฉํ์ฌ npm์ ์คํํ๊ณ (์ด์ ๋ฅผ ๋ฌป์ง ๋ง์ญ์์ค :)) Jenkins์์ ์กฐํฉ์ ํฌ๋ฌ์
๋๋ค.
์ฐ๋ฆฌ๋ ์๋ํ์ต๋๋ค :
๋ชจ๋ ๋์ผํ ์ค๋ฅ๋ก ์คํจํฉ๋๋ค.
์ฐ๋ฆฌ๋ฅผ ์ํด ์๋ํ๋ ์ ์ผํ ์๋ฃจ์
์ @jsheetzati ์ ์๋ฃจ์
์
๋๋ค. ๊ณต์์ ์ผ๋ก ์์ ๋๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
์ฐ๋ฆฌ๋ ์๋ง๋ ๊ทธ ์์ ์ผ๋ก ํฌํฌํ๊ณ ๊ฒ์ ํ ์ ์์ต๋๋ค.
๊ทธ๊ฑฐ ๊ต์ฅ ํ ๊ฑฐ์ผ ...
๋๋์ด ๋ฌธ์ ๋ฅผ ๋ง์ด ๊ฐ์ง๊ณ ์์ผ๋ฉฐ ์ฐ์ํ fs์ ๋ํ ํจ์น๊ฐ ๋๋ฅผ ์ํด ์ผํ์ต๋๋ค. ๊ทธ๋์ ๋๋์ด ์์ ์ ๊ณ ๋ง๊ฒ ์๊ฐํฉ๋๋ค.
graceful-fs๋ฅผ ๋ค๋ฃจ๊ธฐ์ํ ํด๊ฒฐ ๋ฐฉ๋ฒ์ผ๋ก ๊ฐ ์์ ์ ํ๋ก์ธ์ค / ์ค๋ ๋์ ๊ฒฝํฉ ์ํ๋ฅผ ํผํ๊ธฐ ์ํด ์์ฒด ์บ์ ๋๋ ํฐ๋ฆฌ๋ฅผ ์ ๊ณต ํ ์ ์์์ต๋๊น?
๋๋ฆด ์๋ ์์ง๋ง CI ์๋ฒ์์ --runInBand๋ฅผ ์ฌ์ฉํด์ผํ๋ฉฐ ์ด๋ ํจ์ฌ ๋ ๋์ฉ๋๋ค.
๋๊ตฐ๊ฐ ๋์๊ฒ ์ฌ๋ฐ๋ฅธ ํ์ผ์ ์๋ ค์ค ์ ์๋ค๋ฉด ํจ์น๋ฅผ ์์ฑํ๋ ค๊ณ ํ ์๋ ์์ต๋๋ค. ๋๋ด์ ์์ธ์ ํ์ํ๋ ๋ฐ ์ ๋ง ์ด๋ ค์์ ๊ฒช์ต๋๋ค.
๋๋ ๊ทธ๊ฒ์ด ๋ฌด์์ธ์ง ํ์คํ์ง ์์ง๋ง ๋ช ์ฃผ์ผ ๊ฐ๋ฅ์ฑ์ด ๋ ๋ฌ์ด ์ง๋ฌ์ผ๋ฉฐ ๋ ์ด์ ์คํจ๋ฅผ ๊ด์ฐฐํ์ง ๋ชปํ์ต๋๋ค. ์ฐ๋ฆฌ๋ ํ๋์ jest 22.4.2๋ฅผ ์ฌ์ฉํ๊ณ ์์ผ๋ฉฐ ์ต๊ทผ์๋ 22.4.4๋ก ์ ๊ทธ๋ ์ด๋ํ์ต๋๋ค. ๋ค๋ฅธ ๋ค์ํ ํจํค์ง๋ ์ ๋ฐ์ดํธํ์ต๋๋ค.
๊ทธ๋ฅ ์นฉ ์ธ-Windows Jenkins CI ์๋ฒ์์ jest 23.6์ผ๋ก ์ด๊ฒ์๋ณด๊ณ ์์ต๋๋ค.
--runInBand
์ ์๋ํ์ง๋ง ํ
์คํธ ์๊ฐ์ ๋ ๋ฐฐ๋ก ๋๋ ค์ ์ข์ง ์์ต๋๋ค. ํธ์ ์ ์ ํ
์คํธ๋ฅผ ์คํํ๊ธฐ ๋๋ฌธ์ ํ์์ ๋งค์ฐ ์ฌํ๊ฒ ๋ง๋ค์ง ์๊ณ ๋ ์ฌ์ฉํ ์ ์์ต๋๋ค.package.json
์ graceful-fs ์ฌ์ ์๋ ์๋ํ์ง๋ง ์ฝ๊ฐ์ ํดํน์
๋๋ค.graceful-fs
๋ ์ด๊ฒ์ ๋ํด ๋ง์ ์ผ์ํ์ง ์๊ธฐ ๋๋ฌธ์ (https://github.com/isaacs/node-graceful-fs/pull/131์ ์๋
7 ์ ์ดํ๋ก ํ๋์ ๋ณด์ง ๋ชปํ์ต๋๋ค), ์๋ง๋ ํฌํฌ ํ ์๊ฐ์
๋๋ค. ? ๋๋ ๊ฑฐ๊ธฐ์ ์์๋ฆฌ ์ฃผ์์ ์ถ๊ฐํ์ง๋ง ๋๊ตฐ๊ฐ ๊ฐ์๊ธฐ ์ด๊ฒ์ ๋ถ๋ฅํ๊ธฐ ์ํด ๋ฐ์ด๋ค ๊ฒ์ผ๋ก ๊ธฐ๋ํ์ง ์์ต๋๋ค.) ':
๋์ผํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ง๋ง ์ค๋ฅ ๋ฉ์์ง๊ฐ ๋ค๋ฆ
๋๋ค.
Failure message: EBADF: bad file descriptor, close
jest: failed to cache transform results in: C:/agent/_work/_temp/jest/jest-transform-cache-2a12bf9796741cb06fb97a276aa09712-7d718cda2d798ae78eb741b3feff799e/7b/test-setup_7bdb1937d8dbbf5088142bc21e74a530
2019-01-24T13:44:55.5496091Z Failure message: EBADF: bad file descriptor, close
--runInBand๋ก jest๋ฅผ ์คํํ๋ฉด ์ฒ์์๋ ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋์ง ์์ง๋ง ๋ค๋ฅธ ์คํ ํ์ ๋ง โโ์ค๋ฅ์์ด ์คํ๋๋ ๊ฒ ๊ฐ์ต๋๋ค.
TFS ๋น๋์ ์ผ๋ถ๋ก Windows 10 Enterprise VM์์ ์คํ๋ฉ๋๋ค.
@EthanSankin ๋งํฌ ๋ graceful-fs PR
์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ graceful-fs
์ ๋์ฒดํ์ ์์
์ค์
๋๋ค. ํ์ฌ ์ํ ๋ฒ์ ์ด์ง๋ง ์ผ๋ฆฌ ์ด๋ตํฐ๋ฅผ ํ๋ณดํ๋ฉด ์ข์ ๊ฒ์
๋๋ค : https://github.com/mekwall/normalized-fs
์ด์ ๋ฒ์ ์ write-file-atomic์ผ๋ก ๋ ๋๋ฆฌ๋ฉด ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋์์ต๋๋ค.
@moizgh ์ด๋ค ๋ฒ์ ์์ ์ด๋ค ๋ฒ์ ์ผ๋ก?
@moizgh ์ด๋ค ๋ฒ์ ์์ ์ด๋ค ๋ฒ์ ์ผ๋ก?
2.4.2์์ 2.3.0
@iarna ๋ som ํ๊ท๊ฐ ๋์ ๋ ๊ฒ ๊ฐ์ต๋๋ค.
๋ํ์ด ๋ฌธ์ ์ ์ง๋ฉดํ์ฌ ๋ ๋์ / ์๊ตฌ์ ์ธ ์์ ์ ๋ํ ํต์ฐฐ๋ ฅ์ด ์์ต๋๊น?
์ด๊ฒ์ ์ง๋ ๋ช ๋ฌ ๋์ ์ฐ๋ฆฌ์๊ฒ ๋ค์ ์์๋์์ต๋๋ค-์ฐฝ๋ฌธ-๋งค์ฐ ๊ฐํ์ ์ด์์ต๋๋ค.
write-file-atomic์ ๋ ์ด์ graceful-fs๋ฅผ ์ฌ์ฉํ์ง ์์ต๋๋ค. ์๋ง๋ ๊ทธ๊ฒ๊ณผ ๊ด๋ จ์ด ์์ต๋๊น?
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
๊ทธ๋ฅ ์นฉ ์ธ-Windows Jenkins CI ์๋ฒ์์ jest 23.6์ผ๋ก ์ด๊ฒ์๋ณด๊ณ ์์ต๋๋ค.
--runInBand
์ ์๋ํ์ง๋ง ํ ์คํธ ์๊ฐ์ ๋ ๋ฐฐ๋ก ๋๋ ค์ ์ข์ง ์์ต๋๋ค. ํธ์ ์ ์ ํ ์คํธ๋ฅผ ์คํํ๊ธฐ ๋๋ฌธ์ ํ์์ ๋งค์ฐ ์ฌํ๊ฒ ๋ง๋ค์ง ์๊ณ ๋ ์ฌ์ฉํ ์ ์์ต๋๋ค.package.json
์ graceful-fs ์ฌ์ ์๋ ์๋ํ์ง๋ง ์ฝ๊ฐ์ ํดํน์ ๋๋ค.graceful-fs
๋ ์ด๊ฒ์ ๋ํด ๋ง์ ์ผ์ํ์ง ์๊ธฐ ๋๋ฌธ์ (https://github.com/isaacs/node-graceful-fs/pull/131์ ์๋ 7 ์ ์ดํ๋ก ํ๋์ ๋ณด์ง ๋ชปํ์ต๋๋ค), ์๋ง๋ ํฌํฌ ํ ์๊ฐ์ ๋๋ค. ? ๋๋ ๊ฑฐ๊ธฐ์ ์์๋ฆฌ ์ฃผ์์ ์ถ๊ฐํ์ง๋ง ๋๊ตฐ๊ฐ ๊ฐ์๊ธฐ ์ด๊ฒ์ ๋ถ๋ฅํ๊ธฐ ์ํด ๋ฐ์ด๋ค ๊ฒ์ผ๋ก ๊ธฐ๋ํ์ง ์์ต๋๋ค.) ':