You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Jenkins生成的APK名称中加入Jira故事编号或修改构建号?

当然可以实现!结合你用到的Android Studio、Jenkins、Jira这套技术栈,不管是把Jira故事编号直接塞进APK名称里,还是用它来定制Jenkins的构建号,都有可行的方案,我给你详细拆解下:

方案一:直接将Jira故事编号嵌入APK名称

这个方案的核心是先从Jira/代码提交信息里拿到故事编号,再传递给Android的构建脚本,动态生成带编号的APK文件名。

  • 步骤1:在Jenkins中提取Jira故事编号
    两种常用的提取方式:

    1. 从Git提交信息中自动提取(前提是团队遵循提交规范,比如提交信息带PROJ-123这类Jira编号):
      在Jenkins的构建步骤里加一段shell脚本,提取编号并设置为环境变量:
      # 匹配格式为PROJ-XXX的Jira编号(可根据你的Jira项目前缀修改)
      JIRA_TICKET=$(git log --pretty=format:"%s" -n 1 | grep -oE 'PROJ-[0-9]+')
      # 把变量写入环境文件,供后续步骤使用
      echo "JIRA_TICKET=$JIRA_TICKET" >> $WORKSPACE/jira.env
      
    2. 通过Jenkins的Jira插件关联获取:
      先在Jenkins里配置好Jira的连接(需要API token和权限),然后在构建任务中启用Jira关联,直接从绑定的Jira故事里拉取编号,这种方式更可靠,适合严格关联构建和Jira需求的场景。
  • 步骤2:修改Android的build.gradle动态命名APK
    打开app模块的build.gradle,在android块下的buildTypes里添加动态命名逻辑:

    android {
        // 保留你原本的其他配置
        buildTypes {
            release {
                // 保留你原本的release配置
                applicationVariants.all { variant ->
                    variant.outputs.each { output ->
                        // 获取Jenkins传递的JIRA_TICKET变量,没拿到就用UNKNOWN兜底
                        def jiraTicket = System.getenv("JIRA_TICKET") ?: "UNKNOWN"
                        // 同时可以带上Jenkins原生的构建号
                        def jenkinsBuildNum = System.getenv("BUILD_NUMBER") ?: "0"
                        // 自定义APK名称,格式可以按需调整
                        def apkName = "MyApp-${jiraTicket}-build-${jenkinsBuildNum}-${variant.buildType.name}.apk"
                        output.outputFileName = apkName
                    }
                }
            }
            // debug版本同理,可按需配置
            debug {
                applicationVariants.all { variant ->
                    variant.outputs.each { output ->
                        def jiraTicket = System.getenv("JIRA_TICKET") ?: "UNKNOWN"
                        def jenkinsBuildNum = System.getenv("BUILD_NUMBER") ?: "0"
                        def apkName = "MyApp-${jiraTicket}-build-${jenkinsBuildNum}-${variant.buildType.name}.apk"
                        output.outputFileName = apkName
                    }
                }
            }
        }
    }
    
  • 步骤3:Jenkins构建时传递变量
    在Jenkins的Gradle构建步骤里,确保环境变量能被Gradle读取到,比如执行:

    source $WORKSPACE/jira.env && ./gradlew assembleRelease
    

    或者也可以用Gradle参数传递,比如./gradlew assembleRelease -PJIRA_TICKET=$JIRA_TICKET,对应的build.gradle里用project.property("JIRA_TICKET") ?: "UNKNOWN"来获取。

方案二:将Jira故事编号整合到Jenkins构建号中

如果你希望Jenkins的构建号本身就包含Jira故事编号(比如PROJ-123-45),那APK名称用这个构建号自然就带上了Jira编号,步骤如下:

  • 步骤1:安装并配置Build Name Setter插件
    先在Jenkins插件市场安装Build Name Setter Plugin,然后在构建任务的“构建环境”里勾选“Set Build Name”。

  • 步骤2:自定义构建号格式
    两种方式设置构建号:

    1. 用之前提取的JIRA_TICKET变量,直接设置构建名称为${JIRA_TICKET}-${BUILD_NUMBER},这样构建号就变成PROJ-123-45这种格式。
    2. 用shell脚本生成构建号:
      JIRA_TICKET=$(git log --pretty=format:"%s" -n 1 | grep -oE 'PROJ-[0-9]+')
      # 拼接Jira编号和原生构建号
      CUSTOM_BUILD_NAME="${JIRA_TICKET}-${BUILD_NUMBER}"
      # 写入文件供插件读取
      echo $CUSTOM_BUILD_NAME > $WORKSPACE/build_name.txt
      
      然后在Build Name Setter插件里选择“Read build name from file”,指定build_name.txt的路径即可。
  • 步骤3:修改build.gradle使用自定义构建号
    此时Jenkins的BUILD_NUMBER环境变量已经是带Jira编号的自定义值,所以build.gradle里的命名可以简化:

    android {
        buildTypes {
            release {
                applicationVariants.all { variant ->
                    variant.outputs.each { output ->
                        def customBuildNum = System.getenv("BUILD_NUMBER") ?: "UNKNOWN"
                        def apkName = "MyApp-${customBuildNum}-${variant.buildType.name}.apk"
                        output.outputFileName = apkName
                    }
                }
            }
        }
    }
    
一些注意事项
  • 提交规范约束:如果用提交信息提取Jira号,一定要要求团队成员每次提交代码都带上对应Jira故事的编号,否则会提取不到,此时可以设置构建失败或者用UNKNOWN兜底。
  • 插件权限配置:用Jira插件关联的话,要确保Jenkins服务器有访问Jira的权限,并且配置了正确的API token。
  • 兼容性:Android Gradle插件的版本不同,output.outputFileName的写法可能有细微差异,如果遇到问题,可以调整为output.outputFile = file("${project.buildDir}/outputs/apk/${variant.buildType.name}/${apkName}")。

内容的提问来源于stack exchange,提问作者solfinder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 09:39:08