一个关于弗拉克,詹金斯,AWS EC2的公开学习故事,系统化,最后在Vercel上传送了现场演示.
QQ TL; 医生 我建造了PyPulse,一个小的Flask应用软件,并将其接通到一个完整的CI/CD管线:推向GitHub ~ Jenkins建立 → 测试 → 部署到AWS EC2 → 通过webhook → 由系统管理自动触发.
一路走来,我至少把每块碎了一次 每块都修好了 我还在Vercel上部署了一个永久的现场演示, 因为我的EC2案例 运行在AWS的自由审判上,不会永远存在。
活地演示: pypulse-pi.vercel.app活地演示(健康检查): pypulse-pi.vercel.app/健康 如果你在学习DevOps,并想看看"刚刚设置CI/CD管线"这个真实而混乱的版本是什么样子——而不是被打磨的教程版本——这就是这个. 🧰 堆叠平板工具任务 App Flask + pytest + gunicorn 实际网络应用及其测试 CI/CD Jenkins(关于EC2, Ubuntu 22.04) 构建 – 测试 – 部署自动化源控制 GitHub 单一真源 Trigger GitHub Webhook Auto-run the protein on every push Process 管理系统的管道运行 – 使在EC2终止后存活下来的应用程序在重启/崩溃的永久演示 Vercel Live URL 上保持活性 – AP: PyPulse nothing force on special – 这个项目的整个点是管道,而不是从花瓶导入 Flask 的app. pysonon app. py.py. from return jsonify ({station:") 从日期导入时间开始jsonify(jok"),timzone app = Flask (name)@app.run.proute(") @app.proute("porte")/"d=5000"两个路线.
两个测试。
就是这样。
小到当东西破了, 我知道这不是应用—— 它是周围的管道。
这是正确的决定, 因为管道坏了很多。
管道:建造 试验 部署 我最后的心理模型是詹金斯档案 每个舞台都是大门 如果 Build 失败, 测试永远不会运行 。
如果测试失败, 部署永远不会运行 。
这一订单是CI/CD的全部价值——有检查站的自动化,而不仅仅是自动化。 🔨 构建 groovy stage ("Build") { steps { s'' python3 - m venv v. venv/bin/activate pip sind -r required.txt'' } 詹金斯机器本身运行 。
新鲜的虚拟环境,安装依赖性.
如果一个依赖性被打破或缺失,这立即失败——在浪费时间测试或部署破解代码之前。 ✅ 测试 groovy 阶段( “ 测试 ”) { 步骤 { sh'. venv/ bin/ activate pytest '' } 运行针对/和/ 健康的两次测试 。
这是安全网:如果我在稍后突破一条路线,这个阶段失败了,在中断的代码到达活服务器之前,管道就停止了.
部署 groovy 阶段 ("部署") {步骤(证书: ['pypulse-ec2-ssh']]) { s'' set - e 超时 60 ssh - o 严格HostKeyChecking =no ${EC2 USER}@ ${EC2 IP}" set - e if [!] -d ${APP DIR}; 然后 git Clone https://github.com/IrfanPasha05/pypulse.git ${AP DIR} fid ${AP DIR} pull 源代码 venv/bin/activate pip 安装 -r 要求.txt sudo systl 重启 pypulse "}}}}}}}}}} 只有在 Build 和 Test 都通过时才能运行 。
SSHes入EC2,拉出最新的代码,重新安装依赖,并重启一个系统化的服务(更多关于原因,下). 🐛 调试行程( 实际有用的部分) 任何人都可以复制 工作詹金斯文件。
下面是当我的工作失败时所发生的事情——因为这就是真正教你的东西。
臭虫 # 1 : “ 无法获取 ” 虚拟环境没有被成功创建, 因为没有可保证的pip 。
在Debian/Ubuntu系统上,你需要安装python3-venv包 发生的事情:Jenkins运行在与OS相同的机器上,而该机器没有为它的Python3-venv版本安装python3-venv包.
Fix: shash sudo apt 安装 python3. 14- venv - y Lesson: Jenkins主机需要您构建的脚本假定存在的每一个工具.
很容易忘记詹金斯不是玛吉