使用Google Cloud服务创建CI/CD管道

在当今快速发展的软件开发领域,持续集成持续交付(CI/CD)管道成为了自动化软件开发和部署流程的关键。本文将介绍如何利用Google Cloud平台的服务,包括Google Source Repositories、Container Registry、CloudBuild和GoogleKubernetesEngine(GKE),来构建一个完整的CI/CD管道。

前提条件

要跟随本文的实践部分,需要具备基本的Google Cloud知识和一个Google Cloud账户。此外,还需要了解基本的Git命令。对于Docker和容器的理解,以及将要使用的应用程序上下文,可以参考相关博客文章。

项目设置

一旦账户创建完成,在Google Cloud平台的首页上,可以选择创建一个新项目。本文创建了一个名为“k8s-sent-deployment”的项目,并将使用该项目来设置完整的管道。

容器注册表

容器注册表用于存储Docker容器镜像,类似于DockerHub、AWS ECS和其他私有云容器注册表。容器注册表的好处包括安全、私有的Docker注册表、自动构建和部署、深入的漏洞扫描、锁定风险镜像、原生Docker支持以及快速、高可用的访问。

要使用该服务,需要激活API,在搜索栏中搜索“容器注册表”,然后在下一页点击“启用容器注册表API”按钮。

Google源代码仓库

Google源代码仓库是一个版本控制系统,类似于Github/Bitbucket,用于存储、管理和跟踪代码。要使用该服务,需要激活API,在搜索栏中搜索“Cloud Source Repositories API”,然后在着陆页点击“启用”。

一旦API被启用,点击“转到Cloud Source Repositories”按钮,然后点击“开始使用”。可以选择创建一个新的仓库或连接一个外部仓库,如Github或Bitbucket。本文将创建一个新的仓库。如果想使用外部仓库,则可以跳过以下部分。

选择“创建一个新仓库”,输入仓库名称,并选择之前创建的项目,然后点击“创建”。可以选择从Github账户下载“情感分析”应用程序代码,或者使用自己的应用程序。流程将是相同的,只是这里和那里的一些变化。

一旦Cloud Source Repository创建完成,将被带到一个页面,以“将代码添加到仓库”。选择克隆仓库到本地Git仓库,并按照“手动生成凭据”下提到的步骤进行。

Google Kubernetes引擎(GKE)

Kubernetes,也称为K8s,是一个开源系统,用于自动化部署、扩展和管理容器化应用程序。GKE是由Google基础设施管理的Kubernetes。一些好处包括自动扩展、自动升级、自动修复、日志记录和监控、负载均衡。

要使用该服务,需要启用API。在搜索栏中搜索KubernetesEngine API并启用API。一旦API被启用,需要创建一个集群。为此,打开云shell,会在右上角找到一个激活云shell的图标。

要创建一个集群,在云shell中输入以下命令:

gcloud container clusters create mykube --zone "us-west1-b" --machine-type "n1-standard-1" --num-nodes "1"

这将创建一个名为“mykube”的Kubernetes集群,包含1个n1-standard-1机器类型的计算节点。

配置文件

现在,需要为管道创建以下配置文件:

Dockerfile:一个简单的文件,包含构建Docker镜像的指令。每个指令在Dockerfile中是一个命令/操作,例如,使用什么操作系统,安装什么依赖项或如何编译代码等,这些指令作为层。要了解更多关于Docker、容器和如何创建Dockerfile,请查看相关博客。

FROM python:3.8-slim-buster WORKDIR /app COPY . /app RUN pip install -r requirements.txt EXPOSE 5000 CMD ["python3","app.py"]

Deployment YAML:要运行应用程序,需要创建一个Deployment对象,可以使用YAML文件来完成。

apiVersion: apps/v1 kind: Deployment metadata: name: sentiment spec: replicas: 2 selector: matchLabels: app: sentimentanalysis template: metadata: labels: app: sentimentanalysis spec: containers: - name: nlp-app image: gcr.io/k8s-sent-deployment/myapp:v1 ports: - containerPort: 5000

Service YAML:要将运行在一组Pods上的应用程序暴露为网络服务,需要一个Service YAML文件。

apiVersion: v1 kind: Service metadata: name: sentimentanalysis spec: type: LoadBalancer selector: app: sentimentanalysis ports: - port: 80 targetPort: 5000

在这个文件中,指定了kind: Service,在spec type: LoadBalancer中自动分配负载,并且app名称与Deployment YAML文件中的名称相同。它具有端口映射,目标容器端口为5000。

CloudBuild

Cloud Build是一个服务,它在Google CloudPlatform的基础设施上执行构建。Cloud Build可以从各种代码仓库或云存储空间导入源代码,根据规格执行构建,并生成Docker容器或Java存档等工件。

它执行步骤中的命令,类似于在脚本中执行命令。

steps: #Build the image - name: 'gcr.io/cloud-builders/docker' args: ['build', '-t', 'gcr.io/$PROJECT_ID/myapp:v1', '.'] timeout: 180s #Push the image - name: 'gcr.io/cloud-builders/docker' args: ['push', 'gcr.io/$PROJECT_ID/myapp:v1'] # deploy container image to GKE - name: "gcr.io/cloud-builders/gke-deploy" args: - run - --filename=K8s_configs/ - --image=gcr.io/$PROJECT_ID/myapp:v1 - --location=us-west1-b - --cluster=mykube

在第一步中,将构建Docker镜像,在下一步中,将镜像推送到Google Container Registry。最后一步是在Kubernetes集群上部署应用程序,文件名是将包含Deployment和Service YAML文件的文件夹目录,指定之前创建的镜像和集群名称。

注意:$PROJECT_ID变量的值将从环境中获取。

构建管道

现在有了构建管道所需的一切,让开始构建一个。首先,需要创建一个触发器,以便在代码仓库中进行新的更改时触发管道。如果使用GitHub/Bitbucket作为源代码仓库,则可以按照此链接连接到仓库。

要创建一个触发器,在控制台中搜索Cloud Build并点击“创建触发器”。在下一页中,选择触发管道的事件,并为监控任何更改提供仓库和分支,类型选择Cloud Build配置文件,并提供文件位置,然后点击“创建”。

一旦触发器设置完成,将有手动触发管道的选项,或者可以在代码仓库中进行一些更改,管道将自动触发。

让首先检查手动过程,点击“运行”,然后点击“运行触发器”,它将启动管道并遵循Cloud Build YAML文件中的步骤。构建将需要3-4分钟才能完成。一旦构建完成,可以检查容器注册表中的Docker镜像和Kubernetes Engine,确认工作负载和服务是否正在运行。如果构建失败,可以查看日志并检查错误所在并尝试解决。

在案例中,由于权限问题失败了一次,所以如果遇到类似的容器权限问题,只需在IAM控制台或通过云shell添加IAM策略即可:

gcloud projects add-iam-policy-binding k8s-sent-deployment --member=serviceAccount:@cloudbuild.gserviceaccount.com --role=roles/container.developer
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485