Flask 项目使用 GitHub Actions 实现 CI/CD 自动部署的核心步骤包括:首先在项目中创建.github/workflows 目录并编写 YAML 配置文件,定义触发事件如 push 到 main 分支;接着配置作业流程,通常包含检出代码、设置 Python 环境、安装依赖、运行测试等持续集成环节;最后通过 SSH 或 Docker 方式实现持续部署,利用 GitHub Secrets 安全存储服务器凭证或云厂商密钥,确保代码提交后自动构建镜像并更新生产环境,从而实现从代码提交到服务更新的全生命周期自动化,降低人工部署风险并提升交付效率。
Python CI/CD 实战:用 GitHub Actions 自动化部署 Flask 应用_mb684b87958e0e6 的技术博客_51CTO 博客
Python CI/CD 实战:用 GitHub Actions 自动化部署 Flask 应用 现代软件开发中,持续集成和持续部署 (CI/CD) 已成为提升交付效率的核心实践。GitHub Actions 作为原生集成于 GitHub 的自动化工具,能高效管理代码测试、构建与部署流程。本文通过一个完整的 Flask 应用部署案例,详解如何构建高可靠性的自动化流水线。环境初始化与项目结构 Flask 应用需标准化项目结构以确保环境一致性:# app.py from flask import Flask app = Flask(__name__) @app.route('/') def home(): return "自动化部署实战成功" if __name__ == '__main__': app.run(host='0.0.0.0', port=5000) 依赖管理通过 requirements.txt 锁定版本:Flask==2.0.3 gunicorn==20.1.0 pytest==7.1.2 虚拟环境隔离依赖 (可选但推荐): python -m venv venv source venv/bin/activate pip install -r requirements.txt 自动化测试与覆盖率检测 单元测试使用 pytest 并集成覆盖率报告:# test_app.py import pytest from app import app @pytest.fixture def client(): return app.test_client() def test_homepage(client): response = client.get('/') assert response.status_code == 200 assert b"自动化部署实战成功" in response.data 覆盖率配置 (.coveragerc): [run] source = . omit = venv/* 测试命令扩展为:pytest --cov=app --cov-report=term-missing GitHub Actions 流水线设计 在.github/workflows/cicd.yml 定义三阶段工作流:name: Flask CI/CD on: [push] jobs: test: runs-on: ubuntu-latest steps: - name: 检出代码 uses: actions/checkout@v3 - name: 配置 Python 3.9 uses: actions/setup-python@v4 with: python-version: '3.9' - name: 安装依赖 run: | python -m pip install --upgrade pip pip install -r requirements.txt - name: 运行测试与覆盖率 run: pytest --cov=app --cov-report=term-missing build: runs-on: ubuntu-latest needs: test outputs: image_tag: ${{ steps.docker_meta.outputs.tags }} steps: - name: 构建 Docker 镜像 uses: docker/build-push-action@v3 with: context: . tags: flask-app:latest deploy: runs-on: ubuntu-latest needs: build steps: - name: SSH 部署到生产服务器 uses: appleboy/ssh-action@v1 with: host: ${{ secrets.SERVER_IP }} username: ${{ secrets.SSH_USER }} key: ${{ secrets.SSH_KEY }} script: | docker pull flask-app:latest do(撰于 2025 年 6 月 19 日)
Python flask 使用 GitHub 自带的 Actions 脚本简单实现 CI/CD
Python flask 使用 GitHub 自带的 Actions 脚本简单实现 CI/CD 本文详细介绍了如何使用 GitHub Actions 的 Action 脚本实现 Python 应用的持续集成 (CI) 和持续部署 (CD),包括设置工作流程、安装依赖、自动化测试和远程部署到 CentOS 服务器。使用 git 自带的 action 脚本实现 CI/CD 先理解下 CI/CD 概念 (CD 有两种意思) CI:continuous integration,持续集成,属于开发人员的自动化流程,是一种软件工程流程,是将所有软件工程师对于软件的工作副本持续集成到共享主线 (mainline) 的一种举措。CD:continuous delivery,持续交付,是一种软件工程手法,让软件产品的产出过程在一个短 周期内完成,以保证软件可以稳定、持续的保持在随时可以释出的状况。CD:continuous deployment,持续部署,是一种软件工程方法,意指在软件开发流程中,以自 动化方式,频繁而且持续性的,将软件部署到生产环境 (production environment) 中,使软件产品能够快速的发展。CI/CD 工具有很多,比如 CircleCI、TravisCI、Jenkins 等等,这里使用的是 GitHub 在 2019 年 8 月份 推出的 Action,只需要在 repository 里新增一个 yml 文件就可以了。(2021 年 5 月 23 日)
Github Action 一键部署 Flask 应用
打成 docker 应用,我们希望以:dockerrun -d -p8080:8080 oneslide/devops:flask 一键获取完整项目代码 bash 1 方式启动。github action github action 是 github 免费的流水线工具。流水线配置文件时 yaml 格式的,放置在项目根目录的.github/workflows 下。这个仓库的流水线配置文件时.github/workflows/docker-image.yml 流水线流程大概分成三步:打镜像 登录 DockerHub 推送镜像到 DockerHub。docker-image.yml name:Docker Image CIon:push:branches:["main"]pull_request:branches:["main"]env:IMAGE_NAME:oneslide/devops:flaskjobs:build:runs-on:ubuntu-lateststeps:# 1. 打镜像 -uses:actions/checkout@v3-name:Build the Docker imagerun:docker build .--file Dockerfile--tag ${{env.IMAGE_NAME}}# 2. 登录 DockerHub-name:Login to Docker Hubuses:docker/login-action@v2with:username:${{secrets.DOCKERHUB_USERNAME}}password:${{secrets.DOCKERHUB_TOKEN}}# 3. 推送镜像到 DockerHub-name:Publish Image to Docker Hubrun:docke(搜索结果收录于 2022 年 9 月 20 日)
基于 GitHub Actions 构建标准化 CI/CD 流水线——从手动部署到全自动化交付
本文将引入 GitHub Actions,构建一条标准化的 CI/CD(持续集成与持续部署) 流水线,实现从代码提交到服务更新的全生命周期自动化。1. 持续集成与持续部署 (CI/CD) 在了解 GitHubActions 的技术细节之前,必须先知道 CI/CD 是什么。CI/CD 并不是简单的“自动化测试加上自动化部署”,而是一套完整的软件交付生命周期的标准规范。,旨在通过自动化脚本约束开发流程,降低交付风险。1.1 持续集成 (Continuous Integration, CI) 定义:自动化编译与自动化测试。在代码被推送到主干分支 (如 main 或 master) 或发起合并请求 (Pull Request) 时,系统自动在隔离的云端环境中拉取最新代码,执行构建工具 (如 Maven/Gradle) 的生命周期,并强制运行所有单元测试与集成测试。价值:CI 的直接产物是一个反馈信号 (Pass/Fail)。它在代码合并前构筑了一道防线,如果最新提交破坏了现有功能 (测试未通过),流程将被硬性阻断,问题代码无法进入部署环节。目标是“尽早发现集成错误”并“确保主干分支的绝对稳定性”。1.2 持续部署/交付 (Continuous Deployment/Delivery, CD) 定义:自动化发版与自动化部署。CD 承接在 CI 流程之后,只有当 CI 流程全绿 (通过全部测试) 时,CD 阶段才会被触发。持续交付指的是将经过测试验证的代码构建成可部署的产物 (如 Docker 镜像或可执行二进制文件),并自动推送到制品库 (Artifact Registry),使得软件时刻处于“随时可部署至生产环境”的就绪状态。持续部署则更进一步,系统会通过预先配置好的授权凭证,通过 SSH 或 API 调用的方式,自动连接到目标云服务器或 Kubernetes 集群,执行旧容器的销毁与新容器的拉起操作,将新版本的软件零延迟地呈现给最终用户。价值:消除“在我电脑上能跑”的环境偏差。传统的 CD 依赖运维人员手动敲击命令,而现代 CD 由云端 Runner 通过 SSH/API 代理执行,确保部署路径的绝对幂等性和可追溯性。(该信息的时间戳是 2026 年 3 月 19 日)
FAQ
GitHub Actions 工作流文件存放位置在哪里?
工作流文件需存放在项目根目录的.github/workflows/文件夹下,格式为 YAML。
如何在 GitHub Actions 中管理敏感信息如密码?
应在仓库设置中添加 Secrets,并在 YAML 文件中通过${{ secrets.NAME }}语法引用,避免明文泄露。
CI/CD 流水线通常包含哪些阶段?
一般包含代码检出、环境配置、依赖安装、自动化测试、构建镜像及部署到生产服务器等阶段。