news 2026/10/15 13:38:46

HoRain云--Python自动化运维实战:用Python编写CI/CD、Docker与Ansible脚本

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
HoRain云--Python自动化运维实战:用Python编写CI/CD、Docker与Ansible脚本

运维自动化是DevOps的核心。Python凭借丰富的库,可编写CI/CD脚本、管理Docker容器、调用Ansible等。本文将实战演示如何用Python打造自动化运维工具。

1. 使用Python操作Docker

安装docker库:

bash

复制

下载

pip install docker
列出容器

python

复制

下载

import docker client = docker.from_env() for container in client.containers.list(all=True): print(container.name, container.status)
构建镜像

python

复制

下载

image, logs = client.images.build(path="./app", tag="myapp:latest") for log in logs: print(log)
运行容器

python

复制

下载

container = client.containers.run( "myapp:latest", detach=True, ports={"8000/tcp": 8000}, environment={"ENV": "prod"} ) print(container.id)

2. 编写CI/CD脚本

以GitLab CI为例,但用Python做本地预检。

检查代码风格

python

复制

下载

import subprocess import sys def run_check(cmd): result = subprocess.run(cmd, shell=True, capture_output=True, text=True) if result.returncode != 0: print(f"失败: {cmd}\n{result.stderr}") sys.exit(1) run_check("black --check .") run_check("flake8 .") run_check("pytest")
自动版本发布

python

复制

下载

import os import re import subprocess def bump_version(part="patch"): with open("version.py") as f: content = f.read() version = re.search(r'__version__ = "(\d+)\.(\d+)\.(\d+)"', content) major, minor, patch = map(int, version.groups()) if part == "major": major += 1; minor = 0; patch = 0 elif part == "minor": minor += 1; patch = 0 else: patch += 1 new_version = f"{major}.{minor}.{patch}" content = re.sub(r'__version__ = ".*"', f'__version__ = "{new_version}"', content) with open("version.py", "w") as f: f.write(content) subprocess.run(["git", "tag", f"v{new_version}"]) subprocess.run(["git", "push", "--tags"]) print(f"版本更新至 {new_version}") bump_version("patch")

3. 调用Ansible

安装ansible-runner:

bash

复制

下载

pip install ansible-runner
执行Playbook

python

复制

下载

import ansible_runner def run_playbook(playbook, inventory): r = ansible_runner.run( private_data_dir=".", playbook=playbook, inventory=inventory, quiet=False ) print(f"状态: {r.status}") print(f"输出: {r.stdout.read()}") return r.rc rc = run_playbook("deploy.yml", "hosts.ini") if rc != 0: raise SystemExit("部署失败")

4. 自动化监控与告警

python

复制

下载

import psutil import requests import time def check_system(): cpu = psutil.cpu_percent(interval=1) mem = psutil.virtual_memory().percent disk = psutil.disk_usage("/").percent return cpu, mem, disk def send_alert(msg): webhook = "https://hooks.slack.com/services/XXX" requests.post(webhook, json={"text": msg}) while True: cpu, mem, disk = check_system() if cpu > 90 or mem > 90 or disk > 90: send_alert(f"资源告警: CPU={cpu}%, MEM={mem}%, DISK={disk}%") time.sleep(60)

5. 集成到CI/CD流水线

  • GitHub Actions:使用Python脚本作为步骤。

  • Jenkins:在Pipeline中调用python deploy.py。

  • GitLab CI:script: - python ci_check.py。

6. 最佳实践

  • 使用argparse或click构建CLI。

  • 日志用logging模块。

  • 敏感信息用环境变量或Vault。

  • 异常处理与重试。

  • 单元测试脚本。

7. 实战:一键部署脚本

python

复制

下载

#!/usr/bin/env python3 import argparse import subprocess import docker import ansible_runner def build(): client = docker.from_env() client.images.build(path="./app", tag="myapp:latest") def deploy(): r = ansible_runner.run(playbook="deploy.yml", inventory="prod.ini") if r.rc != 0: raise SystemExit("部署失败") def main(): parser = argparse.ArgumentParser() parser.add_argument("action", choices=["build", "deploy", "all"]) args = parser.parse_args() if args.action in ("build", "all"): build() if args.action in ("deploy", "all"): deploy() if __name__ == "__main__": main()

总结

Python在自动化运维中用途广泛,从容器管理到CI/CD,再到配置管理。结合Docker、Ansible、requests等库,可打造高效、可维护的运维工具。建议从简单脚本开始,逐步模块化。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/15 13:38:31

ponytail:用技能包编排命令行任务,告别重复操作

开头做开发这些年,我最大的感受就是:真正消耗精力的往往不是写代码本身,而是那些围绕在代码周围的重复性工作。今天想聊的这个工具,就是专门用来解决这类问题的——它叫 ponytail,一个定位在命令行任务编排层面的辅助插…

作者头像 李华
网站建设 2026/10/15 13:38:07

SEMI S8 人机工程标准实战:从设计评审到合规避坑

简介:这份资源是面向半导体制造设备设计、运维及安全管理人员整理的SEMI标准资料,核心为SEMI S8-0308《半导体制造设备人体工程学安全指南》,适合需要了解设备安全规范、人体工程学设计原则与事故预防思路的工程师及安全合规人员参考。压缩包…

作者头像 李华
网站建设 2026/10/15 13:37:37

Flutter内存监控库鸿蒙适配实战

1. 项目背景与核心价值作为一名长期深耕移动端性能优化的开发者,我深刻理解内存监控在应用开发中的关键作用。特别是在跨平台框架Flutter中,如何精准掌控内存使用情况一直是性能调优的难点。memory_usage这个三方库的出现,为Flutter开发者提供…

作者头像 李华
网站建设 2026/10/15 13:37:32

斐波那契数列:从数学原理到算法优化

1. 数列的奇妙世界:从斐波那契到分形数学中有这样一个神奇的数列:1, 1, 2, 3, 5, 8, 13, 21...这个看似简单的序列背后隐藏着令人惊叹的数学规律。我第一次接触这个数列是在大学时期的组合数学课上,当时就被它无处不在的应用场景所震撼。这个…

作者头像 李华
网站建设 2026/10/15 13:37:29

STM32H743裸机移植LVGL8.2:从LTDC点亮RGB屏到控件流畅交互

简介:STM32H743裸机环境下移植LVGL 8.2图形库的完整工程资源包,面向需要直接操作HAL库进行嵌入式GUI开发的工程师与电子爱好者,也适用于物联网终端、消费电子产品等对显示交互有要求的项目场景。整套方案不依赖RTOS,运行在裸机环境…

作者头像 李华
网站建设 2026/10/15 13:37:20

Agilent 4284A精密LCR测试仪原理与应用详解

1. 设备概述与行业定位Agilent 4284A精密LCR测试仪是电子测试测量领域的经典设备,专为高精度阻抗测量而设计。这款仪器在半导体材料表征、被动元件测试、高频电路分析等领域已有超过20年的应用历史,至今仍被众多国家级计量机构和高端制造企业作为标准测量…

作者头像 李华