我可以很容易地将第一代Google Cloud的操作部署到GitHub,但现在使用第二代时,我遇到了身份验证错误.

当我合并或推送到我的main分支机构时,我如何设置GitHub工作流来部署我的功能?

这是我以前使用的工作流程

      - id: "deploy"
        uses: "google-github-actions/deploy-cloud-functions@v0"
        with:
          name: "<cloud-function-name>"
          runtime: "python310"
          region: "us-east1"
          entry_point: "<function-in-main-file>"
          timeout: 540
          service_account_email: PROJECT@appspot.gserviceaccount.com
          ingress_settings: ALLOW_ALL
          max_instances: 1

推荐答案

我在this GitHub issue上的一条 comments 中发现了这一点.他们的 comments 是针对 node 函数的.下面我提供的代码是针对Python的,但对于所有这些代码都是相同的.

您需要一个服务帐户json密钥和使用它的YAML--仅此而已!

Service Account

  1. 通过GCP控制台在项目中创建一个service account
    • 授予它Cloud Functions DeveloperService Account User权限(source)
  2. 点击进入服务帐户-&>密钥-&>添加密钥-&>创建JSON密钥
  3. 复制JSON
  4. 现在转到您的GitHub个回购设置-&>"秘密和变量"(边栏)-&>操作
  5. 点击"新建储存库密码"
    • 名称:GCP_SA_DEPLOY_KEY(或您想要的任何名称,在下面的YAML中)
    • 秘诀:粘贴JSON服务帐户密钥

GitHub Action

在你的回购中创建.github/workflows/deploy-python-src.yml(你想怎么命名都行).

更新以下代码中的Deploy命令(如果需要帮助解决此问题,请询问ChatGPT).在测试操作之前,通过在本地运行它来确保它正常工作.

name: Deploy Cloud Functions
run-name: 🚀 ${{ github.actor }} is deploying all cloud functions
on:
  push:
    branches:
      - main
jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - run: ls
      - id: 'auth'
        name: 'Authenticate to Google Cloud'
        uses: 'google-github-actions/auth@v1'
        with:
          credentials_json: '${{ secrets.GCP_SA_DEPLOY_KEY }}'
      - name: 'Set up Cloud SDK'
        uses: 'google-github-actions/setup-gcloud@v1'
        with:
          version: '>= 363.0.0'
      - name: 'Use gcloud CLI'
        run: 'gcloud info'
      - name: 'Deploy to gen2 cloud function'
        run:  |
          gcloud functions deploy <cloud-function-name> \
          --gen2 \
          --region=us-east1 \
          --runtime=python310 \
          --source=<source-folder-in-repo> \
          --entry-point=<function-in-main-file> \
          --trigger-topic=<topic-if-pub-sub>

⚠️Notes⚠️

  • 如果您收到与Cloud Run相关的错误,您可以在Cloud Run GCP控制台中看到具体问题.
  • package that handles the auth建议不使用服务帐户,并提供另一个选项(工作负载身份联合).阅读他们的自述文件以了解其在您的场景中是否安全.

Python相关问答推荐

如何分割我的收件箱,以便连续的数字各自位于自己的收件箱中?

如何判断. text文件中的某个字符,然后读取该行

Python中的锁定类和线程以实现dict移动

解析讨论论坛只给我第一个用户 comments ,但没有给我其他用户回复

脚注在Python中使用regex导致错误匹配

如何使用PyTest根据self 模拟具有副作用的属性

替换字符串中的点/逗号,以便可以将其转换为浮动

线性模型PanelOLS和statmodels OLS之间的区别

根据在同一数据框中的查找向数据框添加值

为什么符号没有按顺序添加?

如何从.cgi网站刮一张表到rame?

使用groupby Pandas的一些操作

把一个pandas文件夹从juyter笔记本放到堆栈溢出问题中的最快方法?

实现自定义QWidgets作为QTimeEdit的弹出窗口

在单个对象中解析多个Python数据帧

让函数调用方程

未调用自定义JSON编码器

在不同的帧B中判断帧A中的子字符串,每个帧的大小不同

搜索按钮不工作,Python tkinter

找到相对于列表索引的当前最大值列表""