0

这与我之前提出的一个问题有关:Using groovy to parse JSON object in shell scripts for Jenkins

基本上,我需要将 sh 脚本返回的动态值传递给环境块,以便下一阶段可以重用该值并将版本作为标签传递给名为 Xray 的 JIRA 插件。但我知道在管道执行期间我无法将动态值传递给环境块。所以,我想我需要尝试不同的路线,不知道是否有人可以给我一些建议?

def setLatestAppVersionLabel() {
  def response = sh(script: "curl --silent ${APP_ARTIFACTORY_URL}/${XRAY_PLATFORM}/builds/latest.json", returnStdout: true).trim() as String
  def jsonResponse = readJSON text: response
  LATEST_VERSION = jsonResponse.id
  echo "LATEST_VERSION -> ${LATEST_VERSION}"
}

JSON 响应如下所示:

{"id":"1.0.0-6",
"version":"1.0.0",
"build":6,
"tag":"android-v1.0.0-6",
"commitHash":"5a78c4665xxxxxxxxxxe1b62c682f84",
"dateCreated":"2020-03-02T08:11:29.912Z"}

并且有一个环境块,我想将值传递给那里定义的变量之一@

environment {
        AWS_DEFAULT_REGION = 'uk-xxx'
        XRAY_ENVIRONMENT = 'e2e'
        VERSION_KEY = 'id'
        XRAY_PLATFORM = 'Android'
        APP_ARTIFACTORY_URL = 'https://artifactory.example.com/mobile'
        LATEST_VERSION = ''
}

如果这条路径不起作用,我还能使用什么?想要重新使用从 JSON 响应中获取的最新版本,以供管道中的下一阶段使用。下一阶段如下所示:

stage('Import Result to Xray') {
            when {
                expression { return fileExists('xxx-executor/target/AndroidxxxxE2EResults/cucumber-reports/Cucumber.json')}
            }
            steps {
                xrayResultsImport('xxx-executor/target/AndroidxxxxxE2EResults/cucumber-reports/Cucumber.json', 'xxx_ANDROID_E2E_xxxxxxx_Tests', XRAY_LABELS, ['E2E', 'Android', LATEST_VERSION], env.BUILD_URL)
            }
        }

抱歉,由于项目机密性,我必须把 xxxx 放在这个问题上。

4

1 回答 1

1

简而言之,您想使用从 JSON 响应中获取的版本,并希望在 Jenkins 管道的所有阶段都使用它。

确保您已jq在 jenkins 代理中安装了实用程序。

pipeline {
   agent any  
   environment {
     XRAY_LATEST_VERSION = ''
   }
   stages {
        stage(‘Get Version ') {
            steps {
                script {
                    XRAY_LATEST_VERSION = sh(script: 'curl -s ${APP_ARTIFACTORY_URL}/${XRAY_PLATFORM}/builds/latest.json | jq .version | sed \'s/"//g\'', returnStdout: true).trim()
                  }
             }
        } 
        stage('Print'){
            steps{
                echo "${XRAY_LATEST_VERSION}"
            }
        }
    }     
}

您可以在您想要的任何阶段使用该变量${XRAY_LATEST_VERSION},并且该值将被呈现。

于 2020-05-07T13:57:56.063 回答