首页 > 解决方案 > 使用 Jenkinsfile (Jenkins Pipeline) 从 Package.json 中提取版本和名称

问题描述

我的问题很简单,我想从 package.json 中提取版本和名称,但是当我提取版本和名称时,我得到了更多 URL,请参阅附件。为什么会这样?

詹金斯文件

 pipeline {
    agent any
    environment { 
        CI = 'true'
        //IMAGE = bat 'node -e "console.log(require(`./package.json`).name);"'
        //VERSION = bat(script: 'npm run get-version')
        //VERSION = bat '(npm run version --silent)'
        //PACKAGE_VERSION = bat '(node -p -e "require(\'./package.json\').version")'
        GIT_COMMIT_SHORT_HASH = GIT_COMMIT.take(7)
        REPOSITORY = 'repo.dimiroma.com'
        PORT = '8085'
        LATEST = 'latest'

    }
     stages {
        stage('Set Build Variables') {
            steps {
                script {

                    VERSION = bat(script: '''node -e "console.log(require('./package.json').version)"''', returnStdout: true).trim()

                    def getProjectName = { ->
                        return bat(
                            returnStdout: true,
                            script: 'node -e "console.log(require(\'./package.json\').name);"'
                        ).trim()
                    }

                    //VERSION = getProjectVersion()
                    IMAGE = getProjectName()
                 }
            }
        }
        stage('Information') {
              steps {                  
                  script{
                      bat 'node -v'
                      bat 'git --version'
                      bat 'docker -v'                     
                      echo "JOB BASE NAME: ${JOB_BASE_NAME} BUILD-NUMBER: ${BUILD_NUMBER}"
                      echo "Version: ${VERSION}"
                      //echo "Version: ${PACKAGE_VERSION}"
                      echo "Name: ${IMAGE}"
                      echo "Branch_name: ${env.BRANCH_NAME}"

                      final scmVars = checkout(scm)
                      echo "scmVars: ${scmVars}"
                      echo "scmVars.GIT_COMMIT: ${scmVars.GIT_COMMIT}"
                      echo "scmVars.GIT_BRANCH: ${scmVars.GIT_BRANCH}"
                  }             
              }
        }
        stage('Install Dependencies') {
            steps {
                bat 'npm install'
            }
        }
        stage('Test') {
            steps {
                bat 'npm test -- --coverage a'
            }
        }
        stage('Create Docker Image'){
              steps {
                  bat "docker images"             
                  bat "docker build . -t ${IMAGE}:${VERSION}-${GIT_COMMIT_SHORT_HASH}"          
              }
          }
    }
}

Dockerfile

请帮忙。

标签: reactjsdevops

解决方案


你可以这样做。我假设您为此安装了 npm 作为工具

    stage("Build and push docker non-release"){
        steps {
            script {
                def version = sh(returnStdout: true, script: "npm version")
                echo "Version is ${version}"
                def versionProps = readJSON text: version
                echo "Project version is ${versionProps['project-name']}"
            }
        }
    }

推荐阅读