Jenkins管道:选择nodejs版本(+ python版本)

我在Jenkinsfile中遇到Jenkins管道的问题。我的Jenkins实例上有4个不同的nodeJs版本。我想选择要在管道中使用的那个,但是官方插件示例(https://wiki.jenkins-

ci.org/display/JENKINS/NodeJS+Plugin)根本不起作用。

我尝试了第一种方法,但由于$ PATH被该tools部分覆盖而失败。

pipeline {

agent any

tools {

// I hoped it would work with this command...

nodejs 'nodejs6'

}

stages {

stage('Example') {

steps {

sh 'npm --version'

// Failed saying :

// Running shell script

//nohup: failed to run command 'sh': No such file or directory

}

}

}

}

我尝试了第二种方法,但失败了,因为该tool命令似乎根本不起作用。

pipeline {

agent any

stages {

stage('Example') {

steps {

// ... or this one

tool name: 'nodejs6'

sh 'node --version'

sh 'npm --version'

// Does not use this version of node, but the default one... 7.5.0 with npm 4.3.0

}

}

}

}

最后,我尝试了一个适用于NodeJS的工具,但是…似乎“不是很聪明”,并且不允许我正确处理我的特定版本的“

Python”-是的,我还有2个不同的版本我想以与节点相同的方式处理Python-

pipeline {

agent any

stages{

stage ('Which NodeJS'){

steps{

withEnv(["PATH+NODEJS=${tool 'nodejs6'}/bin","PATH+PYTHON27=${tool 'python27'}"]) {

// Check node version

sh 'which node' // Works properly

sh 'node -v' // Expected 6.9.x version

sh 'npm -v' // Expected 3.x version

sh 'python27 -v'

// Failed with

// /nd-jenkinsfile_XXX@tmp/xx/script.sh: python27: not found

}

}

}

}

}

我还有第四个解决方案,不使用pipeline语法。它适用于nodejs,但不适用于python(到目前为止)。再一次,手动定义似乎不是很优雅env.PATH

node {

// Setup tools...

stage ('Setup NodeJs'){

def nodejsHome = tool 'nodejs6'

env.NODE_HOME = "${nodejsHome}"

env.PATH = "${nodejsHome}/bin:${env.PATH}"

sh 'which node'

sh 'node -v'

sh 'npm -v'

}

stage ('Setup Python 2.7'){

def pythonBin = tool 'python27'

// Jenkins docker image has Jenkins user's home in "/var/jenkins_home"

sh "rm -Rf /var/jenkins_home/tools/python ; mkdir -p /var/jenkins_home/tools/python"

// Link python to python 2.7

sh "ln -s ${pythonBin} /var/jenkins_home/tools/python/python"

// Include link in path --don't use "~" in path, it won't be resolved

env.PATH = "~/tools/python:${env.PATH}:~/tools/python"

// Displays correctly Python 2.7

sh "python --version"

}

}

总而言之,我只是想知道哪种解决方案(最好是我这里未列出的另一种解决方案)是最好的?您建议哪一个,为什么?

干杯,奥利维尔

回答:

所以。这是来自“ EnvInject”插件的问题:https ://issues.jenkins-

ci.org/browse/JENKINS-26583

如果您想保留EnvInject,则上述我的解决方法#4是正确的解决方案。

env.NODE_HOME="${tool 'Node 6.x'}"

env.PATH="${env.NODE_HOME}/bin:${env.PATH}"

sh 'npm -version'

否则,删除EnvInject插件也是一个可行的解决方案。

以上是 Jenkins管道:选择nodejs版本(+ python版本) 的全部内容, 来源链接: utcz.com/qa/423859.html

回到顶部