0

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

  • 我们有大约 50 个不同的代码(它在我们的主仓库中创建了 50 个文件夹)
  • 每个文件夹由 requirements.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

FAIL LOG 虽然步骤显示成功=(绿色)-


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
4

1 回答 1

0

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

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

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

于 2021-01-21T19:25:22.767 回答