在jenkins管道内使用bash从package.json中提取版本

时间:2018-08-04 08:40:46

标签: jenkins jenkins-pipeline

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

所以我能够提取版本,但是在运行脚本时仍然无法通过版本

7 个答案:

答案 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/