【问题标题】:How can I escape a multi-line secret in Github workflow?如何在 Github 工作流程中逃避多行秘密?
【发布时间】:2020-07-05 11:47:27
【问题描述】:

我已被指示“以编程方式处理此问题”,但我无法更改或添加凭据文件。

使用 Github Actions,我创建了一个需要 GCloud 身份验证的工作流。不幸的是,该变量似乎在执行 run 命令之前被替换,从而导致产生一堆错误的多行 YAML 文件。

这是 YAML 的 sn-p:

   # 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 变量在执行之前会被替换,而不是作为 env 传递。

如果有人有命令行解决方案,将不胜感激!

请注意,我知道 YAML 中也有一个服务帐户/密钥,但我无法访问它。

【问题讨论】:

  • 什么是错误,看看你是否需要为一个变量转义$ 符号(这样它就不会在早期扩展)。我记得在ansible,你可以简单地使用:{{ variable }}
  • command not found: *** ... github 日志保护实际内容免受秘密。我确实想要扩展变量,问题是github在处理整个YAML文件之前替换了YAML变量。嗯,我想知道我是否真的需要一个 YAML 转义解决方案而不是命令行

标签: bash github-actions


【解决方案1】:

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

示例代码:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-05
    • 2021-12-02
    • 2023-01-16
    • 2021-02-07
    • 2020-04-02
    • 2020-09-29
    • 2020-01-01
    • 2020-01-18
    相关资源
    最近更新 更多