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

Posted

技术标签:

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

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

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

以上是关于从 Jenkins 管道中的 build.gradle 读取 android 的 versionName的主要内容,如果未能解决你的问题,请参考以下文章

如何让通用 Webhook 触发器插件与 Jenkins 中的多分支管道一起使用?

在 Jenkins 中从管道中止当前构建

用于 Jenkins 管道的 Docker 插件 - uid 1005 不存在用户

如何在Jenkins管道中使用自定义Dockerfile名称?

使用 Jenkins 管道脚本从 Windows 到 Linux 的 SCP

Jenkins管道+ Artifactory下载未下载