代码之家  ›  专栏  ›  技术社区  ›  gka

在jenkins管道中从package.json和bash中提取版本

  •  5
  • gka  · 技术社区  · 6 年前

    package.json中的脚本:

    "scripts": {
        "version": "echo $npm_package_version"
      },
    

    詹金斯管道的一个阶段:

    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
    

    所以我可以提取版本,但是在运行脚本时仍然不能传递它

    2 回复  |  直到 6 年前
        1
  •  5
  •   StephenKing    6 年前

    编辑后使用 readJSON ,现在字符串插值错误。单引号中的变量是 在Groovy中替换,仅在双引号内。

    sh 'VERSION=${packageJSONVersion}_${BUILD_NUMBER}_${BRANCH_NAME} npm run build'
    

    必须是

    sh "VERSION=${packageJSONVersion}_${BUILD_NUMBER}_${BRANCH_NAME} npm run build"
    
        2
  •  2
  •   StephenKing    6 年前

    这个 sh 默认情况下,step不返回任何内容,因此 packageVersion 应该是 null .

    要返回已执行命令的输出,请按如下方式使用:

    sh(script: 'npm run version', returnStdout: true')
    

    实际上,我想知道,为什么 echo $packageVersion 不会因错误而失败,因为未定义此变量,但应 echo packageVersion .

        3
  •  0
  •   Ferenc Takacs    5 年前

    这对我有效:

    完整版本号:

    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