如何多次运行相同GitHub Actions任务并单独上传Gradle子项目产物
解决GitHub Actions上传Gradle多子项目Jar的路径问题
问题原因
你当前的upload-artifact配置会保留Jar文件的相对目录结构,导致上传后Jar被放在对应子项目的路径下,而非平级展示。
方案1:平级上传所有Jar到同一个Artifact
只需添加flat: true参数,即可忽略原路径,将所有Jar文件直接放在Artifact根目录:
- uses: actions/upload-artifact@v3 with: name: Artifacts path: project*/build/libs/*.jar flat: true
方案2:每个子项目Jar单独上传为独立Artifact(适配未来新增子项目)
如果需要将每个子项目的Jar作为独立Artifact上传,同时避免重复编写任务,可采用以下两种方式:
方式A:使用矩阵遍历预定义子项目
提前列出子项目,后续新增时只需在矩阵中添加名称:
jobs: upload-subproject-jars: runs-on: ubuntu-latest strategy: matrix: subproject: [sub1, sub2] # 新增子项目直接追加到这里 steps: - uses: actions/upload-artifact@v3 with: name: ${{ matrix.subproject }}-jar path: project/${{ matrix.subproject }}/build/libs/*.jar flat: true
方式B:动态识别子项目并上传
适合子项目数量不确定的场景,自动扫描project目录下的子项目:
jobs: upload-subproject-jars: runs-on: ubuntu-latest steps: - name: 扫描子项目列表 id: list-subprojects run: | # 提取project目录下的所有一级子目录名称 SUBPROJECTS=$(find project -maxdepth 1 -type d ! -name project | xargs basename | jq -R . | jq -s .) echo "subprojects=${SUBPROJECTS}" >> $GITHUB_OUTPUT - name: 上传子项目Jar uses: actions/upload-artifact@v3 with: name: ${{ matrix.subproject }}-jar path: project/${{ matrix.subproject }}/build/libs/*.jar flat: true strategy: matrix: subproject: ${{ fromJSON(steps.list-subprojects.outputs.subprojects) }}
内容的提问来源于stack exchange,提问作者Elikill58
相关产品推荐
相关产品推荐

