当前位置: 首页 > article >正文

乙巳马年·皇城大门春联生成终端W持续集成与交付(CI/CD)流水线搭建

乙巳马年·皇城大门春联生成终端W持续集成与交付CI/CD流水线搭建你是不是也遇到过这样的场景每次给“乙巳马年·皇城大门春联生成终端W”这个微服务应用更新代码都得手动登录服务器执行一堆命令拉代码、跑测试、打镜像、上传仓库、再部署。整个过程不仅繁琐还容易出错万一哪步手滑了可能就得花半天时间排查。其实这些重复、机械的工作完全可以交给机器自动完成。今天我就来手把手带你为这个春联生成应用搭建一套自动化的CI/CD流水线。简单来说就是让代码从提交到上线全程自动化你只需要专注写代码剩下的交给流水线。我们会用最主流、最易上手的工具来实现保证你看完就能在自己的项目里用起来。1. 准备工作与环境说明在开始动手之前我们先明确一下目标和需要准备的东西。我们的目标是当你把代码推送到Git仓库比如GitHub或GitLab后流水线能自动完成以下四件事运行测试确保新代码没有破坏原有功能。构建镜像将应用和它的运行环境打包成一个Docker镜像。安全检查对镜像进行漏洞扫描确保安全。自动部署将新镜像推送到星图GPU平台并更新服务。为了实现这个目标你需要准备好以下几样东西一个代码仓库你的“乙巳马年·皇城大门春联生成终端W”的源代码必须托管在像GitHub、GitLab或Gitee这样的平台上。这是自动化流程的起点。Docker环境你的应用需要能够被构建成Docker镜像。这意味着你需要一个Dockerfile用来描述如何打包你的应用。星图GPU平台访问权限你需要有平台的账号并且知道如何通过命令行或API来部署服务。通常这涉及到获取访问密钥Access Key和配置部署脚本。CI/CD工具选择我们将以GitHub Actions为例进行讲解因为它与GitHub集成度最高对开源项目免费且配置相对简单直观。如果你公司内部使用的是Jenkins其核心思想也是相通的只是配置界面和语法不同。好了前提条件都齐了我们接下来就进入实战环节。2. 第一步编写核心的DockerfileCI/CD流水线的核心产出物是一个Docker镜像。所以我们首先要确保应用能正确地被打包。在你的项目根目录下创建一个名为Dockerfile的文件没有后缀名。这个文件就像一份食谱告诉Docker如何一步步制作出能运行你应用的“菜肴”。下面是一个典型的Python微服务应用的Dockerfile示例你可以根据你的实际技术栈比如Node.js、Java进行调整。# 使用一个轻量级的Python官方镜像作为基础 FROM python:3.9-slim # 设置工作目录后续的命令都会在这个目录下执行 WORKDIR /app # 将当前目录下的依赖文件复制到镜像中 COPY requirements.txt . # 安装Python依赖使用清华镜像源加速国内环境推荐 RUN pip install --no-cache-dir -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt # 将整个项目代码复制到镜像的工作目录 COPY . . # 声明容器运行时对外暴露的端口需要和你的应用端口一致 EXPOSE 8080 # 指定容器启动时默认执行的命令 # 例如如果你的主程序是 app.py使用gunicorn启动 CMD [gunicorn, -w, 4, -b, 0.0.0.0:8080, app:app]关键点解释FROM: 选择一个合适的基础镜像越小越好比如-slim版本。COPY: 分步复制文件先复制依赖文件再安装可以利用Docker的缓存层加速后续构建。RUN: 执行构建命令比如安装依赖。CMD: 定义容器启动后要运行的命令。你可以先在本地测试一下这个Dockerfile是否能成功构建和运行# 在项目根目录下执行 docker build -t spring-festival-couplets:latest . docker run -p 8080:8080 spring-festival-couplets:latest如果应用能在本地http://localhost:8080访问说明镜像制作成功。3. 第二步配置GitHub Actions流水线接下来是重头戏在GitHub仓库中配置自动化工作流。在你的项目根目录下创建.github/workflows/ci-cd-pipeline.yml文件。这个YAML文件定义了整个自动化流程。我们将流程分为几个阶段我先把完整的配置贴出来再逐一解释。name: CI/CD Pipeline for Spring Couplets App # 定义触发条件当代码推送到main分支或者发起向main分支的Pull Request时触发 on: push: branches: [ main ] pull_request: branches: [ main ] # 设置环境变量敏感信息如密码、密钥等会通过GitHub Secrets注入 env: REGISTRY: ghcr.io # 使用GitHub Container Registry IMAGE_NAME: ${{ github.repository }} # 镜像名默认使用仓库名 jobs: # 第一个任务测试与构建 test-and-build: runs-on: ubuntu-latest steps: # 1. 检出代码 - name: Checkout code uses: actions/checkoutv4 # 2. 设置Python环境 - name: Set up Python uses: actions/setup-pythonv5 with: python-version: 3.9 # 3. 安装依赖并运行测试假设你使用pytest - name: Install dependencies and run tests run: | pip install -r requirements.txt pytest # 请确保你的项目有测试文件并且这个命令能运行你的测试 # 4. 登录到容器镜像仓库这里以GitHub Packages为例 - name: Log in to the Container registry uses: docker/login-actionv3 with: registry: ${{ env.REGISTRY }} username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} # 5. 构建Docker镜像并推送 - name: Build and push Docker image uses: docker/build-push-actionv5 with: context: . push: true tags: | ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ github.sha }} # 第二个任务部署到星图GPU平台仅当推送到main分支时执行 deploy-to-startimes: # 需要等待“测试与构建”任务成功完成 needs: test-and-build # 仅在推送到main分支时运行避免在PR时部署 if: github.event_name push github.ref refs/heads/main runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkoutv4 # 假设星图平台提供了CLI工具或API这里以调用部署脚本为例 - name: Deploy to Startimes GPU Platform env: STARTIMES_ACCESS_KEY: ${{ secrets.STARTIMES_ACCESS_KEY }} STARTIMES_SECRET_KEY: ${{ secrets.STARTIMES_SECRET_KEY }} run: | # 这里替换成你实际的部署命令 # 例如使用平台CLI工具更新服务镜像 # startimes-cli service update my-spring-couplets-service --image ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ github.sha }} echo 开始部署镜像 ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ github.sha }} 到星图平台... # 你的部署脚本 deploy.sh bash scripts/deploy.sh ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ github.sha }}配置文件关键部分解读触发条件 (on): 我们设置在向main分支推送代码或提交Pull Request时触发流水线。PR触发适合做代码审查前的自动化测试。任务 (jobs): 我们定义了两个任务。test-and-build: 运行在Ubuntu虚拟机上的任务依次执行拉代码、设环境、跑测试、登录镜像仓库、构建并推送Docker镜像。注意我们同时打了latest标签和基于本次提交哈希的唯一标签。deploy-to-startimes: 这个任务依赖于第一个任务成功。并且通过if条件限制只在向main分支推送代码时才执行部署避免把未合并的PR代码部署上去。敏感信息保护: 注意secrets.GITHUB_TOKEN和secrets.STARTIMES_ACCESS_KEY。这些是GitHub Secrets你需要去仓库的Settings - Secrets and variables - Actions页面添加。GITHUB_TOKEN是GitHub自动提供的用于推送镜像到GitHub Packages。STARTIMES_ACCESS_KEY和STARTIMES_SECRET_KEY需要你从星图GPU平台获取并手动添加这样在流水线中就可以安全地使用它们而不会暴露在代码里。4. 第三步完善部署脚本与安全检查上一步的部署步骤里我们假设了一个scripts/deploy.sh脚本。现在我们来完善它并加入一个重要的环节——镜像安全扫描。创建部署脚本scripts/deploy.sh:#!/bin/bash # 部署脚本接收一个参数完整的镜像地址 NEW_IMAGE$1 echo 准备部署镜像: $NEW_IMAGE # 1. 使用trivy进行镜像安全扫描这是一个流行的开源漏洞扫描器 echo 正在进行安全漏洞扫描... docker run --rm -v /var/run/docker.sock:/var/run/docker.sock aquasec/trivy:latest image --severity HIGH,CRITICAL --exit-code 1 $NEW_IMAGE # 如果上一步扫描发现高危漏洞退出码为1脚本会终止部署不会继续 if [ $? -eq 0 ]; then echo 安全扫描通过未发现高危漏洞。 else echo 安全扫描发现高危漏洞部署已终止请先修复漏洞。 exit 1 fi # 2. 执行实际的部署命令到星图GPU平台 # 这里需要你根据星图平台提供的具体API或CLI工具来编写 # 例如假设平台有REST API echo 正在向星图平台发起部署请求... # curl -X POST -H Authorization: Bearer $STARTIMES_TOKEN \ # -H Content-Type: application/json \ # -d {\service\: \spring-couplets-w\, \image\: \$NEW_IMAGE\} \ # https://api.startimes.com/v1/deploy echo 部署指令已发送。请登录星图平台控制台查看部署状态。这个脚本做了两件事先用Trivy工具扫描即将部署的镜像是否存在高危漏洞如果存在则立即失败阻止部署只有扫描通过才会执行后续的部署命令。这为你的服务增加了一道重要的安全防线。你需要在GitHub Actions的deploy-to-startimes任务中确保这个脚本有执行权限或者直接在步骤中用bash执行。5. 第四步测试与验证流水线配置完成后最激动人心的时刻到了——测试流水线是否工作。提交代码将新增的.github/workflows/ci-cd-pipeline.yml、Dockerfile和scripts/deploy.sh文件提交并推送到你的GitHub仓库的main分支。查看Actions打开你的GitHub仓库点击顶部的“Actions”标签页。你应该会看到一个新的工作流正在运行。观察执行过程点击进入正在运行的工作流你可以实时看到每个步骤的执行日志。绿色对勾表示步骤成功红色叉号表示失败。排查问题如果失败仔细查看失败步骤的日志。常见问题包括Dockerfile语法错误、测试用例失败、镜像仓库权限不足、部署脚本命令错误等。根据日志提示进行修复。当看到所有步骤都变成绿色并且部署任务成功执行恭喜你你的自动化CI/CD流水线已经搭建成功。以后每次你推送代码到main分支这套流程就会自动运转起来。6. 总结与后续优化建议走完这一整套流程你会发现原本需要手动操作十几分钟甚至更久的事情现在全自动完成了而且更加规范和安全。这套基于GitHub Actions的流水线核心思想就是“代码即配置”把部署流程也像代码一样管理起来可追溯、可复用。实际用下来这套基础流水线已经能解决大部分自动化需求。当然根据项目复杂度的提升你还可以考虑以下优化方向多环境部署可以配置不同的工作流分别部署到“测试环境”和“生产环境”。比如推送到develop分支自动部署到测试环境手动批准后再部署到生产环境。更丰富的测试除了单元测试可以加入集成测试、API测试等在流水线中创建一个独立的测试阶段。通知机制在流水线成功或失败时通过企业微信、钉钉或Slack发送通知让团队及时知晓状态。回滚策略在部署脚本中考虑加入回滚逻辑如果新版本部署后健康检查失败能自动回滚到上一个稳定版本。刚开始可能会觉得配置有点复杂但一旦跑通它带来的效率提升和运维规范性的好处是巨大的。建议你先用一个小项目或分支实践整个流程熟悉后再应用到核心项目中去。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。

相关文章:

乙巳马年·皇城大门春联生成终端W持续集成与交付(CI/CD)流水线搭建

乙巳马年皇城大门春联生成终端W持续集成与交付(CI/CD)流水线搭建 你是不是也遇到过这样的场景?每次给“乙巳马年皇城大门春联生成终端W”这个微服务应用更新代码,都得手动登录服务器,执行一堆命令:拉代码、…...

计算机视觉、YOLO算法模型训练、无人机监测人员密集自动识别

第一阶段:准备工作1. 硬件确认你需要一台带 NVIDIA 独立显卡 的电脑(显存 8G 以上,游戏本 / 设计本都行);如果没有,用 CPU 也能跑,但训练会很慢(不建议,最好找个带显卡的…...

语音识别新选择:Qwen3-ASR-0.6B镜像快速体验,一键搭建Web界面

语音识别新选择:Qwen3-ASR-0.6B镜像快速体验,一键搭建Web界面 1. 为什么选择Qwen3-ASR-0.6B 语音识别技术正在改变我们与设备交互的方式,但传统解决方案往往面临两个痛点:要么识别精度高但资源消耗大,要么轻量但支持…...

如何用Python模拟光的衍射图样?Matplotlib可视化教程

用Python模拟光的衍射图样:从原理到Matplotlib可视化实战 光的衍射现象一直是波动光学中最迷人的部分之一。当一束光通过狭缝或遇到障碍物时,它不会简单地沿直线传播,而是会"弯曲"并形成复杂的干涉图样。这种现象不仅具有理论意义&…...

qmc-decoder:高效智能的QQ音乐加密音频解密工具,轻松解锁音乐格式枷锁

qmc-decoder:高效智能的QQ音乐加密音频解密工具,轻松解锁音乐格式枷锁 【免费下载链接】qmc-decoder Fastest & best convert qmc 2 mp3 | flac tools 项目地址: https://gitcode.com/gh_mirrors/qm/qmc-decoder 你是否曾遇到过这样的困扰&am…...

学生党专属:OpenClaw+百川2-13B-4bits搭建个人学习助手

学生党专属:OpenClaw百川2-13B-4bits搭建个人学习助手 1. 为什么需要本地化学习助手? 作为一名计算机专业的学生,我经常面临这样的困境:上课时老师讲得太快,笔记记不全;课后整理资料时,各种PD…...

建站必看:CMS系统是什么?为什么它能帮你轻松搭建网站?

简单来说,CMS(内容管理系统) 就是一套帮你“搭建和管理网站”的软件工具,让你不用写代码,就能像操作Word文档一样,轻松创建、编辑和发布网站内容。 它的核心作用可以拆解为两点: 建站&#xff0…...

F3闪存检测工具:5步识别扩容盘欺诈的完整指南

F3闪存检测工具:5步识别扩容盘欺诈的完整指南 【免费下载链接】f3 F3 - Fight Flash Fraud 项目地址: https://gitcode.com/gh_mirrors/f3/f3 你是否曾经购买过价格异常便宜的U盘或SD卡,却发现存储的文件频繁损坏?这种看似"物美价…...

OWL ADVENTURE .NET平台集成实战:C#调用视觉模型API

OWL ADVENTURE .NET平台集成实战:C#调用视觉模型API 最近在做一个智能内容审核的小工具,需要调用视觉模型来分析图片。网上搜了一圈,发现关于如何在.NET环境里集成这类模型的教程,要么太零散,要么就是直接贴一堆Pytho…...

openClaw安装配置免费模型

# 启用千问免费认证插件openclaw plugins enable qwen-portal-authopenclaw gateway restart# 登录授权(按终端提示在浏览器完成)openclaw models auth login --provider qwen-portal --set-default...

同样是摸鱼玩3A,差距竟这么大?一个全程高帧,一个马赛克画质

一、前言 最近比较清闲,主打一个上班摸鱼!想在公司偷偷玩家里的大型游戏,无奈公司电脑只能办公,玩不了大作。之前试过多款远程工具都踩坑,这次专门做一场横测,分别实测ToDesk和UU远程,特意选了…...

零样本与少样本学习

零样本与少样本学习 | 大模型开发核心技术系列 1.3一、引言 你是否想过,为什么有时候只需要简单地告诉模型“把这个句子翻译成法语”,它就能准确完成,而有的时候却需要给出好几个例子才能理解你的意图?这背后的关键技术就是零样本…...

从Redis分片到数据去重:聊聊MurmurHash3在真实业务里的那些“神操作”

MurmurHash3实战手册:高并发场景下的数据分片与去重艺术 当你的Redis集群开始出现热点Key,当日志系统每天要处理数十亿条重复数据,当负载均衡器在流量洪峰时频频告警——这些看似无关的系统痛点,背后其实都藏着一个共同的解决方案…...

SVN到Git迁移的三大痛点与svn2git一站式解决方案

SVN到Git迁移的三大痛点与svn2git一站式解决方案 【免费下载链接】svn2git 项目地址: https://gitcode.com/gh_mirrors/sv/svn2git 当技术团队面临从SVN向Git迁移的决策时,往往会陷入"历史包袱沉重、迁移过程复杂、团队适应成本高"的困境。svn2gi…...

李慕婉-仙逆-造相Z-Turbo交互设计:使用Qt框架打造跨平台模型控制台

李慕婉-仙逆-造相Z-Turbo交互设计:使用Qt框架打造跨平台模型控制台 最近在折腾AI图像生成模型,特别是像“李慕婉-仙逆-造相Z-Turbo”这类功能强大的模型。用命令行调用虽然直接,但每次想调个参数、看看历史效果对比,都得敲一堆命…...

OpenClaw升级3.23后Weixin报错

将下面内容发给openclaw机器人 让它自己解决## 背景修复 openclaw-weixin 无法稳定接收消息的问题,并确认消息能被网关接收后正确路由到 main agent。## 问题现象1. 微信侧发送消息后,gateway.log 中没有稳定出现 received message/dispatching 相关入站…...

中东客户要求阿语通知,你是翻译软件凑合还是专业级AI处理?深扒货代数字化底层逻辑

在国际物流行业,细节决定成败。当一位尊贵的中东客户要求提供阿拉伯语(Arabic)到港通知时,很多货代企业仍停留在“复制粘贴到翻译软件”的原始阶段。这种做法不仅效率极低,更可能因翻译语义不准导致严重的沟通误解。本…...

ms-swift微调框架实测:从安装到训练,10分钟搞定Qwen2.5模型定制

ms-swift微调框架实测:从安装到训练,10分钟搞定Qwen2.5模型定制 1. 前言 在当今大模型技术快速发展的背景下,如何高效地对预训练大模型进行微调成为了许多开发者和研究者的关注焦点。ms-swift作为一款轻量级的大模型微调框架,凭…...

乙巳马年春联生成终端开箱即用:无需pip install,直接运行Web终端

乙巳马年春联生成终端开箱即用:无需pip install,直接运行Web终端 1. 引言:当AI遇见传统年味 春节贴春联,是刻在我们文化基因里的仪式感。但你想过吗?如果有一扇“皇城大门”,你只需对着它说出新年愿望&am…...

微信机器人SDK

在微信生态中,接口繁杂、事件回调冗长、自动化流程难以搭建,一直是开发者和运营团队的痛点。GeWe 开放平台应运而生,它在微信官方能力的基础上进行了深度封装,并结合自研 RPA 引擎,打造出一套高效、易用的微信自动化解…...

BERT文本分割模型一键部署教程:Python环境快速搭建指南

BERT文本分割模型一键部署教程:Python环境快速搭建指南 你是不是也遇到过这样的场景:手里有一大段文本,想把它按照语义切分成一个个小段落,方便后续处理或者阅读。手动去分?效率太低,而且很难保证准确。这…...

单片机开发:C语言与汇编语言工程实践对比

单片机编程语言选择:C语言与汇编的工程实践对比1. 项目概述1.1 单片机编程语言的发展背景现代电子产品设计中,单片机作为核心控制单元,其编程语言的选择直接影响开发效率和系统性能。随着技术进步,编程语言从最初的机器码发展到汇…...

空洞骑士模组管理终极指南:如何使用Scarab一键安装所有模组

空洞骑士模组管理终极指南:如何使用Scarab一键安装所有模组 【免费下载链接】Scarab An installer for Hollow Knight mods written in Avalonia. 项目地址: https://gitcode.com/gh_mirrors/sc/Scarab 你是否曾因为空洞骑士模组安装过程复杂而放弃尝试&…...

告别模糊!用MapCutter 3.12.2处理超大航拍图,实现高清WebGL地图的保姆级教程

超清航拍地图处理实战:MapCutter 3.12.2全流程优化指南 当无人机航拍的4K遥感影像在网页端变成模糊的马赛克时,每个GIS开发者都经历过这种绝望。本文将以某智慧城市项目中单张68GB的倾斜摄影图像处理为例,揭示从原始数据到WebGL高清呈现的全…...

S2-Pro模型效果深度评测:多轮对话与代码生成能力展示

S2-Pro模型效果深度评测:多轮对话与代码生成能力展示 1. 开场白:为什么关注S2-Pro 最近大模型领域又迎来一位实力选手——S2-Pro。作为工程师,我们最关心的不是它有多少参数,而是实际用起来到底怎么样。特别是在需要持续对话和代…...

从产线停机到毫秒级响应:Python网关对接西门子S7-1500的5层协议栈穿透方案(含Wireshark+pyshark联合抓包模板)

第一章:从产线停机到毫秒级响应:Python网关对接西门子S7-1500的5层协议栈穿透方案(含Wiresharkpyshark联合抓包模板)工业现场常因PLC通信延迟或协议解析失败导致整条产线非计划停机,而传统OPC UA桥接方案平均响应延迟达…...

AI Agent 网关其实是一个新的“流量黑洞”

热点观察 AI AgentAI Agent 网关其实是一个新的“流量黑洞”看得见入口,看不见过程,问题一来只能靠猜最近 AI Agent 很火。企业微信机器人、自动化工作流、模型编排、工具调用,几乎都绕不开一个关键角色:Agent 网关。它看起来只是…...

Fish-Speech-1.5与LLM集成:智能语音助手开发实战

Fish-Speech-1.5与LLM集成:智能语音助手开发实战 1. 引言 你有没有想过,为什么现在的语音助手总是感觉"不太聪明"?它们要么只能执行简单指令,要么对话生硬缺乏连贯性。这背后的核心问题在于,传统的语音助手…...

TCP/IP 协议族

一、整体认识1. 什么是 TCP/IP 协议族TCP/IP 不是单指 TCP 和 IP,而是一整套互联网协议簇是当前互联网的事实标准定义了计算机之间如何通信、数据如何封装、寻址、传输、路由、应用2. TCP/IP 与 OSI 七层模型对比表格OSI 七层模型TCP/IP 四层模型(实际用…...

nli-distilroberta-base效果展示:长文本截断策略对NLI准确率影响实测

nli-distilroberta-base效果展示:长文本截断策略对NLI准确率影响实测 1. 项目概述 nli-distilroberta-base是一个基于DistilRoBERTa模型的自然语言推理(NLI)Web服务,专门用于判断两个句子之间的逻辑关系。这个轻量级模型保留了R…...