企业项目管理、ORK、研发管理与敏捷开发工具平台

网站首页 > 精选文章 正文

14天shell脚本入门学习-第十二天#自动化部署

wudianyun 2025-03-14 21:32:59 精选文章 23 ℃

自动化部署脚本是 DevOps 中的重要工具,能够显著提高软件部署的效率和可靠性。通过编写 Shell 脚本,可以自动化完成代码拉取、依赖安装、配置管理、服务启动等任务。以下是一个自动化部署脚本的实战项目示例。


1. 项目需求

假设我们有一个基于 Python 的 Web 应用,需要实现以下自动化部署任务: 1. 从 Git 仓库拉取最新代码。 2. 安装 Python 依赖。 3. 配置环境变量。 4. 启动或重启应用服务。


2. 脚本设计

2.1 脚本功能

  • 拉取代码:从 Git 仓库拉取最新代码。
  • 安装依赖:使用 pip 安装 Python 依赖。
  • 配置环境:从 .env 文件加载环境变量。
  • 启动服务:使用 gunicorn 启动或重启 Web 应用。

2.2 脚本结构

#!/bin/bash
# 自动化部署脚本

# 配置
PROJECT_DIR="/opt/myapp"
GIT_REPO="https://github.com/username/myapp.git"
VENV_DIR="$PROJECT_DIR/venv"
ENV_FILE="$PROJECT_DIR/.env"
PID_FILE="$PROJECT_DIR/app.pid"

# 函数定义
function pull_code() {
    echo "Pulling latest code from Git..."
    cd "$PROJECT_DIR" || exit 1
    git pull origin main
    }

function install_dependencies() {
    echo "Installing Python dependencies..."
    source "$VENV_DIR/bin/activate"
    pip install -r requirements.txt
    }

function configure_environment() {
    echo "Configuring environment..."
    if [ -f "$ENV_FILE" ]; then
        export $(cat "$ENV_FILE" | xargs)
    else
        echo "Environment file not found: $ENV_FILE"
        exit 1
    fi
    }

function start_service() {
    echo "Starting service..."
    cd "$PROJECT_DIR" || exit 1
    source "$VENV_DIR/bin/activate"
    gunicorn -w 4 -b 127.0.0.1:8000 app:app --daemon --pid "$PID_FILE"
    }

function stop_service() {
    echo "Stopping service..."
    if [ -f "$PID_FILE" ]; then
        kill $(cat "$PID_FILE")
        rm "$PID_FILE"
    else
        echo "Service is not running."
    fi
    }

function restart_service() {
    stop_service
    start_service
    }

# 主逻辑
pull_code
install_dependencies
configure_environment
restart_service

echo "Deployment completed successfully."

3. 脚本说明

3.1 配置部分

  • PROJECT_DIR:项目目录。
  • GIT_REPO:Git 仓库地址。
  • VENV_DIR:Python 虚拟环境目录。
  • ENV_FILE:环境变量文件。
  • PID_FILE:服务进程 ID 文件。

3.2 函数定义

  • pull_code:从 Git 仓库拉取最新代码。
  • install_dependencies:激活虚拟环境并安装 Python 依赖。
  • configure_environment:从 .env 文件加载环境变量。
  • start_service:使用 gunicorn 启动 Web 应用。
  • stop_service:停止 Web 应用。
  • restart_service:重启 Web 应用。

3.3 主逻辑

  1. 拉取最新代码。
  2. 安装依赖。
  3. 配置环境变量。
  4. 重启服务。

4. 使用说明

4.1 准备工作

  1. 在服务器上安装 Git、Python 和 pip
  2. 创建项目目录并初始化 Git 仓库:
mkdir -p /opt/myapp
cd /opt/myapp
git init
git remote add origin https://github.com/username/myapp.git
  1. 创建 Python 虚拟环境:
python3 -m venv venv
  1. 创建 .env 文件并配置环境变量:
touch .env
echo "DATABASE_URL=postgres://user:password@localhost/dbname" >> .env

4.2 运行脚本

将脚本保存为 deploy.sh,并赋予执行权限:

chmod +x deploy.sh

运行脚本:

./deploy.sh

5. 扩展功能

5.1 日志记录

将脚本的输出重定向到日志文件:

./deploy.sh >> deploy.log 2>&1

5.2 错误处理

添加错误处理逻辑,确保脚本在出错时退出:

set -e  # 任何命令失败时退出脚本

5.3 回滚机制

在部署失败时,回滚到上一个版本:

function rollback() {
    echo "Rolling back to previous version..."
    cd "$PROJECT_DIR" || exit 1
    git reset --hard HEAD~1
    restart_service
    }

6. 总结

  • 自动化部署脚本可以显著提高部署效率和可靠性。
  • 通过 Git、虚拟环境、环境变量和服务管理工具,可以实现完整的部署流程。
  • 脚本应具备良好的错误处理和日志记录功能,便于排查问题。
  • 可以根据实际需求扩展脚本功能,如回滚机制、多环境支持等。
最近发表
标签列表