MST
星途 面试题库

面试题:在Bash脚本中实现云原生应用的自动化部署与版本管理

你负责一个基于Kubernetes的云原生应用的部署工作。应用代码仓库在GitLab上,有多个版本分支。要求编写一个Bash脚本,能够从指定分支拉取代码,构建Docker镜像并推送到镜像仓库,然后使用Kubernetes的kubectl命令在测试环境和生产环境中根据不同的配置文件进行自动化部署,并在部署成功后记录相关日志。请描述脚本实现思路并写出关键代码。
47.0万 热度难度
编程语言Bash

知识考点

AI 面试

面试题答案

一键面试

实现思路

  1. 获取用户输入:从脚本执行参数中获取要拉取的GitLab分支名称。
  2. 拉取代码:使用git命令从GitLab指定分支拉取代码。
  3. 构建Docker镜像:在代码目录中使用docker build命令构建Docker镜像,镜像标签可包含分支名和时间戳等信息以区分版本。
  4. 推送镜像:使用docker push命令将构建好的镜像推送到镜像仓库。
  5. 部署到测试环境:使用kubectl apply -f命令,指定测试环境的Kubernetes配置文件进行部署。
  6. 部署到生产环境:同理,使用kubectl apply -f命令,指定生产环境的Kubernetes配置文件进行部署。
  7. 记录日志:在每个关键步骤成功执行后,使用echo等命令将相关信息记录到日志文件中,日志文件可包含时间、操作、结果等信息。

关键代码

#!/bin/bash

# 获取分支名称作为参数
branch=$1
if [ -z "$branch" ]; then
    echo "请指定分支名称"
    exit 1
fi

# 拉取代码
git clone -b $branch <gitlab_repository_url>
cd <project_directory>

# 构建Docker镜像
timestamp=$(date +%Y%m%d%H%M%S)
image_tag=your_image_name:$branch-$timestamp
docker build -t $image_tag.

# 推送镜像到镜像仓库
docker push $image_tag

# 部署到测试环境
kubectl apply -f test_env_k8s_config.yaml
echo "$(date): 测试环境部署成功,镜像: $image_tag" >> deployment_log.txt

# 部署到生产环境
kubectl apply -f prod_env_k8s_config.yaml
echo "$(date): 生产环境部署成功,镜像: $image_tag" >> deployment_log.txt

请注意:

  1. <gitlab_repository_url>需替换为实际的GitLab代码仓库URL。
  2. <project_directory>需替换为实际项目代码所在目录。
  3. your_image_name需替换为实际的镜像名称。
  4. test_env_k8s_config.yamlprod_env_k8s_config.yaml需替换为实际的Kubernetes配置文件名及路径。