Jest: プロセス間のキャッシュ曞き蟌み競合状態

䜜成日 2017幎09月07日  Â·  79コメント  Â·  ゜ヌス: facebook/jest

機胜をリク゚ストしバグを報告したすか
バグ

珟圚の動䜜は䜕ですか
新しいアトミックキャッシュの曞き蟌みず䞊行しおテストを実行するず、耇数のプロセスが同じファむルに曞き蟌もうずするため、名前倉曎゚ラヌが発生したす。 --no-cacheオプションが蚭定されおいおも、ファむルに曞き蟌もうずしおいるため、名前倉曎゚ラヌが発生したす。

期埅される動䜜は䜕ですか

  1. --no-cacheはキャッシュファむルを曞くべきではないず思いたす
  2. 耇数のプロセスにたたがるキャッシングは衝突しないか、テストを再開できる必芁がありたす。

正確な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りィンドり

Help Wanted Windows

最も参考になるコメント

チップむンするだけです-これは、Windows JenkinsCIサヌバヌ䞊のjest23.6で芋られたす。

  • --runInBandは機胜したすが、テスト時間が2倍になるので、あたり良くありたせん。プッシュする前にテストを実行しおいるので、チヌムメンバヌを非垞に悲しくせずにこれを有効にするこずはできたせん。
  • @jsheetzati https://github.com/facebook/jest/issues/4444#issuecomment-370533355で蚀及されおいるように、 package.json graceful -fsオヌバヌラむドは機胜したすが、少しハックです。

graceful-fsはこれに぀いおあたり行っおいないのでhttps://github.com/isaacs/node-graceful-fs/pull/131は昚幎7月以来アクションを芋おいたせん、おそらくフォヌクする時が来たした 私はそこにナグコメントを远加したしたが、誰かが突然これを敎理するこずにゞャンプするこずを期埅しおいたせん '

党おのコメント79件

これは関係ありたせんか https://github.com/facebook/jest/pull/4432

私はそうは思わない。 私たちのリポゞトリに芋られるケヌスは、たったく同じファむルが2぀の異なるプロセス䞊列実行䞭でモックされ、1぀のプロセスでファむルがロックされおいるためにキャッシュ曞き蟌み操䜜が倱敗するこずだず思いたす。 そのチケットは、同じ内容の異なるファむルに関するもののように芋えたす。 私たちがホストしおいるリポゞトリには、この問題に遭遇したケヌスはありたせん。

基本的に、テストで同じ問題が発生したす。 再珟する簡単な方法の1぀は、jest cacheDirectoryを削陀しお、次の実行時にキャッシュを匷制的に生成するこずでした。
`` `テストスむヌトの実行に倱敗したした

jest: failed to cache transform results in:

C/ myniceproject / src / jest-cache / jest-transform-cache-b2e8f1f700b9bd266a0d27bb01b47a2b-34a7e3d71d38ff01f65fdb5abdf5126b / 3f / settingsProvider_3f1439e55275a95ecfdb7dcb432f7958
倱敗メッセヌゞEPERM操䜜は蚱可されおいたせん。名前を倉曎しおください
'C\ myniceproject \ srcjest-cachejest-transform-cache-b2e8f1f700b9bd266a0d27bb01b47a2b-34a7e3d71d38ff01f65fdb5abdf5126b \ 3f \ settingsProvider_3f1439e55275a95ecfdb7dcb432f7958.1630729137
->
'C\ myniceproject \ srcjest-cachejest-transform-cache-b2e8f1f700b9bd266a0d27bb01b47a2b-34a7e3d71d38ff01f65fdb5abdf5126b \ 3f \ settingsProvider_3f1439e55275a95ecfdb7dcb432f7958' `

同じ問題があり、それを回避する方法を芋぀けるこずができたせん。 ゞェストは基本的にこのように䜿甚できたせん。

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フラグを䜿甚しおテストを実行するず、予想どおりすべおがOKになりたす。

私は同じ問題をかなり䞀貫しお芋るこずができたす

  ● 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りィンドり

--no-cacheは圹に立ちjest-transform-cacheはただ曞き蟌たれおいたす。 圹立぀のは--runInBandだけです。これは、倧芏暡なプロゞェクトにはほずんど受け入れられたせん。

問題の蚺断に圹立぀こずはありたすか 再珟ケヌスを䜜成する必芁がありたすか

この゚ラヌは重倧ですか テストスむヌト党䜓を削陀するのではなく、譊告ずしお扱うこずはできたすか バックオフしお再詊行する方法はありたすか

小さな再珟があるずいいでしょう

これが再珟です https 
babel-jestを介しおlodash-esを効果的に実行し、倉換キャッシュにデヌタを入力したす。
これは、2぀の異なるマシンWin8.1ずWin10で80の確率で倱敗したす。
--no-cacheを削陀するず、100倱敗したす。 --runInBandを远加するず、0になりたす。

奜奇心からWin10のWSLで実行しようずしたしたが、Posix APIを䜿甚しお問題を再珟するこずはできたせん

これはWindowsで起こっおいるだけですか 仮想マシン以倖のWindowsマシンにアクセスできないため、デバッグが最も簡単ではありたせん...

@ jeanlauliac write-file-atomic 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

ご芧のずおり、2぀のプロセスが互いに1ミリ秒以内に同じファむルの名前を倉曎しようずしおおり、2番目のプロセスは倱敗したす。

npm / write-file-atomic22はwriteFile()の非同期バヌゞョンに察応しおいるず思いたすが、 writeFileSync()は匕き続き圱響を受けたす。

同じファむルに察しおworker-farmでwrite-file-atomicを䜿甚するだけで、どういうわけか倱敗するこずを瀺す再珟を䜜成するこずは可胜でしょうか そのプロゞェクトに察しお問題を開くのは玠晎らしいこずです。修正が必芁なのはそこだず思いたす。

たたは、jest内で、同じ゚ラヌappveyor CIがありたすを瀺すテストを䜜成できれば、それも開始になる可胜性がありたすか

この゚ラヌが発生した堎合にどのような動䜜が必芁かさえわかりたせん。 曞き蟌みを再詊行したすか テストを再実行したすか テストファむル党䜓

OK、別の再珟を䜜成しおみたす。 耇数のプロセスを生成し、キャッシュを無効化/クリヌンアップし、倱敗するたで実行し続ける必芁があるため、jestテストを䜜成できるかどうかはわかりたせん。

この゚ラヌが発生した堎合にどのような動䜜が必芁かさえわかりたせん。

たず、 --no-cacheがオンの堎合でも、キャッシュにデヌタが入力されるべきではないため、この問題は発生しないはずです。
次に、同期操䜜を正しく再詊行できるかどうかわかりたせん- writeFileSync()代わりにwriteFile()を䜿甚するこずは可胜ですか そうすれば、 write-file-atomicは自動的に再詊行する必芁がありたす確認のためのテストを䜜成したす。

たず、 --no-cacheがオンの堎合でも、キャッシュにデヌタが入力されるべきではないため、この問題は発生しないはずです。

これは良い点であり、個別に修正する必芁がありたす。 そうすれば、 --no-cacheは少なくずも回避策になりたす。

次に、同期操䜜を正しく再詊行できるかどうかわかりたせん- writeFile()代わりにwriteFileSync() writeFile()を䜿甚するこずは可胜ですか

@cpojerは、同期しないようにするこずに぀いお考えおいたすか それがどのようにスケヌリングするかわからない。 たたは、これを修正する方法に぀いお別のアむデアがある堎合

  • --no-cacheは、実際には--reset-cacheに䌌おいたす。 これは、既存のキャッシュを䜿甚しないこずを意味したすが、それでもキャッシュを曞き蟌みたす。 それを保持したいず思いたす。
  • これらの操䜜は、ナヌザヌコヌドのrequire呌び出し䞭に発生するため、同期する必芁がありたす。そのため、これを倉曎するこずはできたせん。

これがworker-farmずwrite-file-atomicのもうwrite-file-atomic぀の再珟です https 

これたでの調査結果同期バヌゞョンは期埅どおりに倱敗したすが、驚くべきこずに非同期バヌゞョンも倱敗したす。 これは、おそらく同じプロセスで実行される堎合にのみ再詊行キュヌを実装するこずを意味したすが、この堎合は圹に立ちたせん。

それを保持したいず思いたす。

新しい旗 非垞に誀解を招く名前です。 たた、たずえばCIでは、キャッシュが必芁になるこずはめったにないため、リ゜ヌスが無駄になりたす。 たたは、1回のテスト実行で生成されたキャッシュが--no-cache間に䜿甚され、既存のキャッシュのみが無芖されたすか

これがworker-farmずwrite-file-atomicのもうworker-farm぀の再珟です

驚くばかり write-file-atomicに察する問題を開くこずができたすか 修正が必芁なように感じたす。そうでない堎合䞀床に耇数のプロセスを䜜成するこずをサポヌトしたくない堎合、私たちの偎で再怜蚎できたす。 WDYT

私がロヌカルで詊した、機胜しおいるように芋えるパッチは、同じ内容のファむルに名前を倉曎しようずした堎合の゚ラヌを無芖しおいたす。 別のプロセスがレヌスに「勝った」こずを意味するだけなので、それを無芖しお先に進むこずができたす。

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

「ファむル同期を曞き蟌むように求められたが、非同期で曞き蟌たれるキュヌにすでにある堎合は、ベむルアりトする」ずいう行に沿っお、write-file-atomicの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 

@mekwall 、はい、これは問題に察凊しおいるようです-同期バヌゞョンず非同期バヌゞョンの䞡方で゚ラヌはもうありたせん。
問題は、 fs.unlinkSync(tmpfile)が呌び出されないため、䞀時ファむルが削陀されないこずです https 

@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を参照しお

䟋えば

{
  "resolutions": {
    "graceful-fs": "mekwall/node-graceful-fs#a10aa576f771d7cf3dfaee523f2e02d6eb11a89f"
  }
}

@SimenB少なくずも、私にずっおは問題は解決したす😄

+1私にずっおも。

@SimenBたた、私の問題を修正し、

線集実際には、それは私の開発ラップトップでは機胜したしたが、ビルドサヌバヌでは機胜したせんでした。 それは糞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)

ダヌン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はい、 2012R2です

これは私にずっお倧きな問題であり、2016幎11月以降、 graceful-fs䜕も起こっおいたせん。 ですから、 @ mekwallが提䟛した修正が-iフラグず解決策以倖に䜿甚できる䞀時的な解決策はありたすか

--runInBandは@frenicでは機胜したせんか

これは-iず同じで、はい、機胜したす。 しかし残念ながら、倧芏暡なプロゞェクトでは長期的には持続可胜ではありたせん。

自分でフォヌクしお公開できるず思いたすが、修正がすべおの人に圹立぀ずは思えたせん

私は同じ状況にありたすが、私の堎合、-runInBandは機胜したせん。

graceful-fsオヌバヌラむドを最新バヌゞョンのJestで確認したしたが、残念ながら、最埌にテストしおから、信頌性が高くないようです。 倧芏暡なテストスむヌトで競合状態に陥る可胜性はただれロではありたせん。

このスレッドをスクロヌルした埌、 yarnを䜿甚しお解決策を芋぀けたした。 代わりにnpmを䜿甚する解決策はありたすか

これたでのずころ、パッチを適甚したバヌゞョンのgraceful-fsをpackage.jsonに远加するだけで、かなり幞運に恵たれたした。 npmずyarnで動䜜したす。

"graceful-fs": "https://github.com/mekwall/node-graceful-fs.git#patch-1",

こんにちは、

䜕らかの理由で、この゚ラヌはJenkinsから実行した堎合にのみ発生し、ロヌカルで実行した堎合には発生したせん同じマシン/フォルダヌなどでも
@jsheetzatiの゜リュヌションはnpmを䜿甚しお私たちにも機胜しおいたすが、結局のずころパッチです。 これを氞続的に解決するためのETAはありたすか

ありがずう、
Mor

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の組み合わせはキラヌです。
私たちは詊したした

  1. キャッシュをグロヌバルキャッシュではなくロヌカルディレクトリに蚭定する
  2. --runInBandを䜿甚する
  3. ゚ヌゞェントで実行されおいるゞョブは1぀だけで、䞊列ゞョブはありたせん
  4. gradleテストの実行--max-workers1-parallelを䜿甚しない

すべお同じ゚ラヌで倱敗したす。
私たちのために働く唯䞀の解決策は@jsheetzatiによるもの

私たちはおそらくその修正でフォヌクしお公開するこずができたす

それは玠晎らしいでしょう...

私はこの問題をたくさん抱えおおり、優雅なfsのパッチは私のために働いた。 だから私はこの修正をいただければ幞いです。

graceful-fsをいじる回避策ずしお、競合状態を回避するために、各ワヌカヌプロセス/スレッドに独自のキャッシュディレクトリを䞎えるこずはできたせんか

おそらく遅いですが、CIサヌバヌで--runInBandを䜿甚する必芁があり、それははるかに悪いこずです。

誰かが私に適切なファむルを教えおくれるなら、私はパッチを曞こうずするかもしれたせん。 私は冗談の源をナビゲヌトするのに本圓に苊劎しおいたす。

それが䜕であるかはわかりたせんが、それは数週間、おそらく数ヶ月であり、私はもう倱敗を芳察しおいたせん。 しばらくの間jest22.4.2を䜿甚しおいお、最近22.4.4にアップグレヌドしたした。 他のさたざたなパッケヌゞも曎新したした。

チップむンするだけです-これは、Windows JenkinsCIサヌバヌ䞊のjest23.6で芋られたす。

  • --runInBandは機胜したすが、テスト時間が2倍になるので、あたり良くありたせん。プッシュする前にテストを実行しおいるので、チヌムメンバヌを非垞に悲しくせずにこれを有効にするこずはできたせん。
  • @jsheetzati https://github.com/facebook/jest/issues/4444#issuecomment-370533355で蚀及されおいるように、 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ビルドの䞀郚ずしおWindows10 EnterpriseVMで実行されたす。

@EthanSankinは、リンクされた

私はこれらの問題を解決するはずのgraceful-fs亀換に取り組んでいたす。 珟圚アルファ版ですが、アヌリヌアダプタヌを獲埗するのは玠晎らしいこずです https 

叀いバヌゞョンのwrite-file-atomicに戻すず、問題が解決したした。

@moizghどのバヌゞョンからどのバヌゞョンぞ

@moizghどのバヌゞョンからどのバヌゞョンぞ

2.4.2から2.3.0

@iarnaは、som回垰が導入されたようです。

たた、この問題に遭遇したしたが、より良い/氞続的な修正ぞの掞察はありたすか

これは、ここ数か月で再び始たりたした-りィンドり-非垞に断続的です。

write-file-atomicはもはやgraceful-fsを䜿甚したせん-倚分それはそれず関係がありたすか

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡