Jenkins:无法在单个构建中的不同版本的nodejs中构建nodejs项目

时间:2017-08-25 04:19:16

标签: node.js jenkins jenkins-plugins jenkins-pipeline

最近,我正在尝试通过Jenkins使用nodejs 6,7和8构建一个nodejs项目。

我安装了 Pipeline NPM Integration Plugin 。在 Jenkins>全局工具配置,我添加了不同版本的nodejs。

enter image description here

但是当我构建项目时,它只构建在nodejs版本6中。这是我的Jenkins文件的内容。

#!/usr/bin/env groovy

pipeline {
    agent any
    stages {
        stage('Build') {
            steps {
                nodejs('Chill') {
                  sh 'node --version'
                  sh 'npm --version'
                  sh 'yarn --version'

                  sh 'yarn'
                  sh 'yarn build'
                }
            }
        }

        stage('Test') {
            steps {
                nodejs('Chill') {
                    sh 'yarn test'
                }
            }
        }

        stage('Deploy') {
          steps {
              nodejs('Chill') {
              }
          }
        }
    }
}

这是构建的日志文件。

Started by user Sumit Rai
Obtained Jenkinsfile from git https://github.com/srekcahrai/chill.git
[Pipeline] node
Running on 10.10.0.143 in /home/jenkins-client/jenkins/workspace/Chill SCM
[Pipeline] {
[Pipeline] stage
[Pipeline] { (Declarative: Checkout SCM)
[Pipeline] checkout
 > git rev-parse --is-inside-work-tree # timeout=10
Fetching changes from the remote Git repository
 > git config remote.origin.url https://github.com/srekcahrai/chill.git # timeout=10
Fetching upstream changes from https://github.com/srekcahrai/chill.git
 > git --version # timeout=10
 > git fetch --tags --progress https://github.com/srekcahrai/chill.git +refs/heads/*:refs/remotes/origin/*
 > git rev-parse refs/remotes/origin/master^{commit} # timeout=10
 > git rev-parse refs/remotes/origin/origin/master^{commit} # timeout=10
Checking out Revision 52fb0d17de1a3a2f25292443ee6038d10e22953e (refs/remotes/origin/master)
Commit message: "Added Deploy stage"
 > git config core.sparsecheckout # timeout=10
 > git checkout -f 52fb0d17de1a3a2f25292443ee6038d10e22953e
 > git rev-list 52fb0d17de1a3a2f25292443ee6038d10e22953e # timeout=10
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (Build)
[Pipeline] nodejs
[Pipeline] {
[Pipeline] sh
[Chill SCM] Running shell script
+ node --version
v6.11.2
[Pipeline] sh
[Chill SCM] Running shell script
+ npm --version
3.10.10
[Pipeline] sh
[Chill SCM] Running shell script
+ yarn --version
0.27.5
[Pipeline] sh
[Chill SCM] Running shell script
+ yarn
yarn install v0.27.5
[1/4] Resolving packages...
success Already up-to-date.
$ npm run build

> chill-cli@1.0.0-alpha.2 build /home/jenkins-client/jenkins/workspace/Chill SCM
> run-s lint clean babel


> chill-cli@1.0.0-alpha.2 lint /home/jenkins-client/jenkins/workspace/Chill SCM
> eslint src test


> chill-cli@1.0.0-alpha.2 clean /home/jenkins-client/jenkins/workspace/Chill SCM
> rimraf dist/


> chill-cli@1.0.0-alpha.2 babel /home/jenkins-client/jenkins/workspace/Chill SCM
> babel src/ -d dist/

src/cli/index.js -> dist/cli/index.js
src/common/messages.js -> dist/common/messages.js
src/config/config.js -> dist/config/config.js
src/config/default.config.js -> dist/config/default.config.js
src/index.js -> dist/index.js
src/migrations/20170515111050_create_status_logs_table.js -> dist/migrations/20170515111050_create_status_logs_table.js
src/models/StatusLog.js -> dist/models/StatusLog.js
src/monitoring/Monitor.js -> dist/monitoring/Monitor.js
src/monitoring/eventListener.js -> dist/monitoring/eventListener.js
src/monitoring/init.js -> dist/monitoring/init.js
src/services/email.js -> dist/services/email.js
src/services/events.js -> dist/services/events.js
src/services/hipchat.js -> dist/services/hipchat.js
src/services/notifier.js -> dist/services/notifier.js
src/services/persistence.js -> dist/services/persistence.js
src/services/slack.js -> dist/services/slack.js
src/services/status.js -> dist/services/status.js
src/services/twilio.js -> dist/services/twilio.js
src/services/websocket.js -> dist/services/websocket.js
src/utils/db.js -> dist/utils/db.js
src/utils/emailRenderer.js -> dist/utils/emailRenderer.js
src/utils/http.js -> dist/utils/http.js
src/utils/logger.js -> dist/utils/logger.js
src/utils/string.js -> dist/utils/string.js
src/utils/websocketServer.js -> dist/utils/websocketServer.js
Done in 11.21s.
[Pipeline] sh
[Chill SCM] Running shell script
+ yarn build
yarn build v0.27.5
$ run-s lint clean babel

> chill-cli@1.0.0-alpha.2 lint /home/jenkins-client/jenkins/workspace/Chill SCM
> eslint src test


> chill-cli@1.0.0-alpha.2 clean /home/jenkins-client/jenkins/workspace/Chill SCM
> rimraf dist/


> chill-cli@1.0.0-alpha.2 babel /home/jenkins-client/jenkins/workspace/Chill SCM
> babel src/ -d dist/

src/cli/index.js -> dist/cli/index.js
src/common/messages.js -> dist/common/messages.js
src/config/config.js -> dist/config/config.js
src/config/default.config.js -> dist/config/default.config.js
src/index.js -> dist/index.js
src/migrations/20170515111050_create_status_logs_table.js -> dist/migrations/20170515111050_create_status_logs_table.js
src/models/StatusLog.js -> dist/models/StatusLog.js
src/monitoring/Monitor.js -> dist/monitoring/Monitor.js
src/monitoring/eventListener.js -> dist/monitoring/eventListener.js
src/monitoring/init.js -> dist/monitoring/init.js
src/services/email.js -> dist/services/email.js
src/services/events.js -> dist/services/events.js
src/services/hipchat.js -> dist/services/hipchat.js
src/services/notifier.js -> dist/services/notifier.js
src/services/persistence.js -> dist/services/persistence.js
src/services/slack.js -> dist/services/slack.js
src/services/status.js -> dist/services/status.js
src/services/twilio.js -> dist/services/twilio.js
src/services/websocket.js -> dist/services/websocket.js
src/utils/db.js -> dist/utils/db.js
src/utils/emailRenderer.js -> dist/utils/emailRenderer.js
src/utils/http.js -> dist/utils/http.js
src/utils/logger.js -> dist/utils/logger.js
src/utils/string.js -> dist/utils/string.js
src/utils/websocketServer.js -> dist/utils/websocketServer.js
Done in 9.35s.
[Pipeline] }
[Pipeline] // nodejs
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (Test)
[Pipeline] nodejs
[Pipeline] {
[Pipeline] sh
[Chill SCM] Running shell script
+ yarn test
yarn test v0.27.5
$ NODE_ENV=test mocha

Chill 1.0.0-alpha.2 - Test SuiteLoading config file: chill.test.yml


  cli
    --version
chill 1.0.0-alpha.2
      ✓ should print the chill cli version (1477ms)
    --help
Usage: chill [options]

Options:
  -h, --help     Show help                                             [boolean]
  -c, --config   Configuration file path.
  -V, --version  Show version number                                   [boolean]

      ✓ should print the chill usage help string (1468ms)

  config.get
    ✓ should return the previously resolved config from the cache.

  config.resolve
Loading config file: function () { [native code] }
    ✓ should return default configuration even if the config file is empty.
Loading config file: function () { [native code] }
    ✓ should merge and return both the config loaded from file and the default ones.
Loading config file: function () { [native code] }
    ✓ should return the resolved config that overrides the default values if same keys are found.
Loading config file: Glens
    ✓ should put the resolved config in the cache.

  Monitor.handleStatusChange
    ✓ should trigger the EVENT_STATUS_CHANGED event.

  Monitor.isStatusDifferent
    ✓ should return true if status is different.
    ✓ should return false if status is same.

  Monitor.start
    ✓ should trigger the EVENT_MONITORING_STARTED event.

  email.isEnabled
    ✓ should return true if email notification is enabled.
    ✓ should return false if email notification is not enabled.
Unhandled rejection AssertionError: expected 'Investment Account' to equal 'digital'
    at EventEmitter.<anonymous> (/home/jenkins-client/jenkins/workspace/Chill SCM/test/monitoring/Monitor.handleStatusChange.test.js:24:14)
    at Object.invoke (/home/jenkins-client/jenkins/workspace/Chill SCM/node_modules/sinon/lib/sinon/behavior.js:140:32)
    at EventEmitter.functionStub (/home/jenkins-client/jenkins/workspace/Chill SCM/node_modules/sinon/lib/sinon/stub.js:83:53)
    at Function.invoke (/home/jenkins-client/jenkins/workspace/Chill SCM/node_modules/sinon/lib/sinon/spy.js:194:51)
    at EventEmitter.proxy (/home/jenkins-client/jenkins/workspace/Chill SCM/node_modules/sinon/lib/sinon/spy.js:97:22)
    at emitOne (events.js:96:13)
    at EventEmitter.emit (events.js:188:7)
    at Object.trigger (/home/jenkins-client/jenkins/workspace/Chill SCM/src/services/events.js:16:11)
    at Monitor.handleStatusChange (/home/jenkins-client/jenkins/workspace/Chill SCM/src/monitoring/Monitor.js:69:12)
    at Monitor._callee2$ (/home/jenkins-client/jenkins/workspace/Chill SCM/src/monitoring/Monitor.js:47:12)
    at tryCatch (/home/jenkins-client/jenkins/workspace/Chill SCM/node_modules/regenerator-runtime/runtime.js:65:40)
    at GeneratorFunctionPrototype.invoke [as _invoke] (/home/jenkins-client/jenkins/workspace/Chill SCM/node_modules/regenerator-runtime/runtime.js:303:22)
    at GeneratorFunctionPrototype.prototype.(anonymous function) [as next] (/home/jenkins-client/jenkins/workspace/Chill SCM/node_modules/regenerator-runtime/runtime.js:117:21)
    at step (/home/jenkins-client/jenkins/workspace/Chill SCM/src/monitoring/Monitor.js:31:191)
    at /home/jenkins-client/jenkins/workspace/Chill SCM/src/monitoring/Monitor.js:31:361
    at tryCatcher (/home/jenkins-client/jenkins/workspace/Chill SCM/node_modules/bluebird/js/release/util.js:16:23)
    at Promise._settlePromiseFromHandler (/home/jenkins-client/jenkins/workspace/Chill SCM/node_modules/bluebird/js/release/promise.js:512:31)
    at Promise._settlePromise (/home/jenkins-client/jenkins/workspace/Chill SCM/node_modules/bluebird/js/release/promise.js:569:18)
    at Promise._settlePromise0 (/home/jenkins-client/jenkins/workspace/Chill SCM/node_modules/bluebird/js/release/promise.js:614:10)
    at Promise._settlePromises (/home/jenkins-client/jenkins/workspace/Chill SCM/node_modules/bluebird/js/release/promise.js:693:18)
    at Async._drainQueue (/home/jenkins-client/jenkins/workspace/Chill SCM/node_modules/bluebird/js/release/async.js:133:16)
    at Async._drainQueues (/home/jenkins-client/jenkins/workspace/Chill SCM/node_modules/bluebird/js/release/async.js:143:10)
    at Immediate.Async.drainQueues (/home/jenkins-client/jenkins/workspace/Chill SCM/node_modules/bluebird/js/release/async.js:17:14)
    at runCallback (timers.js:672:20)
    at tryOnImmediate (timers.js:645:5)
    at processImmediate [as _immediateCallback] (timers.js:617:5)

  email.getClient
    ✓ should create a nodemailer transport with provided configurations

  email.notify
    ✓ should send email notification with correct parameters.

  hipchat.isEnabled
    ✓ should return true if hipchat notification is enabled.
    ✓ should return false if hipchat notification is not enabled.

  hipchat.notify
    ✓ should send the notification payload to the hipchat API endpoint.
    ✓ should log error if it fails to send notification to hipchat.

  notifier.notify
    ✓ should notify if slack is enabled
    ✓ should not notify if slack is not enabled

  persistence.persist
    ✓ should persist status log to database.
    ✓ should log an error if it cannot persist to database.

  persistence.getLastStatus
    ✓ should get last status of service from database.
    ✓ should return null if it cannot get last status of service from database.
    ✓ should log an error if it cannot fetch from database.

  slack.isEnabled
    ✓ should return true if slack notification is enabled.
    ✓ should return false if slack notification is not enabled.

  slack.notify
    ✓ should send the notification payload to the slack API endpoint.
    ✓ should log error if it fails to send notification to slack.

  status.getCheckInterval
    ✓ should return maximum interval if status is up.
    ✓ should return minimum interval if status is down.

  center
    ✓ would return the text centered with left-padding slightly less than the right-padding if width is even and text length is odd.
    ✓ would return the text centered with left-padding slightly less than the right-padding if width is odd and text length is even.
    ✓ should return the text centered with equal padding on both sides if the width and text length are both odd numbers.
    ✓ should return the text centered with equal padding on both sides if the width and text length are both even numbers.
    ✓ should return the same text if the width is less than or equal to the text length.
    ✓ should return the centered text with custom fillchar too.

  twilio.isEnabled
    ✓ should return true if twilio notification is enabled.
    ✓ should return false if twilio notification is not enabled

  twilio.notify
    ✓ should send notification from twilio with correct params
    ✓ should log error when twilio fails to send the message

  websocket.isEnabled
    ✓ should return true if websocket notification is enabled.
    ✓ should return false if websocket notification is not enabled.

  websocket.init
    ✓ should initialize websocket server if websocket is enabled.
    ✓ should not initialize websocket server if websocket is disabled.

  websocket.notify
    ✓ should broadcast to all clients.


  47 passing (3s)

Done in 6.85s.
[Pipeline] }
[Pipeline] // nodejs
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (Deploy)
[Pipeline] nodejs
[Pipeline] {
[Pipeline] }
[Pipeline] // nodejs
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
Finished: SUCCESS

在travis中,同样的过程由

完成
language: node_js
node_js:
  - "8"
  - "7"
  - "6"
before_script:
  - yarn build
script:
  - yarn test

我很困惑它是否是插件中的错误,因为插件允许多个版本的nodejs,或者我应该在Jenkinsfile中手动提及它们。

1 个答案:

答案 0 :(得分:0)

我认为缺少工具部分。这是mvn。

的一个例子
pipeline {
    agent { label 'your-label' }
    options {
        timestamps()
        timeout(time: 15, unit: 'MINUTES')
    }
    tools {
        maven 'Maven-3.3.9'
    }
    stages { ......