8 CI/CD脚本之编写部署脚本

在上一篇文章中,我们讨论了如何编写构建脚本,以便自动化构建我们的应用程序。在本篇中,我们将聚焦于编写部署脚本,确保我们的构建可以顺利上线并服务于用户。

部署过程通常涉及将应用程序及其依赖项推送到目标环境(如开发、测试或生产环境)。一个良好的部署脚本能够保证这一过程的自动化、可靠性和一致性。

部署脚本的基本结构

一个标准的部署脚本通常包括以下几个部分:

  1. 环境检查:确认当前的运行环境是否符合要求。
  2. 构建产物拉取:从构建服务器或存储库拉取最新的构建产物。
  3. 停止服务:在需要的情况下,先停止当前运行的服务。
  4. 上传新版本:将新版本的应用程序上传到目标服务器。
  5. 启动服务:重启服务,与数据库连接等。
  6. 验证部署:执行一些检查,确保应用正常运行。

下面是一个简单的示例,演示如何用 Bash 编写一个部署脚本。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#!/bin/bash

# 环境设定
TARGET_SERVER="user@your.server.com"
DEPLOY_DIR="/var/www/yourapp"
BUILD_ARTIFACT="yourapp.tar.gz"

# 检查当前环境
echo "Checking environment..."
if [ -z "$TARGET_SERVER" ] || [ ! -f "$BUILD_ARTIFACT" ]; then
echo "Environment setup is incorrect. Exiting."
exit 1
fi

# 拉取最新构建产物
echo "Pulling latest build artifact..."
scp "$BUILD_ARTIFACT" "$TARGET_SERVER:$DEPLOY_DIR"

# 停止服务
echo "Stopping existing service..."
ssh "$TARGET_SERVER" "sudo systemctl stop yourapp"

# 上传新版本
echo "Deploying new version..."
ssh "$TARGET_SERVER" "tar -zxvf $DEPLOY_DIR/$BUILD_ARTIFACT -C $DEPLOY_DIR"

# 启动服务
echo "Starting the service..."
ssh "$TARGET_SERVER" "sudo systemctl start yourapp"

# 验证部署
echo "Verifying deployment..."
ssh "$TARGET_SERVER" "curl -f http://localhost:8080/health"

if [ $? -eq 0 ]; then
echo "Deployment was successful!"
else
echo "Deployment failed!"
exit 1
fi

关键部分解析

  • 环境检测:我们通过条件判断确保目标服务器和构建产物存在,避免在脚本后续操作中出现错误。
  • 使用 SCP 和 SSH:我们使用 scp 从本地将构建产物传输到目标服务器,再通过 ssh 执行远程命令。这种方法是常见的、简洁的自动化部署方式。
  • 服务管理:使用 systemctl 来停止和启动服务,是现代 Linux 系统中管理服务的标准方式。
  • 验证步骤:通过 curl 检查应用的健康状态,如果返回成功状态,我们就认为部署成功。

部署脚本的优化建议

  1. 日志记录:可以为脚本添加详细的日志记录功能,方便后期排查问题。
  2. 回滚机制:为防止发布后出现问题,可以实现保护机制,快速回滚到前一个稳定版本。
  3. 并发部署:在多个服务器上同时部署时,考虑使用并发以提高效率。
  4. 通知系统:使用钉钉、Slack等工具的 API,在部署成功或失败时进行通知。

通过自动化的部署脚本,我们能够极大提高应用的迭代速度,减少人为干预带来的错误。在下一篇中,我们将讨论 参数化和环境管理,这些都会增强我们 CI/CD 流程的灵活性和可维护性。

8 CI/CD脚本之编写部署脚本

https://zglg.work/cicd-pipeline-automation/8/

作者

AI免费学习网(郭震)

发布于

2024-08-15

更新于

2024-08-16

许可协议

分享转发

交流

更多教程加公众号

更多教程加公众号

加入星球获取PDF

加入星球获取PDF

打卡评论