Hsn*_*Hsn 4 gcloud google-cloud-functions google-source-repositories google-cloud-build
我正在尝试为我的谷歌云功能构建 CI/CD 管道。我所知道的是,我有带有 gcloud 和 git 的本地开发环境。我在本地环境中编写代码并拥有 cloudbuilds.yaml 文件。编写代码后,我将其推送到我有构建触发器的 Google 源代码库。它构建函数并部署它。
现在我也想要一些测试文件。这意味着每当我将它推送到源存储库时,它也应该运行测试并构建我的 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
Run Code Online (Sandbox Code Playgroud)
您可以在 Cloud Build 中添加一个步骤。我不知道你如何运行你的测试,但这里有一个在 python3.7 上下文中运行你的脚本的例子
- name: 'python:3.7'
entrypoint: 'bash'
args:
- '-c'
- |
run the python script that you want
pip install and others.
Run Code Online (Sandbox Code Playgroud)
更新
在您的部署功能之前添加此步骤。如果步骤失败(退出代码不同于 0),则云构建过程停止并且不执行部署。
更新 2
Cloud Build 的概念非常简单。您加载一个容器(以 表示name)。在容器中,/workspace从一个步骤到下一个步骤只附加和保持体积。
这个概念非常重要。如果您在一个步骤中设置环境变量或其他,则后面的步骤将失去此上下文。只/workspace保留的文件。下一步是仅当当前正确完成(退出代码 = 0)时才调用。
当一个容器被加载时,一个命令被触发。如果您使用cloud builder,默认情况下会调用默认入口点(例如, gcloud Cloud Builder 会自动启动 gcloud 命令)。然后你只需要添加 args 数组来提交到这个入口点。例子
- name: 'gcr.io/cloud-builders/gcloud'
args:
- functions
- list
Run Code Online (Sandbox Code Playgroud)
该命令表示gcloud functions list与gcloud作为入口点和functions和 list作为ARGS。
如果你的容器没有入口点(比如 python 容器)或者你想覆盖你的入口点,你可以用entrypoint关键字来指定它。在我的第一个代码示例中,几乎不需要 linux 概念。入口点是 bash。arg-c用于执行命令。管|如果用于允许多命令(多线)命令输入。
如果你只有一个 python 命令要启动,你可以这样做:
- name: 'python:3.7'
entrypoint: 'python3'
args:
- 'test_main.py'
- '.'
Run Code Online (Sandbox Code Playgroud)
但是,您编写的步骤将不起作用。为什么?回到我解释的开头:只/workspace保留了 的文件。如果您执行 a,pip3 install则文件不会写入/workspace目录中,而是写入系统中的其他地方。当您切换步骤时,您会失去此系统上下文。
这就是为什么多行命令很有用
- name: 'python:3.7'
entrypoint: 'bash'
args:
- '-c'
- |
pip3 install -r requirements.txt
python3 test_main.py .
Run Code Online (Sandbox Code Playgroud)
希望这有帮助!
| 归档时间: |
|
| 查看次数: |
686 次 |
| 最近记录: |