0

0

LinuxDevOps项目实战教程_持续集成持续部署流程解析

舞夢輝影

舞夢輝影

发布时间:2026-01-08 13:38:02

|

738人浏览过

|

来源于php中文网

原创

CI/CD是围绕代码变更建立的可重复、可验证、可回滚的交付节奏,核心为每次提交触发自动化构建测试并通过后自动部署,全程无人工干预。

linuxdevops项目实战教程_持续集成持续部署流程解析

持续集成(CI)与持续部署(CD)不是工具堆砌,而是围绕代码变更建立的一套可重复、可验证、可回滚的交付节奏。核心在于:每次提交触发自动化构建与测试,通过后自动进入预发布或生产环境,中间不依赖人工干预。

CI/CD 流程的关键节点拆解

一个典型的 Linux DevOps 项目 CI/CD 流程包含以下不可跳过的环节:

  • 代码拉取(Git Hook 或 Webhook 触发):推荐用 GitLab CI / GitHub Actions 原生集成,避免自建轮询;分支策略建议 main 为稳定发布分支,develop 为集成分支,feature/* 用于并行开发
  • 环境准备(容器化优先):使用 Docker 构建轻量一致的构建环境,例如 Node.js 项目用 node:18-alpine,Python 项目用 python:3.11-slim;避免“在我机器上能跑”的问题
  • 构建与静态检查:执行 npm install && npm run buildpip install -r requirements.txt && python setup.py sdist,同时加入 ESLint、mypy、shellcheck 等扫描,失败即终止流程
  • 自动化测试分层执行:单元测试(快,本地可运行)→ 集成测试(依赖 DB/API Mock)→ 端到端测试(如 Cypress / Selenium),任一环节失败,不进入下一阶段
  • 制品归档与镜像推送:构建产物(tar 包 / wheel 文件 / Docker 镜像)统一上传至私有仓库(Nexus / Harbor),打上 Git commit SHA 和语义化标签(如 v1.2.0-rc1)
  • 部署策略按环境分级:dev 环境直接覆盖部署;staging 环境做蓝绿或金丝雀验证;production 环境强制需审批(可通过 CI 工具配置 manual job)+ 健康检查(curl 检查 /actuator/health 或 readiness probe)

Linux 下常用 CI/CD 工具链组合

在真实服务器环境落地时,应优先选择轻量、易维护、权限可控的方案:

  • 自托管 Runner + Shell 脚本驱动:适合中小团队。用 GitLab Runner 注册到内网 Linux 主机,配合 .gitlab-ci.yml 调用本地 shell 脚本完成构建部署,所有操作日志可审计,无需暴露 API Token 到公有云
  • Jenkins Pipeline(Declarative):适合已有 Jenkins 基础的团队。用 Jenkinsfile 定义 stage(build/test/deploy),配合 SSH Plugin 或 Kubernetes Plugin 实现跨主机部署;注意关闭 Script Security Sandbox 中高危函数(如 sh 'rm -rf /'
  • GitHub Actions Self-hosted Runner:适合 GitHub 托管代码但需内网部署的场景。将 runner 部署在企业 Linux 服务器上,通过 runs-on: self-hosted 调度任务,敏感凭证存于 GitHub Secrets,不落盘

部署安全与可观测性加固要点

CI/CD 流水线本身是攻击面,上线前必须检查:

醒蓝AI
醒蓝AI

一键快速生成Al形象照、证件照、写真照的强大AI换脸软件

下载
  • 最小权限原则:Runner 运行用户禁止 root,部署目标机器仅开放必要端口(如 22/80/443),SSH 使用密钥+证书登录,禁用密码认证
  • 制品完整性校验:Docker 镜像启用 cosign sign 签名,部署脚本中用 cosign verify 校验;二进制包发布前生成 SHA256SUMS 并 GPG 签名
  • 部署后自动巡检:用 Ansible 或 curl + jq 检查服务端口、响应状态码、关键日志关键词(如 “started”、“ready”);失败自动告警(邮件 / 钉钉 / Webhook)并尝试回滚(调用上一版镜像或备份 tar 包)
  • 日志与追踪对齐:CI 日志保留至少 90 天;每个部署 job 输出唯一 trace_id,关联应用日志(ELK)和链路追踪(Jaeger / OpenTelemetry)

从零搭建一个可运行的 CI/CD 示例(GitLab CI)

以 Python Flask 应用为例,在项目根目录创建 .gitlab-ci.yml

stages:
  - test
  - build
  - deploy

test: stage: test image: python:3.11-slim before_script:

  • pip install pytest pytest-cov script:
  • pytest tests/ --cov=app --cov-report=term-missing artifacts: paths: [htmlcov/] expire_in: 1 week

build: stage: build image: docker:stable services: [docker:dind] before_script:

  • docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY script:
  • docker build -t $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA .
  • docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA

deploy-staging: stage: deploy image: alpine:latest before_script:

  • apk add openssh-client script:
  • ssh -o StrictHostKeyChecking=no $STAGING_USER@$STAGING_HOST "docker pull $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA && docker tag $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA $CI_REGISTRY_IMAGE:staging && docker-compose -f docker-compose.staging.yml up -d" only:
  • develop

该配置实现:提交到 develop 分支 → 自动测试 → 构建并推镜像 → 部署到预发服务器。所有敏感变量($STAGING_USER$CI_REGISTRY_PASSWORD)在 GitLab 项目 Settings → CI/CD → Variables 中加密配置。

相关专题

更多
python开发工具
python开发工具

php中文网为大家提供各种python开发工具,好的开发工具,可帮助开发者攻克编程学习中的基础障碍,理解每一行源代码在程序执行时在计算机中的过程。php中文网还为大家带来python相关课程以及相关文章等内容,供大家免费下载使用。

737

2023.06.15

python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

633

2023.07.20

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

755

2023.07.25

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

617

2023.07.31

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

1259

2023.08.03

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

547

2023.08.04

python eval
python eval

eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

577

2023.08.04

scratch和python区别
scratch和python区别

scratch和python的区别:1、scratch是一种专为初学者设计的图形化编程语言,python是一种文本编程语言;2、scratch使用的是基于积木的编程语法,python采用更加传统的文本编程语法等等。本专题为大家提供scratch和python相关的文章、下载、课程内容,供大家免费下载体验。

705

2023.08.11

java学习网站推荐汇总
java学习网站推荐汇总

本专题整合了java学习网站相关内容,阅读专题下面的文章了解更多详细内容。

33

2026.01.08

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 6.8万人学习

Git 教程
Git 教程

共21课时 | 2.5万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号