【问题标题】:Force Jenkins pipeline to use specific node version强制 Jenkins 管道使用特定的节点版本
【发布时间】:2019-10-24 20:05:19
【问题描述】:

我有一个 Jenkinsfile,它应该使用 nvm 在管道中安装特定的 nodejs。此管道使用安装了 nvm 的 Jenkins 代理。这是 Jenkinsfile 的样子:

    #!groovy

pipeline {
   agent { label 'nvm' }
   options {
    // Add timestamps to the console output
    timestamps()
    // Avoid clutter - only keep the last 15 builds
    buildDiscarder(logRotator(numToKeepStr: '15', artifactNumToKeepStr: '15'))
    }
    environment {
    shortCommit = sh(returnStdout: true, script: 'git rev-parse HEAD').trim().take(8)
    }
    stages {
       stage('Initialize Build') {
          steps {
          initBuild(commit: env.shortCommit)
          }
       }
      stage('Unit Test') {
    steps {
        echo "Running Tests!"
        sh """#!/bin/bash
            set -exuo pipefail
            /usr/local/nvm/nvm.sh use 10.16.3
            /usr/local/nvm/nvm.sh alias default 10.16.3
            which node
            node -v
            which nvm.sh
            nvm.sh --version
        """
        }
     }
   }

}

当我运行构建时,我总是在标准输出中看到这个:

16:00:48  + /usr/local/nvm/nvm.sh use 10.16.3
16:00:49  + /usr/local/nvm/nvm.sh alias default 10.16.3
16:00:49  + which node
16:00:49  /usr/bin/node
16:00:49  + node -v
16:00:49  v10.14.2
16:00:49  + which nvm.sh
16:00:49  /usr/local/nvm/nvm.sh
16:00:49  + nvm.sh --version

我注意到当我运行which node 时,它总是指向/usr/bin/node。有没有办法在 Jenkinsfile 中覆盖它,以便它实际使用我在 nvm 中配置的节点版本?所以基本上我希望确保 Jenkins 管道指向 nvm 设置的指定节点版本。

【问题讨论】:

  • 由于默认情况下 nvm 安装是基于每个用户的,您可能需要通过运行 @987654325 检查您尝试设置为默认的 Node.js 版本是否已安装并可供 Jenkins 用户使用@.
  • @DibakarAditya 我运行了该命令,但没有输出。所以我尝试更改一些事情,例如以 Jenkins 用户身份运行 nvm 安装/使用,但它仍然指向 /usr/bin /node 和 nvm 列表没有将 10.16.3 视为版本。

标签: jenkins nvm


【解决方案1】:

看起来您在 jenkinsfile 中只提供了“代理”。您还需要在“代理”内提供额外的“节点”

确保在您的 Jenkins 服务器上创建节点。

   pipeline {
       agent { 
               node {  label 'nvm'} 
             }
    options {
    // Add timestamps to the console output

【讨论】:

  • 没有工作.....仍然指向 /usr/bin/node 而不是 nvm 设置的节点版本。
  • 你的节点是否命名为'nvm'?
  • 管道可以工作,但它指向了错误的节点版本。
  • 问题显然是关于正在使用的 Node.js 版本,而不是关于 Jenkins 节点。此外,在此答案中的情况下,在 agent 指令内使用 node 块是多余的,除非您想使用自定义工作区。见jenkins.io/doc/book/pipeline/syntax
【解决方案2】:

在管道中使用 withENV 设置不同版本的节点路径。

【讨论】:

    【解决方案3】:

    可以直接使用node 10路径:

    /usr/bin/node10 -v
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-18
      • 2017-02-01
      • 2012-04-23
      • 2022-07-28
      • 1970-01-01
      • 2017-07-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多