如何在 Github Actions 中引用多行密钥?

10
我被指示“以编程方式处理此问题”,我没有更改或添加凭据文件的能力。
使用Github Actions,我创建了一个需要进行GCloud身份验证的工作流。不幸的是,在执行run命令之前,变量被替换,导致产生一堆错误的多行YAML文件。
这是YAML的一小部分:
   # Setup gcloud CLI
    - name: Use Google Cloud Platform
      uses: GoogleCloudPlatform/github-actions/setup-gcloud@master
      with:
        version: '270.0.0'
        service_account_email: ${{ secrets.SA_EMAIL }}
        service_account_key: ${{ secrets.GOOGLE_APPLICATION_CREDENTIALS }}

    - run: cd ui/ && pwd && npm install && npm run test
      env:
        CI: true
    - run: |
        echo ${{ secrets.GCP_AUTH_STAGING }} | gcloud auth activate-service-account --key-file=-
        gcloud container clusters get-credentials staging --region northamerica-northeast1 --project example-staging
        cd ui/ && pwd && npm run build && cd build/ && gsutil cp -r . gs://test.example.com/

我尝试过将凭据转义为类似于CREDS=$( ${{ secrets.GCP_AUTH_STAGING }} ),但这只会导致另一个多行问题。我相信 YAML 变量在执行之前被替换,而不是作为环境变量传递。
如果有人有命令行解决方案,那将非常感激!
请注意,我知道 YAML 中也有服务帐户/密钥,但我无法访问它。

有什么错误,看看你是否需要转义 $ 符号来表示一个变量(这样它就不会早期扩展)。我记得在 ansible 中,你可以简单地使用: {{ variable }} - AKS
命令未找到:*** ...github日志保护实际内容免受机密信息泄露。我确实希望该变量被扩展,问题在于github在完全处理YAML文件之前替换了YAML变量。嗯,我想知道是否需要一个YAML转义解决方案而不是命令行。 - crockpotveggies
2个回答

11

使用 base64 对服务帐户 JSON 进行编码,并通过环境变量传递它。在调用 activate-service-account 之前,使用 shell 脚本进行解码。

样例代码:

echo "$GCP_CREDENTIALS" > gcp_credentials_enc.json
cat gcp_credentials_enc.json | base64 -d > gcp_credentials.json

直到今天,它仍然是唯一的答案吗? - Abdennour TOUMI

5

你需要确保它在YAML层面上被正确处理(可以使用|完成):

  - env:
      SSH_KEY: |
        ${{ secrets.SSH_KEY }}

如果在Bash中使用命令,请确保正确解释它。例如,如果您要执行以下操作:

echo ${{ secret.SSH_KEY }}

应该将其转换为引用形式,变成:

echo "${{ secret.SSH_KEY }}"


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接