🚀 使用 Cloud Build 进行自动化构建,简直是 DevOps 的神兵利器!
一、准备工作 🛠️
- Google Cloud 项目: 确保你有一个 Google Cloud 项目,并且启用了 Cloud Build API。
- 源代码仓库: 代码放在 GitHub、Cloud Source Repositories 或者 Bitbucket 上。
- Dockerfile(可选): 如果你的应用需要容器化,准备好 Dockerfile。
- Cloud Build 配置文件 (cloudbuild.yaml 或 cloudbuild.json): 定义构建步骤。
二、Cloud Build 配置文件详解 📝
Cloud Build 配置文件是核心!它告诉 Cloud Build 如何构建你的应用。
基本结构:
steps:
- name: 'gcr.io/cloud-builders/docker'
args: ['build', '-t', 'gcr.io/$PROJECT_ID/my-image:$BUILD_ID', '.']
- name: 'gcr.io/cloud-builders/docker'
args: ['push', 'gcr.io/$PROJECT_ID/my-image:$BUILD_ID']
images: ['gcr.io/$PROJECT_ID/my-image:$BUILD_ID']
- steps: 构建步骤列表,每个步骤在一个 Docker 容器中执行。
- name: 使用的构建器镜像,Cloud Build 提供了很多预定义的构建器,比如 docker、gcloud、kubectl 等。
- args: 传递给构建器镜像的参数。
- images: 构建完成后要推送的镜像列表。
常用构建器:
- gcr.io/cloud-builders/docker: 用于构建和推送 Docker 镜像。
- gcr.io/cloud-builders/gcloud: 用于执行 gcloud 命令,比如部署应用到 App Engine 或 Cloud Functions。
- gcr.io/cloud-builders/git: 用于执行 git 命令,比如克隆代码仓库。
- gcr.io/cloud-builders/mvn: 用于构建 Maven 项目。
- gcr.io/cloud-builders/npm: 用于构建 Node.js 项目。
- gcr.io/cloud-builders/kubectl: 用于与 Kubernetes 集群交互。
示例:构建 Docker 镜像并推送到 Container Registry
steps:
- name: 'gcr.io/cloud-builders/docker'
args: ['build', '-t', 'gcr.io/$PROJECT_ID/my-app:$BUILD_ID', '.']
images: ['gcr.io/$PROJECT_ID/my-app:$BUILD_ID']
示例:部署到 App Engine
steps:
- name: 'gcr.io/cloud-builders/gcloud'
args: ['app', 'deploy']
示例:运行单元测试
steps:
- name: 'gcr.io/cloud-builders/mvn'
args: ['test']
使用环境变量 ⚙️
Cloud Build 提供了很多有用的环境变量,比如:
- $PROJECT_ID: Google Cloud 项目 ID。
- $BUILD_ID: 当前构建的 ID。
- $COMMIT_SHA: 触发构建的提交的 SHA 值。
- $BRANCH_NAME: 触发构建的分支名称。
- $TAG_NAME: 触发构建的标签名称。
三、触发构建 🚀
有多种方式触发 Cloud Build:
- 手动触发: 在 Cloud Console 中手动触发构建。
- 通过 Cloud Source Repositories 触发: 当代码推送到 Cloud Source Repositories 时自动触发构建。
- 通过 GitHub 或 Bitbucket 触发: 当代码推送到 GitHub 或 Bitbucket 时自动触发构建。需要配置 Webhook。
- 使用 Cloud Scheduler 定时触发: 定时执行构建。
- 使用 Cloud Functions 触发: 通过 Cloud Functions 监听事件并触发构建。
配置 GitHub 触发器:
- 在 Cloud Console 中,进入 Cloud Build -> Triggers。
- 点击 "Create Trigger"。
- 选择你的代码仓库 (GitHub)。
- 配置触发器:
- Name: 触发器名称。
- Description: 触发器描述。
- Event: 触发事件 (Push to a branch, Create a tag)。
- Source: 仓库和分支/标签。
- Build configuration: 选择 Cloud Build 配置文件 (cloudbuild.yaml)。
- 保存触发器。
四、Google Cloud DevOps 实践示例 🌟
假设我们有一个 Node.js 应用,想要使用 Cloud Build 进行自动化构建、测试和部署到 Cloud Run。
1. Dockerfile
FROM node:14
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 8080
CMD ["npm", "start"]
2. cloudbuild.yaml
steps:
- name: 'gcr.io/cloud-builders/docker'
args: ['build', '-t', 'gcr.io/$PROJECT_ID/node-app:$BUILD_ID', '.']
- name: 'gcr.io/cloud-builders/docker'
args: ['push', 'gcr.io/$PROJECT_ID/node-app:$BUILD_ID']
- name: 'gcr.io/cloud-builders/gcloud'
args: ['run', 'deploy', 'node-app',
'--image', 'gcr.io/$PROJECT_ID/node-app:$BUILD_ID',
'--platform', 'managed',
'--region', 'us-central1',
'--allow-unauthenticated']
images: ['gcr.io/$PROJECT_ID/node-app:$BUILD_ID']
3. 流程
- 代码推送到 GitHub 仓库。
- GitHub Webhook 触发 Cloud Build。
- Cloud Build 执行 cloudbuild.yaml 中的步骤:
- 构建 Docker 镜像。
- 推送 Docker 镜像到 Container Registry。
- 部署应用到 Cloud Run。
五、高级用法 🚀🚀
- 使用 Service Account: 授予 Cloud Build Service Account 必要的权限,比如访问 Container Registry、Cloud Run 等。
- 构建缓存: 使用
cache 字段缓存构建依赖,加快构建速度。
- 自定义构建器: 如果 Cloud Build 提供的构建器不能满足需求,可以创建自定义构建器。
- 构建状态通知: 配置构建状态通知,比如发送到 Slack 或邮件。
🎉 总结:Cloud Build 是一个非常强大的自动化构建工具,可以帮助你实现 CI/CD,提高开发效率!