Как передать значения Dynami c в блок среды во время выполнения конвейера в Jenkins? - PullRequest
0 голосов
/ 07 мая 2020

Это связано с одним вопросом, который я задавал ранее: Использование groovy для синтаксического анализа объекта JSON в сценариях оболочки для Jenkin

в основном мне нужно будет передать динамический c значение, возвращаемое из сценариев sh в блок среды, чтобы на следующем этапе можно было повторно использовать это значение и передать версию в качестве метки в плагин JIRA под названием Xray. Но я знаю, что я не могу передать значения dynamic c в блок среды во время выполнения конвейера. Итак, я думаю, мне нужно будет попробовать другой маршрут для этого, не уверен, может ли кто-нибудь дать мне несколько советов, пожалуйста?

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, чтобы сделать этот вопрос общим из-за конфиденциальности проекта.

1 Ответ

1 голос
/ 07 мая 2020

Проще говоря, вы хотите использовать версию, которую вы выбрали из ответа 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} на любых этапах, которые хотите, и значение будет отображаться.

...