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

upload-artifact CI/CD运行是否需上传build文件夹到分支

分支现状

当前开发工作在两个独立分支上开展:

  • trunk
  • distribute
CI/CD 配置现状

CI/CD流水线配置在distribute分支,向该分支执行push操作时会触发工作流,执行.github/workflow/main.yml中定义的任务,当前配置内容如下:

name: Build & upload to Firebase App Distribution 

on: [push]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:

    # 检出当前仓库代码
    - name: Checkout
      uses: actions/checkout@v2.4.2

    # 上传工作流产物(.apk)
    - uses: actions/upload-artifact@v3
        with:
        name: release-apk
        path: build/app/outputs/flutter-apk/app-release.apk

    # 通过Firebase App Distribution向测试人员分发安装包
    - name: Firebase App Distribution
      uses: wzieba/Firebase-Distribution-Github-Action@v1.3.3
      with:
        appId: ${{secrets.FIREBASE_APP_ID}}
        token: ${{secrets.FIREBASE_TOKEN}
        groups: Testers
        file: build/app/outputs/flutter-apk/app-release.apk

目前/build/目录已被加入.gitignore规则,不会被推送到远端distribute分支,该分支当前仅存放触发CI/CD所需的.github/workflow/main.yml文件。

待解答疑问
  1. 是否需要将/build/从.gitignore中移除,把build文件夹推送到distribute分支,才能让upload-artifact读取到路径为build/app/outputs/flutter-apk/app-release.apk的文件?
  2. upload-artifact的文件读取来源是什么?是从触发工作流的当前分支读取(当前场景下分支内不存在build文件夹),还是从本地项目目录读取(当前场景下本地存在build文件夹)?

当前工作流运行已出现报错,运行环境为distribute分支,该分支.gitignore已配置忽略/build/目录。


解答

结论先行:不需要把build目录提交到仓库,报错的核心原因是工作流缺少Flutter构建步骤,CI运行环境中根本没有生成apk文件。

针对两个疑问逐一说明:

  1. 绝对不要把/build/从.gitignore中移除。build目录是构建过程生成的临时产物,把这类可自动生成、体积大的文件提交到Git仓库是错误实践,会导致仓库体积恶性膨胀、版本历史混乱。
  2. upload-artifact既不读取你本地电脑的文件,也不直接从Git仓库的提交树中找文件,它的读取来源是GitHub Actions分配的临时Runner虚拟机的工作目录:
    • 你本地电脑上的文件不会自动同步到CI的Runner环境。Runner是全新初始化的Ubuntu虚拟机,执行actions/checkout步骤时只会拉取触发工作流的当前分支的已提交内容,不会拉取你本地未提交的代码,也不会拉取你本地生成的build目录。
    • 你当前的工作流仅执行了代码检出操作,完全没有配置Flutter环境、执行apk构建的步骤,Runner工作目录里自然不存在build/app/outputs/flutter-apk/app-release.apk文件,这是报错的直接原因。
    • 另外你当前的yaml配置存在语法错误:${{secrets.FIREBASE_TOKEN}缺少右侧闭合大括号,也会导致工作流解析失败。

修复方案

在Checkout步骤之后、上传产物步骤之前,补全Java/Flutter环境配置、依赖安装、apk构建步骤,修改后的核心工作流配置参考:

steps:
  - name: Checkout
    uses: actions/checkout@v2.4.2

  # 配置Android构建所需的Java环境
  - name: Setup Java
    uses: actions/setup-java@v3
    with:
      distribution: 'zulu'
      java-version: '11'

  # 配置Flutter环境,版本替换为你本地开发使用的对应版本
  - name: Setup Flutter
    uses: subosito/flutter-action@v2
    with:
      flutter-version: '3.10.6'
      channel: 'stable'

  # 拉取项目依赖
  - name: Install dependencies
    run: flutter pub get

  # 构建release版本APK
  - name: Build release APK
    run: flutter build apk --release

  # 原有上传、分发步骤保持不变,注意补全token的闭合大括号
  - uses: actions/upload-artifact@v3
    with:
      name: release-apk
      path: build/app/outputs/flutter-apk/app-release.apk

  - name: Firebase App Distribution
    uses: wzieba/Firebase-Distribution-Github-Action@v1.3.3
    with:
      appId: ${{secrets.FIREBASE_APP_ID}}
      token: ${{secrets.FIREBASE_TOKEN}}
      groups: Testers
      file: build/app/outputs/flutter-apk/app-release.apk

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 20:19:01