package.json中的脚本:
"scripts": {
"version": "echo $npm_package_version"
},
Jenkins流程的其中一个阶段:
stage('Build'){
sh 'npm install'
def packageVersion = sh 'npm run version'
echo $packageVersion
sh 'VERSION=${packageVersion} npm run build'
}
我从npm脚本输出中获得了版本,但以下一行
echo $packageVersion
返回空值
packageVersion值分配不正确吗?
编辑: 在使用带有以下代码的管道实用程序步骤时
stage('Build'){
def packageJSON = readJSON file: 'package.json'
def packageJSONVersion = packageJSON.version
echo packageJSONVersion
sh 'VERSION=${packageJSONVersion}_${BUILD_NUMBER}_${BRANCH_NAME} npm run build'
}
我明白了
[Pipeline] echo
1.1.0
[Pipeline] sh
[...] Running shell script + VERSION=_16_SOME_BRANCH npm run build
所以我能够提取版本,但是在运行脚本时仍然无法通过版本
答案 0 :(得分:4)
使用readJSON
进行编辑后,现在得到的字符串插值错误。在Groovy中,单引号内的变量不会被替换,仅在双引号内。
sh 'VERSION=${packageJSONVersion}_${BUILD_NUMBER}_${BRANCH_NAME} npm run build'
必须
sh "VERSION=${packageJSONVersion}_${BUILD_NUMBER}_${BRANCH_NAME} npm run build"
答案 1 :(得分:2)
默认情况下,sh
步骤不返回任何内容,因此packageVersion
应该为null
。
要返回已执行命令的输出,请像这样使用它:
sh(script: 'npm run version', returnStdout: true')
实际上,我想知道为什么echo $packageVersion
不会因错误而失败,因为此变量未定义,而应为echo packageVersion
。
答案 2 :(得分:0)
这对我有用:
完整版本号:
PACKAGE_VERSION = sh returnStdout: true, script: '''grep 'version' package.json | cut -d '"' -f4 | tr '\n' '\0''''
echo "Current package version: $PACKAGE_VERSION"
$ > 1.2.3
仅主要版本:
PACKAGE_VERSION = sh returnStdout: true, script: '''grep 'version' package.json | cut -d '"' -f4 | cut -d '.' -f1 | tr '\n' '\0''''
echo "Current package Major version: $PACKAGE_VERSION"
$ > 1
答案 3 :(得分:0)
下面的代码段为我工作:感谢@Ferenc Takacs
version = sh(returnStdout:true,脚本:“ grep'version'package.json | cut -d'”'-f4 | tr'\ n''\ 0'“)
答案 4 :(得分:0)
此命令将具有version: ...
中的确切属性package.json
,并且可以在Mac和Linux上使用。如果您的grep
中有> 1个version
关键字,则其他使用package.json
的解决方案将无法为您提供正确的答案(它将返回所有关键字,而不仅仅是返回您想要的关键字)
awk -F'"' '/"version": ".+"/{ print $4; exit; }' package.json
答案 5 :(得分:0)
对我来说:
sh(script: "grep \"version\" package.json | cut -d '\"' -f4 | tr -d '[[:space:]]'", returnStdout: true)
答案 6 :(得分:0)
要访问运行脚本范围之外的 npm 环境变量,请使用 bash 解析该变量:
logic [3:0] a
logic [3:0] a_delayed [0:X-1]
always @(posedge clk) begin
a_delayed[0] <= a;
for(int i=1; i<X;i++)
a_delayed[i] <= a_delayed[i-1];
end
作者:https://remarkablemark.org/blog/2018/08/14/package-json-version/