【问题标题】:Read android's versionName from build.gradle in Jenkins pipeline从 Jenkins 管道中的 build.gradle 读取 android 的 versionName
【发布时间】:2019-05-21 05:10:48
【问题描述】:

我的 Android 项目有一个 (Windows) Jenkins 管道,我正在尝试获取在 build.gradle 文件中定义的 versionName。根据https://stackoverflow.com/a/51067119/5973853https://stackoverflow.com/a/47437369/5973853 我有以下设置:

build.gradle

android {
  defaultConfig {
    versionCode 71
    versionName "2.3.0.Beta10"
  }
}

task versionName{
  doLast {
    println android.defaultConfig.versionName
  }
}

Jenkinsfile

pipeline {
  environment {
    SERVER_PATH = '\\\\ARK_SRV\\Android\\'
  }
  agent any

  stages {

    stage('Create Directory') {
      steps {
        script {
          def VERSION_NAME = bat (script: "./gradlew -q versionName", returnStdout: true).trim()
          echo "Version Name: ${VERSION_NAME}"
          def FINAL_DIR = SERVER_PATH + VERSION_NAME
          echo "Final Directoy: ${FINAL_DIR}"
          // ...
        }
      }
    }

  }

}

但是,我将整个批处理命令及其输出都放入 VERSION_NAME 变量中,因此打印输出如下所示:

实际值

Version Name: C:\Program Files (x86)\Jenkins\workspace\AndroidTest>./gradlew -q versionName 
2.3.0.Beta10

Final Directoy: \\ARK_SRV\Android\C:\Program Files (x86)\Jenkins\workspace\AndroidTest>./gradlew -q versionName 
2.3.0.Beta10

预期值

Version Name: 2.3.0.Beta10

Final Directoy: \\ARK_SRV\Android\2.3.0.Beta10

我做错了什么?有没有更好的方法从我的build.gradle 中检索defaultConfig 值?

【问题讨论】:

    标签: android jenkins gradle jenkins-pipeline gradlew


    【解决方案1】:

    您可以拆分输出并在您的情况下获取所需的输出部分,您可以尝试以下几行:

    def output = bat (script: "./gradlew -q versionName", returnStdout: true).trim()
    def  VERSION_NAME = output.split('\n')[1]
    echo "Version Name: ${VERSION_NAME}"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-26
      • 2022-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多