你知道什么是 GitHub Action 么?

本文介绍GitHub Action的基本概念与使用方法,深入探讨持续集成(CI)、持续交付(CD)及持续部署(CD)的区别与联系,解析如何利用GitHub Action实现自动化工作流程。

本文是 GitHub Action 的入门教程,如您已有相关使用经验可以直接关掉。

GitHub Action 是 GitHub 于 2018 年 10 月推出的一个 CI\CD 服务。

之前一直都是 Beta 版本,正式版于 2019 年 11 月正式推出。

首先还是先放几个官方的链接:

GitHub Action : https://github.com/features/actions

GitHub Action 官方市场: https://github.com/marketplace?type=actions

CI\CD

CI\CD 其实说的是三件事情:「持续集成(Continuous Integration)」、「持续交付(Continuous Delivery)」、「持续部署(Continuous Deployment)」。

因为「持续交付」和「持续部署」的英文缩写是一样的,所以这三件事情缩写成了 CI\CD 。

持续集成

那么什么是「持续集成」?借用一幅图:

从这幅图上可以很清楚的看到「持续集成」的流程:

  • 开发人员提交代码到 Source Repository (源代码仓库),并通过 git hook 等
  • 触发 CI Server(持续集成服务器)的相关功能。执行 编译 -> 测试 -> 输出结果 的流程
  • 向开发人员反馈结果的 report

我们在日常开发中经常使用到的集成方式是「阶段集成」(完成一个阶段的开发后执行代码的集成),相比较而言,「持续集成」能给我们带来的好处有哪些?

  • 易于定位错误:每一次的代码集成都需要执行相关的测试工作,持续集成频繁的集成次数天然的*将复杂的代码逻辑切割为了小块,也就使得每一次测试中遇到的错误能够更加容易的被定位;
  • 易于控制开发流程:更为细致的工作提交也就意味着更容易判断当前的工作进度,这对于管理者规划开发流程而言提供了一个有效的参考,同时也为开发人员省下了汇报工作的时间;
  • 易于 CodeReview:对于大块工作的切分自然也有助于做 CodeReview;
  • 易于减少不必要的工作:build 以及 test 过程的自动化可以为你节约一大票的时间,从而投入到有价值的工作中去。

持续交付

什么是持续交付呢?

「持续交付」 指的是:一种能够使得软件在较短的循环中可靠的发布的软件工程方法。

与「持续集成」相比,持续交付的侧重点在于 交付 ,其核心对象不在于代码,而在于可交付的产物。

「持续集成」仅仅针对于新旧代码的集成过程执行了一定的测试,其变动到持续交付后还需要一些额外的流程。

从上面这张图可以看到,与「持续集成」相比较,持续交付 添加了 Test -> Staging -> Production 的流程,也就是为新增的代码添加了一个保证:确保新增的代码在生产环境中是可用的。

在这一增加的流程中,Test 环节不仅仅包含基本的单元测试,还需要延伸到更为复杂的功能测试以及集成测试等。

在这里,Staging 指的是 类生产环境 ,其尽可能的对真实的网络拓扑、数据库数据以及硬件设备等资源进行模拟,从而为测试人员反馈代码在生成环境中的可能表现。

流程中每一个环节的执行结果都会对开发人员进行反馈,每一个出现的错误都会导致版本的回滚。

当测试完毕确认无误之后,将由相关人员对其进行 手动 部署到生产环境。

持续部署

「持续部署」意味着:通过自动化部署的手段将软件功能频繁的进行交付。

与「持续交付」以及「持续集成」相比,「持续部署」强调了通过 automated deployment 的手段,对新的软件功能进行集成。

通过和「持续交付」的图对比,区别主要体现在对 Production 的自动化。

从开发人员提交代码到编译、测试、部署的全流程不需要人工的干预,完全通过自动化的方式执行。

这一策略加快了代码提交到功能上线的速度,保证新的功能能够第一时间部署到生产环境并被使用。

从前面这些介绍可以看到,CI/CD 是由很多操作组成,比如抓取代码、运行测试、登录远程服务器,发布到第三方服务等等。GitHub 把这些操作就称为 actions。

很多操作在不同项目里面是类似的,完全可以共享。GitHub 注意到了这一点,想出了一个很妙的点子,允许开发者把每个操作写成独立的脚本文件,存放到代码仓库,使得其他开发者可以引用。

如果你需要某个 action,不必自己写复杂的脚本,直接引用他人写好的 action 即可,整个持续集成过程,就变成了一个 actions 的组合。这就是 GitHub Actions 最特别的地方。

<think> 嗯,用户这次问的是GitHub仓库的定义,需要结合之前的引用内容来回答。用户之前下载过大模型,但这次的问题转向了GitHub的基础概念,可能是刚接触版本控制。 从五个引用中提取关键信息: 引用[1]提到仓库分两种:通过GitHub Desktop创建的云端仓库和在本地构建的自定义仓库。引用[2]展示仓库内部结构,证明仓库是包含代码/脚本的容器。引用[3][5]说明仓库可托管网站(特殊仓库username.github.io)。引用[4]则体现仓库作为依赖库的扩展用途。 用户可能混淆了“仓库”和“文件存储”的概念,需要强调仓库的版本控制特性。特别要注意引用[4]展示的maven配置案例,说明仓库不仅是存储单元,更是开发基础设施的一部分。 回答框架这样组织:先明确仓库是项目容器(核心属性),再分三类场景说明(代码管理/网站托管/依赖分发),最后用比喻总结。每个功能点都要标注引用来源,比如网站托管功能必须带上[3][5]的引用标记。 用户身份推测是开发者新手,所以避免讲Git底层原理,重点说应用场景。之前ta关注过大模型,可能后续会问“如何用GitHub管理大模型项目”,可以预留相关问题的接口。 </think> GitHub仓库(Repository)是**GitHub平台上用于存储和管理项目的核心单元**,本质上是包含代码文件、文档、版本历史记录及相关资源的目录。以下是其核心定义和功能解析: --- ### 一、核心定义 1. **项目容器** - 存储项目的所有文件(代码、配置文件、文档等) - 保留完整的**版本历史记录**(通过Git实现)[^1][^2] - 支持多人协作开发(分支管理、合并请求) 2. **两类主要形式** | **类型** | 特点 | 来源 | |----------------|-------------------------------|------------| | 云端仓库 | 通过GitHub客户端直接创建 | 引用[1] | | 本地自定义仓库 | 本地构建后推送至GitHub | 引用[1][^1] | --- ### 二、关键功能与用途 1. **代码托管与版本控制** - 使用Git管理代码变更(提交、回滚、分支) - 示例:通过`git push`上传本地仓库到GitHub[^1] 2. **自动化工作流(GitHub Actions)** - 在仓库内运行自定义脚本(如测试、部署) ```yaml # 引用[2]示例:调用仓库内Action - name: test action uses: ./.github/actions/my_action ``` 3. **静态网站托管** - 特殊仓库 `用户名.github.io` 自动托管网站 - 通过`index.html`或`CNAME`绑定自定义域名[^3][^5] ```html <!-- 引用[3]:跳转到自定义域名 --> <meta http-equiv="refresh" content="0; url=https://www.example.com"/> ``` 4. **依赖分发(扩展用途)** - 作为Maven仓库存储Java依赖包[^4] ```xml <!-- 引用[4]:配置GitHub仓库为Maven源 --> <repository> <id>shopManager</id> <url>https://github.com/user/repo.git</url> </repository> ``` --- ### 三、技术特点总结 | **特性** | 说明 | |------------------|----------------------------------------------------------------------| | 访问控制 | 支持公开(Public)或私有(Private)仓库 | | 协作机制 | Issue跟踪、Pull Request代码审查 | | 集成扩展 | 支持GitHub Actions、Pages、Packages等扩展服务 | | 数据存储 | 所有文件+元数据(提交记录、分支、标签) | --- ### 四、典型应用场景 1. **开发项目托管** - 存储开源框架(如TensorFlow)、个人工具脚本 2. **文档/博客站点** - 通过GitHub Pages发布技术博客(如引用[3][5]) 3. **持续集成/部署(CI/CD)** - 利用Actions自动化测试和发布流程[^2] 4. **私有依赖管理** - 企业内部分发私有库(Java/Python包)[^4] > **比喻理解**: > GitHub仓库如同一个**智能文件保险箱**: > - 基础功能是存储文件(代码) > - 附加能力包括:自动记录修改痕迹(Git)、执行定制任务(Actions)、对外展示内容(Pages) ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值