用Python实现复杂自动化任务:优化与CI/CD篇

阅读 20

03-13 12:00

引言

在前几篇文章中,我们介绍了Python在文件处理、定时任务、网络请求、邮件发送、数据处理、并发编程、数据库交互、自动化测试、机器学习、系统监控及运维等方面的应用。本文将进一步深入,探讨如何使用Python进行任务调度、资源优化、以及结合DevOps工具链实现持续集成和持续部署(CI/CD)等高级功能。

十九、任务调度与优化
19.1 使用Celery进行分布式任务调度

Celery是一个强大的分布式任务队列系统,适用于处理大量异步任务。首先安装该库:

pip install celery redis

以下是一个简单的例子,展示如何使用Celery进行任务调度。

from celery import Celery

# 创建Celery实例
app = Celery('tasks', broker='redis://localhost:6379/0')

@app.task
def add(x, y):
    return x + y

if __name__ == "__main__":
    # 启动Celery worker
    app.worker_main()

启动Redis服务器并运行Celery worker后,可以通过以下方式提交任务:

from tasks import add

# 提交任务
result = add.delay(4, 4)
print(result.get(timeout=1))

19.2 资源优化

为了提高任务执行效率,可以对任务进行优先级设置和批量处理。以下是一个简单的例子,展示如何设置任务优先级。

@app.task(priority=5)  # 设置优先级为5
def high_priority_task():
    print("High priority task is running")

@app.task(priority=1)  # 设置优先级为1
def low_priority_task():
    print("Low priority task is running")

if __name__ == "__main__":
    # 提交任务
    high_priority_task.delay()
    low_priority_task.delay()

二十、持续集成与持续部署(CI/CD)
20.1 使用Jenkins进行CI/CD

Jenkins 是一个广泛使用的开源自动化服务器,支持构建、测试和部署应用。以下是一个简单的步骤说明,展示如何使用Jenkins进行CI/CD。

  1. 安装Jenkins
  • 下载并安装Jenkins:Jenkins官网
  • 启动Jenkins服务。
  1. 配置Jenkins Job
  • 打开Jenkins Web界面,创建一个新的自由风格项目。
  • 配置源码管理(如Git),输入仓库地址和凭证。
  • 添加构建触发器(如定期轮询SCM或通过Webhook触发)。
  • 添加构建步骤(如执行Shell脚本或调用Python脚本)。
  1. 编写构建脚本
  • 在项目的根目录下创建一个Jenkinsfile,定义构建流程。

pipeline {
    agent any
    stages {
        stage('Build') {
            steps {
                sh 'python setup.py build'
            }
        }
        stage('Test') {
            steps {
                sh 'pytest tests/'
            }
        }
        stage('Deploy') {
            steps {
                sh './deploy.sh'
            }
        }
    }
}

20.2 使用GitHub Actions进行CI/CD

GitHub Actions 是GitHub提供的自动化平台,支持构建、测试和部署工作流。以下是一个简单的例子,展示如何使用GitHub Actions进行CI/CD。

  1. 创建.github/workflows/ci.yml文件

name: CI Pipeline

on:
  push:
    branches:
      - main
  pull_request:

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v2

      - name: Set up Python
        uses: actions/setup-python@v2
        with:
          python-version: '3.x'

      - name: Install dependencies
        run: |
          python -m pip install --upgrade pip
          pip install -r requirements.txt

      - name: Run tests
        run: pytest tests/

      - name: Deploy to production
        if: github.ref == 'refs/heads/main'
        run: |
          ./deploy.sh

  1. 编写部署脚本: 创建一个简单的部署脚本deploy.sh,用于部署到生产环境。

#!/bin/bash
echo "Deploying to production..."
scp -r . user@your-server:/path/to/deploy
ssh user@your-server 'cd /path/to/deploy && python setup.py install'

二十一、综合案例:完整的CI/CD流水线

假设我们需要构建一个完整的CI/CD流水线,包括任务调度、资源优化、以及使用GitHub Actions进行持续集成和持续部署。以下是完整的代码示例:

from celery import Celery
import time

# 创建Celery实例
app = Celery('tasks', broker='redis://localhost:6379/0')

@app.task(priority=5)
def high_priority_task():
    print("High priority task is running")
    time.sleep(5)

@app.task(priority=1)
def low_priority_task():
    print("Low priority task is running")
    time.sleep(5)

if __name__ == "__main__":
    # 提交任务
    high_priority_task.delay()
    low_priority_task.delay()

# Jenkinsfile 示例
"""
pipeline {
    agent any
    stages {
        stage('Build') {
            steps {
                sh 'python setup.py build'
            }
        }
        stage('Test') {
            steps {
                sh 'pytest tests/'
            }
        }
        stage('Deploy') {
            steps {
                sh './deploy.sh'
            }
        }
    }
}
"""

# deploy.sh 示例
"""
#!/bin/bash
echo "Deploying to production..."
scp -r . user@your-server:/path/to/deploy
ssh user@your-server 'cd /path/to/deploy && python setup.py install'
"""

# GitHub Actions workflow 文件 (.github/workflows/ci.yml)
"""
name: CI Pipeline

on:
  push:
    branches:
      - main
  pull_request:

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v2

      - name: Set up Python
        uses: actions/setup-python@v2
        with:
          python-version: '3.x'

      - name: Install dependencies
        run: |
          python -m pip install --upgrade pip
          pip install -r requirements.txt

      - name: Run tests
        run: pytest tests/

      - name: Deploy to production
        if: github.ref == 'refs/heads/main'
        run: |
          ./deploy.sh
"""

结论

通过上述内容,我们展示了如何使用Python进行复杂的任务调度与优化,以及结合DevOps工具链实现持续集成和持续部署(CI/CD)。

精彩评论(0)

0 0 举报