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