包.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
因此,我能够提取版本,但在运行脚本时仍无法传递
8条答案
按热度按时间enxuqcxy1#
在使用
readJSON
进行编辑后,现在得到的字符串插值是错误的。在Groovy中,单引号内的变量 * 不 * 被替换,只有双引号内的变量才被替换。必须是
5anewei62#
默认情况下,
sh
步骤不返回任何内容,因此packageVersion
应为null
。要返回已执行命令的输出,请按如下方式使用它:
sh的这个变体返回输出,而不是打印输出。
实际上,我想知道,为什么
echo $packageVersion
没有失败并出现错误,因为这个变量没有定义,但应该是echo packageVersion
。ct3nt3jp3#
对于我的这一点:
fdbelqdn4#
这对我很有效:
完整版本号:
仅限主要版本:
k10s72fa5#
zbdgwd5y6#
下面的代码片段对我很有效:感谢@Ferenc Takacs
版本= sh(返回标准输出:真,脚本:“grep '版本'软件包. json|剪切-d“"' -f4| tr '\n' '\0'")
s6fujrry7#
此命令将获取
package.json
中的确切属性version: ...
,并且可以在Mac和Linux上工作。如果您在package.json
中有〉1个version
关键字,则使用grep
的其他解决方案将不会给予您正确的答案(它将返回所有关键字,而不仅仅是您想要的关键字)wwwo4jvm8#
要访问run-script作用域之外的npm环境变量,请使用bash解析该变量:
作者:https://remarkablemark.org/blog/2018/08/14/package-json-version/