Github项目CICD部署

news/2025/12/24 21:51:39/文章来源:https://www.cnblogs.com/charlee44/p/19379953

1. 引言

在软件开发中,CI/CD(持续集成 / 持续部署)是一种自动化流程:每当代码更新,系统会自动构建、测试并部署应用,避免手动操作的繁琐与错误。作为 DevOps 的核心实践,CI/CD 有力支撑了敏捷开发“快速交付、持续反馈”的理念,让团队既能灵活响应变化,又能保障交付质量。

2. 操作

2.1 配置 SSH 密钥

如果代码托管在 GitHub 上,那么可以通过 GitHub Actions 来实现 CI/CD 部署。其实 GitHub Actions 的实现原理很简单,就是通过 SSH 登录到目标主机,然后执行一键安装部署脚本。

由于 GitHub Actions 的原理是 Github 主机登录到目标主机(Ubuntu)来执行命令,因此最好先生成一对专用于 CI/CD 新的 SSH 密钥。笔者的开发环境是 Windows,因此通过 PowerShell 来生成:

ssh-keygen -t rsa -b 4096 -f ./github_cicd_key

然后会提示输入密码:

Enter passphrase (empty for no passphrase):

CI/CD 场景下一般用无密码密钥,直接按回车。结束运行后就可以看到两个密钥文件:

  • github_cicd_key(私钥)
  • github_cicd_key.pub(公钥)

将公钥内容添加到 Ubuntu 服务器的 ~/.ssh/authorized_keys:

# 在 Ubuntu 服务器上执行
echo "粘贴 github_cicd_key.pub 的全部内容" >> ~/.ssh/authorized_keys

回到 GitHub 仓库页面:

  • 进入 Settings -> Security -> Secrets and variables → Actions
  • 点击 New repository secret
  • 添加以下三个 Secret:
Name Value(值)
SERVER_HOST 目标主机 IP(如 123.123.123.123)
SERVER_USER 登录用户名(如 ubuntu、root 等)
SSH_PRIVATE_KEY 打开 github_cicd_key 文件,复制全部内容粘贴进来

2.2 创建 CI/CD 工作流

在本地项目根目录(Windows 上)创建文件:

.github/workflows/build-and-deploy.yml

内容如下所示:

name: Deploy Blog# 支持两种触发方式
on:# 1. 手动触发(GitHub UI 上点击 "Run workflow")workflow_dispatch:# 2. 自动触发:仅当推送到 main 分支 且 提交信息含 [deploy]push:branches: [main]jobs:deploy: if: >github.event_name == 'workflow_dispatch' ||(github.event_name == 'push' && contains(github.event.head_commit.message, '[deploy]'))runs-on: ubuntu-lateststeps:- name: Run remote script via SSHuses: appleboy/ssh-action@v1.0.3with:host: ${{ secrets.SERVER_HOST }}username: ${{ secrets.SERVER_USER }}key: ${{ secrets.SSH_PRIVATE_KEY }}script: |cd /home/ubuntu/bash -l -c './build-and-deploy.sh'

这段工作流配置的意思是:

  • 可以手动触发(GitHub UI 上点击 "Run workflow")CI/CD 工作流。
  • 可以自动触发 CI/CD 工作流,不过要求推送到 main 分支且提交信息含 [deploy] 。
  • 使用 SSH 的配置 SERVER_HOSTSERVER_USERSSH_PRIVATE_KEY 登录目标主机 。
  • 执行一键构建和部署脚本 build-and-deploy.sh

build-and-deploy.yml 需要提交并推送到 GitHub:

git add .
git commit -m "Add simple CI/CD workflow"
git push origin main

最后,通过打开 GitHub 仓库 → Actions 标签页,就可以看到是否有 workflow 正在运行(绿色 ✔ 表示成功),还可以查看具体的 CI/CD 日志。

2.3 注意事项

CI/CD 的配置文件 build-and-deploy.yml 中执行任意 shell 命令,不过还是推荐封装好一键构建部署脚本,直接调用这个脚本。很多情况下可以使用这个脚本来进行手动部署。

另外 GitHub Actions 使用的是 非交互式、非登录式 shell,不会加载 .bashrc 或 .profile,环境变量(尤其是 PATH)与手动登录时不同。因此,有两种方案:

  1. 在构建部署脚本的开头显式加载环境。比如:
# 用于CI/CD环境配置
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"  # This loads nvm bash_completionexport LD_LIBRARY_PATH=/home/ubuntu/GISBasic/lib/:/home/ubuntu/GISBasic/lib64/:${LD_LIBRARY_PATH:-} #支持变量 LD_LIBRARY_PATH 未定义或为空
  1. 配置文件 build-and-deploy.yml 执行脚本命令增加 bash -l -c,表示以登录用户的身份启动一个新 shell,并在这个环境中运行脚本。例如这里的:
bash -l -c './build-and-deploy.sh'

3. 展望

其实 CI/CD 配置远不是那么简单,随着项目复杂度提升,还可以逐步引入更多工程实践:

  • 基于 Git Tag 的正式发布:当功能稳定时,打一个 v1.0.0 这样的语义化版本标签,自动触发构建并将二进制文件上传到 GitHub Release,方便他人下载使用。
  • 自动化测试集成:在部署前运行单元测试、端到端测试,确保新代码不会破坏现有功能。
  • 多环境支持:区分开发、预发、生产环境,避免直接在生产服务器上“试错”。
  • 基础设施即代码(IaC):用 Ansible、Terraform 等工具管理服务器配置,让环境可复现、可版本控制。
  • 监控与回滚机制:部署后自动检查服务健康状态,异常时自动回退到上一版本。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1047504.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于SpringBoot的智能家居控制系统的设计与实现

基于 Spring Boot 的智能家居控制系统旨在为用户提供一个便捷、高效且智能化的家居设备管理平台。借助 Spring Boot 框架的强大功能,该系统能够实现对各类智能家居设备的集中控制与管理,提升家居生活的舒适度与便利性。核心功能模块设备管理设备接入&…

【机械】螺旋千斤顶的标准机械分析Matlab实现

✅作者简介:热爱科研的Matlab仿真开发者,擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。 🍎 往期回顾关注个人主页:Matlab科研工作室 🍊个人信条:格物致知,完整Matlab代码获取及仿…

《手搓》线程池优化的追求

一、先回顾一下以前《手搓》线程池CaseConcurrencyLevel设置为10并发实现了完美的指数递进关系当时内心还是得到了很大的满足第一批01:58:55.832是1个并发第二批01:58:55.944是2个并发第三批01:58:56.054是4个并发第四批01:58:56.165是8个并发01:58:56.276及以后一段时间达到并…

Semantic Kernel 实战系列(七) - 高级主题 - Agents 与多代理系统

目录 1 Agents 的概念 2 实时集成与多模态 3 安全与观测性 4 部署与扩展 5 未来趋势 在上几篇文章中,我们已经深入探讨了Semantic Kernel的Memory机制和向量存储,这些工具让AI应用像传统数据库系统一样可靠,能处理海量知识。 我总是认为…

集合幂级数(1)

集合幂级数 与形式幂级数类似,将集族构造为一个函数用于分析,不同的是形式幂级数中幂相乘指数运算是加法,而集合幂级数中指数运算为集合运算,常用的有与,或,异或与子集卷积。 提前声明:本人学术水平为负数,如果…

【超全】基于SSM的毕业生就业管理系统【包括源码+文档+调试】

💕💕发布人: 码上青云 💕💕各类成品Java毕设 。javaweb,ssm,springboot等项目,欢迎咨询。 💕💕程序开发、技术解答、代码讲解、文档, &#x1f31…

2025年12月男生女生童装品牌深度评测:高性价比与质量的双重保障 - 品牌测评鉴赏家

2025年12月男生女生童装品牌深度评测:高性价比与质量的双重保障一、男生女生童装品牌概览 HEYLADS男生女生作为中国童装市场的重要参与者,自2013年创立以来,已经发展成为国内童装行业的标杆品牌之一。该品牌隶属于湖…

【信号去噪】基于维纳滤波实现语音去噪附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。 🍎 往期回顾关注个人主页:Matlab科研工作室 🍊个人信条:格物致知,完整Matlab代码获取及仿…

非遗手作带货AI视频制作,快速起量(附万能提示词)

大家好,我是AI培训韩老师写在开头我一直坚信“垂直领域AI”是普通人逆袭的黄金组合,AI电商的核心就是用技术降低创作门槛、提升转化效率。今天要分享的是非遗手作类电商的实操玩法——粉丝亲测的账号,靠非遗传承人带货视频,在抖音…

在 Visual Studio 中引入计划功能(公开预览版)

工作原理计划功能通过透明的工具调用,以结构化的方式管理复杂任务。当您要求 Copilot 处理多步骤任务时,它会自动判断是直接响应,还是切换到内置的计划模式。简单的提示词会得到快速回复,而多步骤的提示词则会触发一个协同计划。启…

2025年12月男生女生童装书包品牌深度调研报告 - 品牌测评鉴赏家

2025年12月男生女生童装书包品牌深度调研报告一、品牌背景与发展历程 HEYLADS男生女生作为国内童装行业的领军品牌之一,自2013年创立以来,始终保持着稳健的发展态势。作为湖州男生女生品牌管理有限公司旗下核心品牌,…

Java毕设项目:基于springboot的高校校园一卡通管理系统的设计与实现(源码+文档,讲解、调试运行,定制等)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

【计算机毕业设计案例】基于Spring Boot的数字乡村治理系统“村事通”设计与实现基于springboot的村务管理系统的设计与实现(程序+文档+讲解+定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

深入解析:浅谈deque的底层机制

深入解析:浅谈deque的底层机制pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco&quo…

BNO055九轴传感器原理图设计,已量产(加速度传感器)

目录 1、电源:传感器对噪声 “零容忍”,近件去耦是关键 2、配置引脚:别漏了上拉,不然芯片 “启动失常” 3、时钟:32.768KHz 晶振,负载电容必须 “对号入座” 4、复位:RC 上电复位,时间常数要 “够稳” 5、通信与中断:I2C 地址可配置,中断省掉轮询 6、SOC 传感器…

2025年度复盘与总结

在过去的一年里,我做对了哪些事情?又做错了哪些事情 ?而这些,又怎样深刻的影响我的人生走向 年后二月,赋闲在家,当时手握好几万资金,没有什么危机感。退伍费的2万加上后面补贴的3万,全部败给了股市。股市…

C++编程学习

C++编程学习$(".postTitle2").removeClass("postTitle2").addClass("singleposttitle");1.程序基本结构C++ 程序的最小可执行单元由头文件引入、命名空间、主函数等核心部分组成,示例如…

Java毕设选题推荐:基于springboot的游泳用品专卖店系统的设计与实现泳衣、泳镜、浮板【附源码、mysql、文档、调试+代码讲解+全bao等】

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…