强制Jenkins流水线使用特定的节点版本

3

我有一个 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中配置的node版本?因此,基本上我希望确保Jenkins流水线指向nvm设置的指定节点版本。

由于nvm默认是基于每个用户安装的,因此您可能需要通过运行“nvm list”来检查Jenkins用户是否已安装并可用于设置为默认的Node.js版本。 - Dibakar Aditya
@DibakarAditya 我运行了那个命令,但没有输出。所以我尝试改变一些东西,比如使用Jenkins用户运行nvm install/use,但它仍然指向/usr/bin/node,而nvm列表中没有看到10.16.3作为一个版本。 - ryekayo
4个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
0

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


0
我们的React/RN Web项目中有一个文件。您可以像这样指定节点版本:
rnc.yarn.default=. $NVM_DIR/nvm.sh && nvm use 14.19.1 && yarn install

0

您可以直接使用Node 10路径:

/usr/bin/node10 -v

0

看起来你在Jenkinsfile中只提供了'agent'。你还需要在'agent'内部提供额外的'node'。

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

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

还是不行......仍然指向 /usr/bin/node,而不是 nvm 设置的 node 版本。 - ryekayo
你的节点是否命名为'nvm'? - Raj Paliwal
管道工作了,但它指向了错误版本的节点。 - ryekayo
问题显然是关于使用的Node.js版本,而不是Jenkins节点。此外,在像这个答案中的情况下,在“代理”指令内使用node块是多余的,除非您想使用自定义工作区。请参见https://jenkins.io/doc/book/pipeline/syntax/。 - Dibakar Aditya

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,