如何使用Cloud Builds为Google Cloud函数运行python单元测试



我正试图为我的谷歌云功能构建一个CI/CD管道。我所知道的是,我有本地的gcloud和git开发环境。我在本地环境中编写代码,并有cloudbuilds.yaml文件。写完代码后,我把它推送到谷歌源代码库,在那里我有Build Trigger。它构建并部署功能。

现在我也想要一些测试文件。这意味着,每当我将它推送到源存储库时,它也应该运行测试并构建我的main.py文件,然后部署它。我的cloudbuild.yaml文件是

steps:
- name: 'gcr.io/cloud-builders/gcloud'
args:
- functions 
- deploy
- FunctionName
- --runtime=python37
- --source=.
- --entry-point=function
- --trigger-topic=topic_name
- --region=europe-west3 

您可以在云构建中添加一个步骤。我不知道你是如何运行测试的,但这里有一个在python3.7上下文中运行脚本的例子

- name: 'python:3.7'
entrypoint: 'bash'
args:
- '-c'
- |
run the python script that you want
pip install and others.

更新

在部署函数之前添加此步骤。如果步骤失败(退出代码不同于0(,则云构建过程将停止,并且不会执行部署。

更新2

云构建的概念非常简单。加载一个容器(以name表示(。在容器中,只有卷/workspace被连接并从一个步骤保持到下一个步骤。

这个概念非常重要。如果在一个步骤中设置环境变量或其他变量,则后面的步骤将释放此上下文。只保留/workspace的文件。下一步是仅在当前步骤正确完成时调用(退出代码=0(。

加载容器时,会触发一个命令。如果使用云生成器,默认情况下会调用一个默认入口点(例如,gcloud云生成器会自动启动gcloud命令(。然后您只需要添加args数组就可以提交到此入口点。示例

- name: 'gcr.io/cloud-builders/gcloud'
args:
- functions 
- list

此命令表示gcloud functions listgcloud作为入口点,functionslist作为参数。

如果你的容器没有入口点(比如python容器(,或者你想覆盖你的入口点,你可以用entrypoint关键字指定它。在我的第一个代码示例中,几乎不需要linux概念。入口点是bash。arg是用于执行命令的CCD_ 9。管道|用于允许多命令(多行(命令输入。

如果你只有一个python命令要启动,你可以这样做:

- name: 'python:3.7'
entrypoint: 'python3'
args:
- 'test_main.py'
- '.'

但是,你写的步骤是行不通的。为什么?回到我解释的开头:只保留了/workspace的文件。如果执行pip3 install,则文件不会写入/workspace目录,而是写入系统中的其他位置。当你切换步骤时,你就失去了这个系统上下文。

这就是为什么,多行命令是有用的

- name: 'python:3.7'
entrypoint: 'bash'
args:
- '-c'
- |
pip3 install -r requirements.txt
python3 test_main.py .

希望得到帮助!

相关内容

  • 没有找到相关文章

最新更新