从 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 管道的 Docker 插件 - uid 1005 不存在用户
如何在Jenkins管道中使用自定义Dockerfile名称?