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
相关产品推荐
相关产品推荐

