15分钟学 Go 第 57 天 :持续集成与持续部署

server/2024/11/20 23:05:00/

第57天:持续集成与持续部署

目标:学习CI/CD的基本概念

1. 什么是CI/CD?

CI/CD(持续集成和持续部署)是现代软件开发流程中的两大关键实践,它们帮助开发团队快速交付高质量的软件。以下是CI/CD的基本定义:

  • 持续集成(CI, Continuous Integration):是一种开发实践,要求开发人员频繁地将代码集成到共享的代码库中。每次集成都通过自动构建和测试来验证,以尽早发现错误。

  • 持续部署(CD, Continuous Deployment):是一种软件发布管理方式,确保代码在通过测试后自动部署到生产环境。这意味着只要新代码通过所有测试,就会自动发布。

2. CI/CD 的工作流程

以下是CI/CD的基本工作流:

  1. 开发人员将代码提交到版本控制系统(如Git)。
  2. CI服务监测到新提交,自动启动构建过程。
  3. CI服务拉取代码,编译软件,运行测试(单元测试、集成测试等)。
  4. 如果构建和测试成功,代码会自动部署到预生产环境。
  5. 最终,如果满足条件,代码将自动部署到生产环境。

3. CI/CD 的优势

  • 快速反馈:持续集成能够快速找出代码中的缺陷。
  • 更频繁的发布:对用户提供更频繁的功能更新。
  • 提高开发效率:自动化构建和测试流程,使开发人员可以专注于编码。
  • 降低风险:小而频繁的发布减少了大版本更新的风险。

4. 使用Go语言构建CI/CD流水线

4.1 环境准备

在本节中,我们将利用GitHub Actions作为CI/CD工具,并使用Go语言进行一个小应用的构建与部署。

  1. 确保安装Go语言并配置好GOPATH。
  2. 创建一个GitHub账号并创建一个新的代码库。
4.2 示例应用:简单的HTTP服务器

我们将创建一个简单的Go HTTP服务器,用于演示CI/CD流程。

代码结构

myapp/
├── main.go
├── go.mod
├── go.sum
└── .github/└── workflows/└── ci.yml

main.go

package mainimport ("fmt""net/http"
)func handler(w http.ResponseWriter, r *http.Request) {fmt.Fprintf(w, "Hello, World!")
}func main() {http.HandleFunc("/", handler)http.ListenAndServe(":8080", nil)
}

go.mod

module myappgo 1.18

5. 编写 GitHub Actions 流水线

.github/workflows/ci.yml中,我们将定义我们的CI/CD流程。

ci.yml

name: CI/CD Pipelineon:push:branches:- mainjobs:build:runs-on: ubuntu-lateststeps:- name: Checkout codeuses: actions/checkout@v2- name: Set up Gouses: actions/setup-go@v2with:go-version: '1.18'- name: Run testsrun: go test ./...- name: Buildrun: go build -v- name: Deploy to Productionif: github.ref == 'refs/heads/main'run: |echo "Deploying application..."# 这里可以添加自动部署的脚本,例如调用Docker或其他语言的部署工具

6. CI/CD 运行流程图

以下是该CI/CD流程的运行流程图:

+-------------------+
|  开发人员提交代码  |
+-------------------+|v
+-------------------+
|     GitHub Actions |
|   触发CI流程      |
+-------------------+|v
+-------------------+
|   Checkout代码    |
+-------------------+|v
+-------------------+
|   设置Go环境      |
+-------------------+|v
+-------------------+
|   运行测试        |
+-------------------+|v
+-------------------+
|   代码构建        |
+-------------------+|v
+-------------------+
| 部署到生产环境    |
+-------------------+

7. 其他 CI/CD 工具

虽然本节讨论了GitHub Actions,实际上还有许多其他流行的CI/CD工具,比如:

  • Travis CI:提供与GitHub紧密集成的CI/CD工具。
  • CircleCI:一个灵活的CI/CD工具,快速构建、测试和部署应用。
  • Jenkins:开源的CI服务器,通过插件可以扩展到几乎所有的开发、测试及部署工具。
  • GitLab CI/CD:集成在GitLab中的CI/CD功能,使用方便,高度可定制。

8. 实践练习

8.1 创建新的分支

在本地创建并切换到新的功能分支:

git checkout -b feature/add-greeting
8.2 修改代码

main.go中添加新功能,例如添加时间问候:

package mainimport ("fmt""net/http""time"
)func handler(w http.ResponseWriter, r *http.Request) {currentHour := time.Now().Hour()if currentHour < 12 {fmt.Fprintf(w, "Good Morning!")} else if currentHour < 18 {fmt.Fprintf(w, "Good Afternoon!")} else {fmt.Fprintf(w, "Good Evening!")}
}func main() {http.HandleFunc("/", handler)http.ListenAndServe(":8080", nil)
}
8.3 提交并推送更改
git add main.go
git commit -m "Add greeting based on time of day"
git push origin feature/add-greeting
8.4 创建Pull Request

在GitHub上创建Pull Request并进行合并。

9. 总结

本天的学习目标是理解和掌握CI/CD的基本概念。我们通过构建一个简单的Go应用,使用GitHub Actions实现了从代码提交到部署的完整流程。请确保你理解每个步骤,并实践这些知识,以提高自己在CI/CD方面的能力。

10. 参考资料

  • Continuous Integration: Improving Software Quality
  • GitHub Actions Documentation
  • Go Documentation

怎么样今天的内容还满意吗?再次感谢观众老爷的观看,关注GZH:凡人的AI工具箱,回复666,送您价值199的AI大礼包。最后,祝您早日实现财务自由,还请给个赞,谢谢!


http://www.ppmy.cn/server/143559.html

相关文章

淘宝商品爬虫:Python实战指南

在互联网时代&#xff0c;数据的价值不言而喻。对于电商领域来说&#xff0c;获取商品信息是数据分析、市场调研的重要一环。淘宝作为中国最大的电商平台之一&#xff0c;拥有海量的商品数据。本文将带你了解如何使用Python编写爬虫&#xff0c;按照关键字搜索并获取淘宝商品信…

【机器学习】机器学习中用到的高等数学知识-7.信息论 (Information Theory)

熵 (Entropy)&#xff1a;用于评估信息的随机性&#xff0c;常用于决策树和聚类算法。交叉熵 (Cross-Entropy)&#xff1a;用于衡量两个概率分布之间的差异&#xff0c;在分类问题中常用。 信息论作为处理信息量和信息传输的数学理论&#xff0c;在机器学习中具有广泛的应用。…

CSS一些练习过程

1.字体样式 代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title…

云原生之运维监控实践-使用Telegraf、Prometheus与Grafana实现对InfluxDB服务的监测

背景 如果你要为应用程序构建规范或用户故事&#xff0c;那么务必先把应用程序每个组件的监控指标考虑进来&#xff0c;千万不要等到项目结束或部署之前再做这件事情。——《Prometheus监控实战》 去年写了一篇在Docker环境下部署若依微服务ruoyi-cloud项目的文章&#xff0c;当…

《物理学进展》

投稿指南 《物理学进展》是中国物理学会主办的物理类刊物&#xff0c;双月刊&#xff0c;为国家中文核心期刊。刊稿内容包括物理学的各分支学科&#xff0c;着重反映物理学前沿领域的重大突破和新兴方向中的活跃状态&#xff0c;以及传统和交叉学科的最新进展。稿件类型包括对某…

童年的快乐,矫平机为玩具打造安全品质

童年的快乐&#xff0c;矫平机为玩具打造安全品质 每个人的童年都充满了欢笑和快乐&#xff0c;玩具作为这段时光中不可或缺的伙伴&#xff0c;其安全性和品质尤为重要。矫平机在这个领域扮演着重要角色&#xff0c;它确保了玩具材料的平整和安全&#xff0c;为孩子们的童年增…

高斯数据库Postgresql死锁和锁表解决方法

解决死锁进方法&#xff1a; 查询死锁进程列表 select * from pg_stat_activity where waiting‘t’ 发现有好几条挂起的记录&#xff0c;记录下所有或需要解锁的pid 解决死锁进程 select pg_cancel_backend(‘pid值’) 解决完后&#xff0c;刷新后测试&#xff0c;恢复正…

C语言入门到精通(第六版)——第十六章

16、网络套接字编程 16.1、计算机网络基础 计算机网络技术是计算机技术和通信技术相结合的产物&#xff0c;代表计算机的一个重要发展方向。了解计算机的网络结构&#xff0c;有助于用户开发网络应用程序。 16.1.1、IP地址 为了使网络上的计算机能够彼此识别对方&#xff0c;…