如何在GitHub Action中获取新构建Artifact链接以创建Release?
获取GitHub Actions构建产物链接用于创建Release
两种实现方案
方案一:通过GitHub API直接获取Artifact下载链接
在现有工作流中新增一个依赖build-android的job,调用GitHub API解析出Artifact的下载链接,可直接用于后续Release操作:
on: workflow_dispatch: name: Build jobs: install-and-test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Install npm dependencies run: npm install build-android: needs: install-and-test runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Install npm dependencies run: npm install - name: Build Android Release run: cd android && ./gradlew assembleRelease - name: Upload Artifact uses: actions/upload-artifact@v1 with: name: app-release.apk path: android/app/build/outputs/apk/release/ get-artifact-and-create-release: needs: build-android runs-on: ubuntu-latest steps: - name: 获取Artifact下载链接 id: fetch_artifact_url env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} RUN_ID: ${{ github.run_id }} ARTIFACT_NAME: app-release.apk run: | # 调用GitHub API拉取当前运行的Artifact列表 ARTIFACT_RESPONSE=$(curl -s -H "Authorization: token $GITHUB_TOKEN" \ "https://api.github.com/repos/${{ github.repository }}/actions/runs/$RUN_ID/artifacts") # 用jq筛选目标Artifact的下载链接 DOWNLOAD_URL=$(echo "$ARTIFACT_RESPONSE" | jq -r ".artifacts[] | select(.name == \"$ARTIFACT_NAME\") | .archive_download_url") # 将链接存入步骤变量 echo "download_url=$DOWNLOAD_URL" >> $GITHUB_OUTPUT - name: 打印Artifact链接 run: echo "Artifact下载地址: ${{ steps.fetch_artifact_url.outputs.download_url }}" # 以下是创建Release并上传产物的步骤 - name: 创建Release id: create_release uses: actions/create-release@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: tag_name: v1.0.${{ github.run_number }} release_name: Release v1.0.${{ github.run_number }} body: 自动构建的Android正式版本 draft: false prerelease: false - name: 上传产物到Release uses: actions/upload-release-asset@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: upload_url: ${{ steps.create_release.outputs.upload_url }} asset_path: android/app/build/outputs/apk/release/app-release.apk asset_name: app-release.apk asset_content_type: application/vnd.android.package-archive
方案二:先下载Artifact再创建Release
如果不需要单独获取链接,可直接在后续job中下载已上传的Artifact,再关联到Release:
# 省略前面的install-and-test和build-android步骤,仅展示新增的Release job create-release-with-artifact: needs: build-android runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: 下载构建产物 uses: actions/download-artifact@v1 with: name: app-release.apk path: ./artifact - name: 创建Release id: create_release uses: actions/create-release@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: tag_name: v1.0.${{ github.run_number }} release_name: Release v1.0.${{ github.run_number }} body: 自动构建的Android正式版本 draft: false prerelease: false - name: 上传产物到Release uses: actions/upload-release-asset@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: upload_url: ${{ steps.create_release.outputs.upload_url }} asset_path: ./artifact/app-release.apk asset_name: app-release.apk asset_content_type: application/vnd.android.package-archive
核心注意事项
${{ secrets.GITHUB_TOKEN }}是GitHub自动生成的令牌,默认拥有仓库读写权限,无需手动配置。- Ubuntu-latest环境默认预装
jq工具,用于解析API返回的JSON数据。 - 若使用
actions/upload-artifact@v2+版本,配置参数会略有差异,但核心逻辑保持一致。
内容的提问来源于stack exchange,提问作者Paul
相关产品推荐
相关产品推荐

