如何应对 GitHub Actions 中构建名称的动态性?
2024-03-21 09:37:43
如何处理 GitHub Actions 中构建名称的动态性,将 artifact 上传到带有动态名称的构建中?
在 GitHub Actions 管道中,有时我们可能需要处理具有动态名称的构建。这通常会发生在构建名称是通过 Gradle 或 Maven 等构建工具动态生成的场景中。在这些情况下,我们需要找到一种方法来在 GitHub Actions 中处理这些动态名称,以便成功将构建工件上传到具有相同动态名称的 artifact 中。
了解问题
考虑以下示例,我们正在使用 Gradle 构建一个 Android 应用程序,构建名称是根据构建日期和时间动态生成的。生成的构建名称如下:
com.xyz.app-v22(1.7.0.6)-24-02-05 10.10.19-stagging-debug.apk
我们的目标是在 GitHub Actions 中将此构建上传到一个名为 stagging_artifact
的 artifact 中。但是,由于构建名称是动态的,我们无法在 path
参数中使用硬编码的名称。
解决方法
为了解决这个问题,我们可以使用以下步骤:
- 获取动态构建名称: 在构建步骤中,我们可以使用
echo
命令将动态构建名称存储在环境变量中。例如:
echo "##[set-env name=DYNAMIC_BUILD_NAME]$(ls app/build/outputs/apk/stagging/debug/*.apk | sed 's/.*\///g')"
- 使用环境变量: 在
upload-artifact
操作中,我们可以使用环境变量来引用动态构建名称。例如:
path: app/build/outputs/apk/stagging/debug/${{ env.DYNAMIC_BUILD_NAME }}
更新后的 GitHub Actions 工作流
更新后的 GitHub Actions 工作流如下:
jobs:
build:
steps:
- name: Get dynamic build name
run: |
DYNAMIC_BUILD_NAME=$(ls app/build/outputs/apk/stagging/debug/*.apk | sed 's/.*\///g')
echo "##[set-env name=DYNAMIC_BUILD_NAME]$DYNAMIC_BUILD_NAME"
- name: Upload APK
uses: actions/[email protected]
with:
name: stagging_artifact
path: app/build/outputs/apk/stagging/debug/${{ env.DYNAMIC_BUILD_NAME }}
常见问题解答
1. 为什么需要获取动态构建名称?
动态构建名称使得使用硬编码的构建名称来上传 artifact 变得困难。我们需要获取动态名称才能在 upload-artifact
操作中引用它。
2. 如何自定义环境变量的名称?
你可以根据需要自定义环境变量的名称。但是,确保在 upload-artifact
操作中使用相同的名称来引用它。
3. 是否可以在构建步骤中直接使用动态构建名称?
不,由于 upload-artifact
操作在不同的步骤中运行,因此在构建步骤中直接使用动态构建名称是不行的。我们需要将其存储在环境变量中,以便在 upload-artifact
步骤中访问它。
4. 是否可以在 upload-artifact
操作中使用通配符?
不,upload-artifact
操作不支持在 path
参数中使用通配符。
5. 如何处理具有多个动态构建名称的情况?
如果你有多个具有动态名称的构建,你可以使用多个 upload-artifact
操作来上传它们,每个操作都使用特定的构建名称环境变量。