我们对无服务器的 Cloud Run 的设计理念很简单:让开发人员能够在完全托管的自动缩放基础架构上运行源代码,并使用 HTTPS 保护的自定义域名。但对于容器来说,通常部署需要两个单独的步骤: 


1.    将您的代码打包到容器镜像中

2.    将此容器镜像部署到 Cloud Run

尽管容器镜像已成为打包、部署和扩展软件的行业标准,但并非每个开发人员都学习容器的工作原理,或学习将他们的代码构建 (build) 到容器镜像中,这毕竟多少是有点学习门槛的。

现在,Google Cloud 提供了一个方便的单一命令来构建您的代码并将其部署到 Cloud Run:

 

gcloud beta run deploy --source=[DIRECTORY]

 

此命令结合了 Google Cloud Buildpacks  Cloud Build 的强大功能,Buildpacks 可让您从源代码自动构建容器镜像,而 Cloud Build 可在云上构建容器镜像,而无需在您的机器上安装 Docker 去打包容器。

支持两种构建模式;两者都是远程在云上执行的,并且都不需要在您的机器上安装 Docker:

1.    如果目录中存在 Dockerfile,则将使用 Dockerfile 构建上传的容器。

2.    如果目录中不存在 Dockerfile,则 buildpacks 会自动检测您正在使用的程序语言,自动获取代码的依赖项,并打包出容器镜像。

让我们看以下的示例 Python 应用程序。(如果您没有本地开发环境,可直接点击前往 shell.cloud.google.com 在浏览器中使用 shell,需要有 Google 账号登录,例如 Gmail 账号或其他注册的 Google 账号。)首先,获取源代码:

 

git clone https://github.com/GoogleCloudPlatform/buildpack-samples.git

 

cd buildpack-samples/sample-python

然后,使用单个命令构建 (build) 和部署 (deploy) 此应用程序(它没有 Dockerfile 哦):

 

$ gcloud beta run deploy my-app --source .

Building using Buildpacks and deploying container to Cloud Run service.

✓ Building and deploying... Done.

  ✓ Uploading sources...

  ✓ Building Container...

  ✓ Creating Revision...

  ✓ Routing traffic...

Done.

Service URL: https://sample-python-[...]-uc.a.run.app

这个单一的命令将您从源代码开始,直接到部署完成 Cloud Run 并提供生产服务的 URL。

它是如何工作的?

这个命令是“ gcloud builds submit”和“ gcloud run deploy --image=[...]”的合并的快捷方式,这里最主要是 gcloud builds 实现了无 Dockerfile 打包容器。

在这种情况下,Buildpacks 自动确定这是一个 Python 应用程序,然后它从requirements.txt文件中确定应用程序的依赖项。最后,它查看 Procfile 以确定如何启动此 Python 服务器。Procfile 里面只有一行声明,是为了说明 Python 程序的调用入口,而用其他语言,例如 Node.js、Java 等,则可以连 Procfile 也不需要。

作为此过程的一部分,buildpacks 自动为您的容器镜像选择一个安全的基础镜像。这样,您就不必担心管理基础镜像,因为它由 Google 主动维护;如果需要更新,下一次部署将自动选择最新的安全补丁。

通过运行此命令,gcloud 命令发送给 Cloud Build 在云上运行的按需构建打包工作。作为开发人员,您不需要在本地构建容器镜像的所有工具和依赖包,也不用考虑如何将代码转换为容器镜像。

事实上,如果您是一个经常运行“ docker build -t […]”然后“ docker push”的开发人员,您可以将本地 Docker 工作流替换为 Cloud Build 命令:

gcloud builds submit -t [...]

它将构建并将生成的镜像推送到 Artifact Registry 容器仓库,甚至无需在本地运行 Docker。

从源代码自动构建

开发经常从本地机器部署源代码,但不是长期的最佳实践——本地源可能包含未版本化的代码更改。最佳实践是在将代码更改 Push Git 代码库时自动触发部署。为此,我们之前发布了一个文章,说明轻松连接和配置持续部署 (CD) 到您的 Cloud Run 服务。通过将您的 GitHub 代码库或其他代码库连接到 Cloud Run,您可以配置自动构建和部署,也无需编写 Dockerfile 或打包文件。

要配置自动化构建 (build),在部署新的 Cloud Run 服务时,选择“Continuously deploy new revisions from a source repository”,连接您的存储库并认证,然后选择使用 Google Cloud Buildpacks 构建源的选项,如下图:

 

设置完成后,Push 到代码分支的更改将自动在 Cloud Build 上构建打包并安全地部署到 Cloud Run。可以直接在 Cloud Run 服务上看到,在 Google Cloud 控制台上监控这些 Build 构建的状态和历史记录。


如果有什么问题,可以通过 GitHub 对 Google Cloud Buildpacks 项目进行问题反馈。


相关推荐