Auto: μžλ™ μ‹€ν–‰ spawnSync / bin / sh E2BIG의 원인 확인

에 λ§Œλ“  2020λ…„ 06μ›” 12일  Β·  6μ½”λ©˜νŠΈ  Β·  좜처: intuit/auto

버그 μ„€λͺ…

ν˜„μž¬ λ‚΄ μ΅œμ‹  λΉŒλ“œλŠ” E2BIG 였λ₯˜λ‘œ 릴리슀 λ‹¨κ³„μ—μ„œ μ‹€νŒ¨ν•©λ‹ˆλ‹€. λ‚˜λŠ” μ•½κ°„μ˜ 쑰사λ₯Όν–ˆκ³  이것은 λ§Žμ€ λͺ…λ Ή 인수 (μ—¬κΈ°μ„œλŠ” μ‚¬λ‘€μ²˜λŸΌ 보이지 μ•ŠμŒ) λ˜λŠ” λ„ˆλ¬΄ 큰 ν…μŠ€νŠΈμ™€ 같은 λͺ‡ 가지 이유 λ•Œλ¬ΈμΌ 수 μžˆμŒμ„ λ°œκ²¬ν–ˆμŠ΅λ‹ˆλ‹€.

ν›„μž 인 것 κ°™μ§€λ§Œ 문제λ₯Ό λ””λ²„κΉ…ν•˜λŠ” 방법을 잘 λͺ¨λ₯΄κ² μŠ΅λ‹ˆλ‹€.

μž„μ‹œ μž‘μ—…μ„ μ‹œλ„ν•˜κ³  μžλ™ μ‹€ν–‰ 쀄에 주석을 λ‹¬κ² μŠ΅λ‹ˆλ‹€.ν•˜μ§€λ§Œ μ–΄λ–€ μ œμ•ˆμ΄λΌλ„ ν™˜μ˜ν•©λ‹ˆλ‹€!

μž¬μƒμ‚°ν•˜λ €λ©΄

μ§€κΈˆ μ•Œμ•„ λ‚΄λ €κ³  λ…Έλ ₯ μ€‘μž…λ‹ˆλ‹€.

μ˜ˆμƒλ˜λŠ” 행동

λ¬Έμ œκ°€λ˜λŠ” νŒŒμΌμ„ μ–ΈκΈ‰ν•˜κ±°λ‚˜ 였λ₯˜λ₯Ό λ°œμƒμ‹œν‚€μ§€ λ§ˆμ‹­μ‹œμ˜€.

ν™˜κ²½ 정보 :

Gitlab CI 및 둜컬 (μ•„μΉ˜ λ¦¬λˆ…μŠ€ λ¨Έμ‹ )

μΆ”κ°€ μ»¨ν…μŠ€νŠΈ

λ‚˜λŠ” 이것이 λ°˜λ“œμ‹œ μžλ™μ°¨ λ•Œλ¬Έμ΄λΌκ³  μƒκ°ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μ•„λ§ˆλ„ 슀폰 문제 일 κ°€λŠ₯성이 λ†’μœΌλ©°, λ―Έλž˜μ— λΉ„μŠ·ν•œ λ¬Έμ œκ°€ λ°œμƒν•˜λŠ” λͺ¨λ“  μ‚¬λžŒκ³Ό 브레인 μŠ€ν†° 디버깅 아이디어λ₯Ό 여기에 κ²Œμ‹œν•˜λŠ” 것이 도움이 될 것이라고 μƒκ°ν–ˆμŠ΅λ‹ˆλ‹€.

bug hacktoberfest

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

해결책은 λ””μŠ€ν¬ μ–΄λ”˜κ°€μ— argsλ₯Ό μ €μž₯ν•˜κ³  env var λŒ€μ‹  λͺ…령이 κ±°κΈ°μ—μ„œ κ°€μ Έ μ˜€λ„λ‘ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. ν•˜μ§€λ§Œ 이것은 ν”ŒλŸ¬κ·ΈμΈμ— λŒ€ν•œ μƒλ‹Ήνžˆ 큰 λ³€ν™”μž…λ‹ˆλ‹€.

이 ν”ŒλŸ¬κ·ΈμΈμ„ 차단 ν•΄μ œν•˜λ €λ©΄ λ™μΌν•œ μž‘μ—…μ„ μˆ˜ν–‰ν•©λ‹ˆλ‹€.

const { SEMVER, execPromise, getCurrentBranch } = require("@auto-it/core");

module.exports = class NextCherryPickPlugin {
  constructor() {
    this.name = "update docs";
  }

  /**
   * Setup the plugin
   *
   * <strong i="7">@param</strong> {import('@auto-canary/core').default} auto
   */
  apply(auto) {
    auto.hooks.beforeCommitChangelog.tapPromise(this.name, async (config) => {
      await execPromise("yarn", ["lint:doc:fix"]);
      await execPromise("git", ["add", "."]);
    });
  }
};

λͺ¨λ“  6 λŒ“κΈ€

이것은 exec ν”ŒλŸ¬κ·ΈμΈμ˜ 치λͺ…적인 결함이라고 μƒκ°ν•©λ‹ˆλ‹€.

E2BIG λŠ” execSync ν˜ΈμΆœμ— μΈμˆ˜κ°€ λ„ˆλ¬΄ λ§ŽμŒμ„ μ˜λ―Έν•©λ‹ˆλ‹€. λ‚˜λŠ” 그것이 λ§ν•˜λŠ” argsκ°€ env λ³€μˆ˜ ( $ARG0 )λ₯Ό 톡해 μ „λ‹¬ν•˜λŠ” λͺ¨λ“  후크 정보라고 ν™•μ‹ ν•©λ‹ˆλ‹€.

이것이 μš°λ¦¬κ°€ κ³ μΉ  μˆ˜μžˆλŠ” 것인지 잘 λͺ¨λ₯΄κ² μŠ΅λ‹ˆλ‹€. 이 μ œν•œμ„ λ¬Έμ„œν™”ν•΄μ•Ό ν•  μˆ˜λ„ 있고 상황에 λ§žλŠ” 정보λ₯Ό μ „λ‹¬ν•˜μ§€ μ•ŠλŠ” μ˜΅μ…˜μ„ μΆ”κ°€ ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

해결책은 λ””μŠ€ν¬ μ–΄λ”˜κ°€μ— argsλ₯Ό μ €μž₯ν•˜κ³  env var λŒ€μ‹  λͺ…령이 κ±°κΈ°μ—μ„œ κ°€μ Έ μ˜€λ„λ‘ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. ν•˜μ§€λ§Œ 이것은 ν”ŒλŸ¬κ·ΈμΈμ— λŒ€ν•œ μƒλ‹Ήνžˆ 큰 λ³€ν™”μž…λ‹ˆλ‹€.

이 ν”ŒλŸ¬κ·ΈμΈμ„ 차단 ν•΄μ œν•˜λ €λ©΄ λ™μΌν•œ μž‘μ—…μ„ μˆ˜ν–‰ν•©λ‹ˆλ‹€.

const { SEMVER, execPromise, getCurrentBranch } = require("@auto-it/core");

module.exports = class NextCherryPickPlugin {
  constructor() {
    this.name = "update docs";
  }

  /**
   * Setup the plugin
   *
   * <strong i="7">@param</strong> {import('@auto-canary/core').default} auto
   */
  apply(auto) {
    auto.hooks.beforeCommitChangelog.tapPromise(this.name, async (config) => {
      await execPromise("yarn", ["lint:doc:fix"]);
      await execPromise("git", ["add", "."]);
    });
  }
};

E2BIG에 λŒ€ν•œ 해결책을 찾을 수 μžˆλ‹€λ©΄ 그것은 ꡉμž₯ ν•  κ²ƒμž…λ‹ˆλ‹€! (λ˜λŠ”μ΄ 문제λ₯Ό λ³Έ λ‹€λ₯Έ μ‚¬λžŒ)

λ‚˜λŠ” 그것에 λŒ€ν•΄ ν™•μ‹€νžˆ 생각할 것이고, 그것을 ν•΄κ²°ν•  방법이 μžˆμ–΄μ•Όν•©λ‹ˆλ‹€. 감사!

execSpawn args λͺ©λ‘μ—μ„œ μžλ™ μ»¨ν…μŠ€νŠΈ μœ„μ— process.env μ™„μ „νžˆ μ „λ‹¬ν•˜λŠ” 것을 λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€. μΆ”κ°€ν•˜λŠ” μ˜΅μ…˜μ΄ μžλ™ νŠΉμ • ν™˜κ²½ λ³€μˆ˜ 만 μ „λ‹¬ν•˜λ„λ‘ 지정할 수 μžˆμŠ΅λ‹ˆκΉŒ?

λ‚˜λŠ” (κ΄€μ‹¬μžˆλŠ” λ°©κ΄€μž) "νŒŒμΌμ— 인수 μ €μž₯"μ†”λ£¨μ…˜μ„ μ „μ μœΌλ‘œμ§€μ§€ν•©λ‹ˆλ‹€. 예, μ΄λŠ” μ£Όμš” λ³€κ²½ μ‚¬ν•­μ΄μ§€λ§Œ ν•„μš”ν•œ μ£Όμš” λ³€κ²½ μ‚¬ν•­μž…λ‹ˆλ‹€.

μ•ˆλ…•ν•˜μ„Έμš”.

이 ν”ŒλŸ¬κ·ΈμΈμ„ 차단 ν•΄μ œν•˜λ €λ©΄ λ™μΌν•œ μž‘μ—…μ„ μˆ˜ν–‰ν•©λ‹ˆλ‹€.

λͺ…ν™•ν•˜κ²Œν•˜κΈ° μœ„ν•΄ 이것을 μ‚¬μš©ν•˜λ €λ©΄ (λΉ„ λ…Έλ“œ / NPM / TypeScript) μ €μž₯μ†Œμ— μ €μž₯ν•˜κ³  ꡬ성 νŒŒμΌμ— "plugins": ["path/to/file"] λ₯Ό μ„€μ •ν•˜κ±°λ‚˜ 더 λ§Žμ€ 것이 μžˆμŠ΅λ‹ˆκΉŒ?

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰