首页 > 解决方案 > 如何在 GitHub 操作中屏蔽多行值?

问题描述

行动:

- id: sets-a-secret
  run: |
    local_secret=$(doppler secrets get GAR_JSON_KEY --plain)
    echo "::add-mask::$local_secret"
    echo "::set-output name=my-secret::$local_secret"
  env:
    DOPPLER_TOKEN: ${{ secrets.DOPPLER_TOKEN }}

local_secret等于:

{
  "type": "service_account",
  "project_id": "contrawork"
}

在 GitHub 日志中,只有值的第一行是隐藏的:

##[debug]/usr/bin/bash -e /var/actions-runner/_runners/1/_work/_temp/10dcce73-cb22-43d9-853d-6c9674f6895e.sh
::add-mask::***
  "type": "service_account",
  "project_id": "contrawork"
}
::set-output name=my-secret::***
##[debug]steps['sets-a-secret']['outputs']['my-secret']='***'
  "type": "service_account",
  "project_id": "contrawork"
}
##[debug]Finishing: Run local_secret=$(doppler secrets get GAR_JSON_KEY --plain)

add-mask避免在输出中暴露多行值的正确方法是什么?

标签: github-actions

解决方案


您可以通过屏蔽每一行来做到这一点。

这是一个例子:

name: Multiline variables

on:
  push:
  workflow_dispatch:

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
        
      - name: Set multiline env variable
        run: |
          echo 'MULTI<<EOF' >> $GITHUB_ENV
          echo -e "Test\nstring" >> $GITHUB_ENV
          echo 'EOF' >> $GITHUB_ENV

      - name: Mask multiline env
        run: |
         while read -r line;
         do
           echo "::add-mask::${line}"
         done <<< "${{ env.MULTI }}"
        
      - name: Print multiline secret
        run: echo -e "${{ env.MULTI }}"

推荐阅读