从Jenkins管道中的build.gradle读取android的versionName

时间:2018-12-20 16:40:07

标签: android jenkins gradle jenkins-pipeline gradlew

我的Android项目有一个(Windows)Jenkins管道,我正在尝试获取versionName文件中定义的build.gradle。根据{{​​3}}和https://stackoverflow.com/a/51067119/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

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

1 个答案:

答案 0 :(得分:1)

您可以拆分输出,并在需要的情况下使用输出的必需部分,您可以尝试以下几行:

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