如何在一个源代码库中使用 Google Cloud Build 为多个 Google Cloud 功能实现 CI/CD?

问题描述

我们正在使用一个单一存储库(GCP 源存储库),它由一个文件夹组成,用于每个云函数云函数的源代码)。 我们计划做的是使用 Cloud build 实现 CI/CD 管道,但我想知道 如果有一种方法可以以这样一种方式进行设置,即如果我更改一个特定函数的源代码并提交它,那么只会部署该代码

  • 我们有大约 50 个不同的代码(它在我们的主存储库中创建了 50 个文件夹)
  • 每个文件夹由requirement.txt、所需的.json文件和main.py组成

我是新手,第一次实施 CI CD,如果我不能以适当的方式解释我的问题,请原谅我,任何建议都会有很大帮助。

谢谢。

更新 因此,截至目前,通过使用下面建议的 .yaml 文件,我的构建步骤正在完成,但没有创建任何功能,并且我在发布在此下方的构建日志中收到错误

我的 YAML 文件

- name: 'gcr.io/cloud-builders/gcloud'
  entrypoint: 'bash'
  args:
    - -c
    - |    
      for d in $(git diff --name-only --diff-filter=AMDR @~..@ | cut -d'/' -f 1);
      do
        echo $d;
        cd $d
        gcloud functions deploy $d --region=us-central1 --runtime=python37 --trigger-http 
        cd ..
      done

失败日志 虽然步骤显示成功=(绿色)-


FETCHSOURCE
Initialized empty Git repository in /workspace/.git/
From https://source.developers.google.com/p/xyz/r/testRep
 * branch            2f78b61ea0cc45efc3e25570fe4a08707 -> FETCH_HEAD
HEAD is Now at 2fb61 testing
BUILD
Already have image (with digest): gcr.io/cloud-builders/gcloud
fatal: ambiguous argument '@~..@': unkNown revision or path not in the working tree.
Use '--' to separate paths from revisions,like this:
'git <command> [<revision>...] -- [<file>...]'
PUSH
DONE

解决方法

我不知道您的部署是否对每个功能都相同。我认为假设是肯定的。 + 函数名与目录一相同。

因此,我们的想法是提取已更改的目录并循环它们,然后执行操作

steps:
  - name: 'gcr.io/cloud-builders/gcloud'
    entrypoint: 'bash'
    args:
      - -c
      - |    
        for d in $(git diff --name-only --diff-filter=AMDR @~..@ | cut -d'/' -f 1);
        do
          echo $d;
          cd $d
          gecloud functions deploy $d --region=.... --runtime=.... --trigger-http
          cd ..
        done

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...