简体   繁体   English

Gitlab-CI:Nodejs 应用程序构建失败

[英]Gitlab-CI: Nodejs application fails to build

I am using gitlab-ci to build a react application but the build stage always fails, on my local machine it works fine same thing on my deployment server but when using gitlab-ci it fails with我正在使用 gitlab-ci 构建一个 React 应用程序,但构建阶段总是失败,在我的本地机器上它在我的部署服务器上工作正常但在使用 gitlab-ci 时它失败了

 Line 421:34:   Expected '===' and instead saw '=='                     eqeqeq
  Line 473:13:   'names' is assigned a value but never used              no-unused-vars
  Line 789:96:   Expected '!==' and instead saw '!='                     eqeqeq
  Line 792:182:  Expected '!==' and instead saw '!='                     eqeqeq
  Line 792:258:  Expected '!==' and instead saw '!='                     eqeqeq
  Line 792:295:  Expected '!==' and instead saw '!='                     eqeqeq
  Line 793:161:  Expected '!==' and instead saw '!='                     eqeqeq
  Line 793:236:  Expected '!==' and instead saw '!='                     eqeqeq
  Line 793:272:  Expected '!==' and instead saw '!='                     eqeqeq
  Line 813:203:  Style prop value must be an object                      react/style-prop-object
./src/components/login.component.js
  Line 9:7:    'user' is assigned a value but never used                no-unused-vars
  Line 73:13:  'currentUser' is assigned a value but never used         no-unused-vars
  Line 73:26:  'showModeratorBoard' is assigned a value but never used  no-unused-vars
  Line 73:46:  'showAdminBoard' is assigned a value but never used      no-unused-vars
  Line 73:63:  'SuperAdmin' is assigned a value but never used          no-unused-vars
  Line 73:77:  'showAdminDirect' is assigned a value but never used     no-unused-vars
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! react-jwt-auth@0.1.0 build: `react-scripts build`
npm ERR! Exit status 1
npm ERR! 
npm ERR! Failed at the react-jwt-auth@0.1.0 build script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR!     /builds/tahar.benachour/endarh/.npm/_logs/2021-11-23T12_31_40_565Z-debug.log
Cleaning up file based variables
00:01
ERROR: Job failed: exit code 1

I tried different images but same error我尝试了不同的图像但同样的错误

my gitlab-ci.yml我的 gitlab-ci.yml

stages:
  - setup
  - build
  - deployment

variables:
  npm_config_cache: "$CI_PROJECT_DIR/.npm"

image: node:10

# This folder is cached between builds
.dependencies_cache:
  cache:
    key:
      files:
        - package-lock.json # A transformer en package-lock.json
    paths:
      - .npm
    policy: pull

app-setup:
  stage: setup
  script:
    - npm ci
    - npm run build
  extends: .dependencies_cache
  cache:
    policy: pull-push
  artifacts:
    expire_in: 2h
    paths:
      - .npm
      - build/

Some additional details, I saved logs and build directory as artifact here is the log details一些额外的细节,我将日志和构建目录保存为工件这里是日志细节

0 info it worked if it ends with ok
1 verbose cli [ '/usr/local/bin/node', '/usr/local/bin/npm', 'run', 'build' ]
2 info using npm@6.14.12
3 info using node@v10.24.1
4 verbose run-script [ 'prebuild', 'build', 'postbuild' ]
5 info lifecycle react-jwt-auth@0.1.0~prebuild: react-jwt-auth@0.1.0
6 info lifecycle react-jwt-auth@0.1.0~build: react-jwt-auth@0.1.0
7 verbose lifecycle react-jwt-auth@0.1.0~build: unsafe-perm in lifecycle true
8 verbose lifecycle react-jwt-auth@0.1.0~build: PATH: /usr/local/lib/node_modules/npm/node_modules/npm-lifecycle/node-gyp-bin:/builds/tahar.benachour/endarh/node_modules/.bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
9 verbose lifecycle react-jwt-auth@0.1.0~build: CWD: /builds/tahar.benachour/endarh
10 silly lifecycle react-jwt-auth@0.1.0~build: Args: [ '-c', 'react-scripts build' ]
11 silly lifecycle react-jwt-auth@0.1.0~build: Returned: code: 1  signal: null
12 info lifecycle react-jwt-auth@0.1.0~build: Failed to exec build script
13 verbose stack Error: react-jwt-auth@0.1.0 build: `react-scripts build`
13 verbose stack Exit status 1
13 verbose stack     at EventEmitter.<anonymous> (/usr/local/lib/node_modules/npm/node_modules/npm-lifecycle/index.js:332:16)
13 verbose stack     at EventEmitter.emit (events.js:198:13)
13 verbose stack     at ChildProcess.<anonymous> (/usr/local/lib/node_modules/npm/node_modules/npm-lifecycle/lib/spawn.js:55:14)
13 verbose stack     at ChildProcess.emit (events.js:198:13)
13 verbose stack     at maybeClose (internal/child_process.js:982:16)
13 verbose stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:259:5)
14 verbose pkgid react-jwt-auth@0.1.0
15 verbose cwd /builds/tahar.benachour/endarh
16 verbose Linux 5.4.0-90-generic
17 verbose argv "/usr/local/bin/node" "/usr/local/bin/npm" "run" "build"
18 verbose node v10.24.1
19 verbose npm  v6.14.12
20 error code ELIFECYCLE
21 error errno 1
22 error react-jwt-auth@0.1.0 build: `react-scripts build`
22 error Exit status 1
23 error Failed at the react-jwt-auth@0.1.0 build script.
23 error This is probably not a problem with npm. There is likely additional logging output above.
24 verbose exit [ 1, true ]

the build directory and files are created successfully and it runs fine on my web server so to be honest I don't understand the pipeline failure perhaps as said related to lint and code quality构建目录和文件已成功创建,并且在我的 web 服务器上运行良好所以老实说,我不明白管道故障可能与 lint 和代码质量有关

Those are linter errors.这些是 linter 错误。 Check the npm scripts that are being executed (probabaly on npm run build ) as this is probably running your linter and producing the errors.检查正在执行的 npm 脚本(可能在npm run build上),因为这可能正在运行您的 linter 并产生错误。

I would suggest you run the same thing locally and fix those:)我建议你在本地运行相同的东西并修复它们:)

This doesn't look related to GitLab at all这看起来与 GitLab 完全无关

I was able to solve my problem by adding我能够通过添加来解决我的问题

CI=false && react-scripts build to my package.json CI=false && react-scripts build到我的 package.json

  "scripts": {
    "start": "react-scripts start",
    "build": "CI=false && react-scripts build",
    "test": "react-scripts test",
    "eject": "react-scripts eject"
  },

I recommend quite the opposite approach to your solution: setting CI=true locally instead of setting it to false for the production build.我推荐与您的解决方案完全相反的方法:在本地设置CI=true而不是在生产构建中将其设置为false You can either change your "build"-script, or add CI=true to your.env-file (create it at the root level of your project, if it doesn't exist).您可以更改“构建”脚本,或将CI=true添加到您的 .env 文件(如果不存在,请在项目的根级别创建它)。

Thereafter, you should fix the warnings you have (usage of == and unused variables).此后,您应该修复您的警告(使用==和未使用的变量)。


Additional Explanation:补充说明:

A senior colleague of me advises against suppressing the warnings with CI=false , as javascript/typescript is not the most stable language and important warnings are hid.我的一位资深同事建议不要使用CI=false来抑制警告,因为 javascript/typescript 不是最稳定的语言并且隐藏了重要的警告。

Precisely your error shows, how useful warnings are disabled: The hidden problems of using == and != .准确地说,您的错误显示了禁用警告的有用程度:使用==!=的隐藏问题。 There is a reason why Douglas Crockford's calls them the "evil twins" in JavaScript: The Good Parts , which is laid out in great detail in this StackOverflow answer to the question "Which equals operator (== vs ===) should be used in JavaScript comparisons?".道格拉斯·克罗克福德 (Douglas Crockford) 在JavaScript 中称他们为“邪恶的双胞胎”是有原因的:好的部分,在这个StackOverflow对问题“应该使用哪个等于运算符(== vs ===)”的回答中有详细说明在 JavaScript 比较中?”。

In short: Avoid the usage of == and != as much as possible and stick with their good twins === and !== .简而言之:尽可能避免使用==!=并坚持使用它们的双胞胎===!== Example excerpt from the linked answer for illogical behaviour of the == operator:来自==运算符不合逻辑行为的链接答案的示例摘录:

'' == '0'           // false
0  == ''            // true
0  == '0'           // true

false == 'false'    // false
false == '0'        // true

false == undefined  // false
false == null       // false
null  == undefined  // true

' \t\r\n ' == 0     // true

Furthermore you have many unused variables. 此外,您还有许多未使用的变量。 Unused variables don't provide any value and rather confuse the person who is reading the code, as one usually expect a variable to be used again. 未使用的变量不提供任何值,反而会使阅读代码的人感到困惑,因为人们通常期望再次使用变量。

I ahd the same issue and used the "build": "CI=false && react-scripts build" and it worked for me我遇到了同样的问题并使用了 "build": "CI=false && react-scripts build" 它对我有用

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM