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

GitHub Actions:如何在调用者工作流中使用可重用工作流下载的文件?

可重用工作流下载的文件能否在调用者工作流中使用?解决方案汇总

默认情况下不可行。因为可重用工作流与调用者工作流运行在独立的作业(Job)中,各作业的文件系统相互隔离,调用者工作流无法直接访问可重用工作流生成的文件。以下是几种可行的替代方案:

方案1:通过工作流工件(Workflow Artifacts)传递文件

这是跨作业传递文件的标准方式,将可重用工作流中下载的文件上传为工件,再在调用者工作流的后续作业中下载使用。

可重用工作流修改示例

jobs:
  download-secrets:
    runs-on: ubuntu-latest
    steps:
      - name: Download CSSP Secrets
        id: cssp_secrets
        run: |
          az keyvault secret show --name $AZURE_SECRET_NAME --vault-name $AZURE_KEYVAULT_NAME --query value -o tsv > $CSSP_KEY_FILE_NAME
          echo "ENV_CSSP_KEY_FILE_PATH=$GITHUB_WORKSPACE/$CSSP_KEY_FILE_NAME" >> $GITHUB_ENV

      - name: Upload CSSP key file as artifact
        uses: actions/upload-artifact@v4
        with:
          name: cssp-key-file
          path: ${{ env.ENV_CSSP_KEY_FILE_PATH }}

调用者工作流使用示例

jobs:
  # 调用可重用工作流下载并上传工件
  call-reusable-download:
    uses: your-org/your-repo/.github/workflows/reusable-download.yml@main
    with:
      # 传递可重用工作流所需的参数(如密钥名称、密钥库名称)
      azure-secret-name: ${{ secrets.AZURE_SECRET_NAME }}
      azure-keyvault-name: ${{ secrets.AZURE_KEYVAULT_NAME }}
      cssp-key-file-name: "cssp.key"

  # 依赖前面的作业,下载工件并使用文件
  use-downloaded-file:
    needs: call-reusable-download
    runs-on: ubuntu-latest
    steps:
      - name: Download CSSP key file artifact
        uses: actions/download-artifact@v4
        with:
          name: cssp-key-file
          path: ${{ github.workspace }}

      - name: Use the key file
        run: |
          # 文件已下载到当前工作目录,直接使用
          cat cssp.key

方案2:将文件内容通过输出变量传递(适合小文件)

如果下载的是小内容(如密钥文本),可以直接将内容存入可重用工作流的输出变量,调用者工作流引用该变量后再写入文件。

可重用工作流修改示例

jobs:
  fetch-secrets:
    runs-on: ubuntu-latest
    outputs:
      cssp_secret_value: ${{ steps.cssp_secrets.outputs.cssp_secret_value }}
    steps:
      - name: Fetch CSSP Secrets
        id: cssp_secrets
        run: |
          SECRET_VALUE=$(az keyvault secret show --name $AZURE_SECRET_NAME --vault-name $AZURE_KEYVAULT_NAME --query value -o tsv)
          echo "cssp_secret_value=$SECRET_VALUE" >> $GITHUB_OUTPUT

调用者工作流使用示例

jobs:
  call-reusable-fetch:
    uses: your-org/your-repo/.github/workflows/reusable-fetch.yml@main
    with:
      azure-secret-name: ${{ secrets.AZURE_SECRET_NAME }}
      azure-keyvault-name: ${{ secrets.AZURE_KEYVAULT_NAME }}
    outputs:
      cssp_secret: ${{ jobs.call-reusable-fetch.outputs.cssp_secret_value }}

  use-secret-file:
    needs: call-reusable-fetch
    runs-on: ubuntu-latest
    steps:
      - name: Write secret to file
        run: |
          echo "${{ needs.call-reusable-fetch.outputs.cssp_secret }}" > cssp.key

      - name: Use the key file
        run: cat cssp.key

方案3:将下载逻辑封装为自定义Action

自定义Action运行在调用者工作流的同一个作业中,生成的文件直接位于当前作业的文件系统,无需跨作业传递,是最直接的方式。

自定义Action的action.yml示例

name: 'Download CSSP Secrets'
description: '从Azure密钥库下载CSSP密钥并保存到文件'
inputs:
  azure-secret-name:
    description: 'Azure密钥库中的密钥名称'
    required: true
  azure-keyvault-name:
    description: 'Azure密钥库名称'
    required: true
  cssp-key-file-name:
    description: '保存密钥的文件名'
    required: true
outputs:
  file-path:
    description: '密钥文件的路径'
    value: ${{ github.workspace }}/${{ inputs.cssp-key-file-name }}
runs:
  using: 'composite'
  steps:
    - name: Download CSSP Secrets
      shell: bash
      run: |
        az keyvault secret show --name ${{ inputs.azure-secret-name }} --vault-name ${{ inputs.azure-keyvault-name }} --query value -o tsv > ${{ inputs.cssp-key-file-name }}

调用者工作流使用示例

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Download CSSP Secrets
        uses: your-org/your-repo/.github/actions/download-cssp-secrets@main
        with:
          azure-secret-name: ${{ secrets.AZURE_SECRET_NAME }}
          azure-keyvault-name: ${{ secrets.AZURE_KEYVAULT_NAME }}
          cssp-key-file-name: 'cssp.key'

      - name: Use the key file
        run: cat cssp.key

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 05:08:09