【发布时间】:2019-06-26 17:01:43
【问题描述】:
我是 Docker/Jenkins 的新手。
Jenkins 通过
触发容器docker run -t -d -u 995:315 -w /workspace/projectname -v /workspace/projectname:/workspace/projectname:rw,z -v /workspace/projectname@tmp:/workspace/projectname@tmp:rw,z circleci/node:latest
我的管道
pipeline {
agent {
docker {
image 'circleci/node:latest'
}
}
environment {
HOME="."
NPM_CONFIG_PREFIX="${pwd()}/.npm-global"
PATH="$PATH:${pwd()}/.npm-global/bin:${pwd tmp: true}/.npm-global/bin"
}
stages {
stage('NPM Config') {
steps {
sh 'npm install -g @angular/cli'
echo "PATH is: $PATH"
sh '.npm-global/bin/ng version'
sh '/workspace/projectname/.npm-global/bin/ng version'
sh 'ng version'
}
}
}
}
echo "PATH is: $PATH" 打印出来
PATH is: /sbin:/usr/sbin:/bin:/usr/bin;/usr/bin/;/etc/;/etc/ssh/ssh/:/workspace/projectname/.npm-global/bin:/workspace/projectname@tmp/.npm-global/bin
这两个
sh '.npm-global/bin/ng version'
sh '/workspace/projectname/.npm-global/bin/ng version'
做我期望sh 'ng version' 做的事情。但是,sh 'ng version' 给了我以下错误
ng version
/workspace/projectname@tmp/durable-9f9bc04a/script.sh: 2: /workspace/projectname@tmp/durable-9f9bc04a/script.sh: ng: not found
我正在努力避免建立自己的形象,下一步该怎么做?
我也只会使用npx,但我需要更改很多存储库及其脚本才能使这项工作正常进行,我不想这样做。
更新:看起来管道正在忽略更改下的 PATH 环境变量
environment {
HOME="."
NPM_CONFIG_PREFIX="${pwd()}/.npm-global"
PATH="/foo/bar"
}
是否有特殊的修改路径的可能?或者可能是权限问题?
【问题讨论】:
-
谢谢,但这真的不是我的问题,不是角度问题,我只是试图简化这个问题,希望我错过了一些简单的东西。如果这就是我所需要的,我会很好,但不幸的是它不是。
-
在调用
sh 'echo "PATH is $PATH"'而不是直接echoing 时,您的PATH是否仍然“更新”? (考虑在某个地方需要一个可能的export PATH,尽管它不应该是这种情况......) -
@StockOverflaw 认为这两者是相同的,但我只是检查并将其更改为
sh 'echo $PATH'打印出默认路径,而不是通过echo "PATH is: $PATH"的路径有什么想法可以解决这个问题吗?导出路径也不起作用 -
这意味着当调用
sh时,管道会生成一个子进程(如输出摘录here 所建议的那样)。我不知道这是否合法,但如果你尝试像这样在声明前加上前缀,詹金斯会不会很生气:export PATH=$PATH:${pwd()}/blahblah/and/so/on?既然是export定义,就允许孩子检索这些变量...
标签: node.js docker jenkins npm