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

news2024/11/17 10:40:35

第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 main

import (
	"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 myapp

go 1.18

5. 编写 GitHub Actions 流水线

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

ci.yml

name: CI/CD Pipeline

on:
  push:
    branches:
      - main

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
    - name: Checkout code
      uses: actions/checkout@v2

    - name: Set up Go
      uses: actions/setup-go@v2
      with:
        go-version: '1.18'

    - name: Run tests
      run: go test ./...

    - name: Build
      run: go build -v

    - name: Deploy to Production
      if: 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 main

import (
	"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.coloradmin.cn/o/2242107.html

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

相关文章

GitLab 如何跨版本升级?

本分分享 GitLab 跨版本升级的一些注意事项。 众所周知&#xff0c;GitLab 的升级必须要严格遵循升级路径&#xff0c;否则就会出现问题&#xff0c;导致升级失败。因此&#xff0c;在 GitLab 升级之前需要做好两件事情&#xff1a; 当前版本的确认升级路径的确认 极狐GitLa…

【咕泡P5人工智能CV 技术NLP项目实战】

人工智能核心代码&#xff1a; 一、什么是人工智能技术&#xff1a; 人工智能&#xff08;Aritificial Intelligence&#xff09;&#xff0c;英文缩写AI&#xff0c;人工智能是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学。 人工智…

R门 - rust第一课陈天 -内存知识学习笔记

内存 #mermaid-svg-1NFTUW33mcI2cBGB {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-1NFTUW33mcI2cBGB .error-icon{fill:#552222;}#mermaid-svg-1NFTUW33mcI2cBGB .error-text{fill:#552222;stroke:#552222;}#merm…

C# x Unity 从玩家控制类去分析命令模式该如何使用

本文部分内容出自游戏编程模式一书,游戏编程模式,有兴趣的小伙伴可以去看看,虽然不是unity x c#写的 但是思路挺好的 目录 目录 0.先说结论 发现问题 命令模式如何解耦 打个断点更利于分析 怎么实现延迟命令? 如何撤销命令? 脚本整体一览 不足分析(AI) 0.先说结论 …

【C++】—— stack和queue的模拟实现

前言 ​ stack 和 queue使用起来都非常简单&#xff0c;现在来模拟实现一下&#xff0c;理解其底层的原理。 ​ 在实现之前&#xff0c;应该知道&#xff0c;stack 和 queue 都是容器适配器&#xff0c;通过看官网文件也可以看出来&#xff1b;其默认的容器都是deque&#xff…

探索高效的 Prompt 框架:RBTR 提示框架的奥秘与优势

前言 在当今数字化的时代&#xff0c;人工智能&#xff08;AI&#xff09;已经成为我们生活和工作中不可或缺的一部分。而 Prompt 作为与 AI 交互的关键工具&#xff0c;其质量直接影响着我们获取信息的准确性和有用性。今天&#xff0c;我们将深入探讨一个通用的 Prompt 框架…

动态规划-完全背包问题——322.零钱兑换

1.题目解析 题目来源 322.零钱兑换——力扣 测试用例 2.算法原理 1.状态表示 这里需要寻找硬币使总面值等于一个值求出所需硬币的最小个数&#xff0c;所以不妨设置一个二维dp表&#xff0c;即dp[i][j]&#xff1a;在[1,i]个硬币中选择的硬币总面值完全等于j时所需要的最小硬…

day-82 最少翻转次数使二进制矩阵回文 I

思路 依次计算使行回文和列回文的的翻转次数&#xff0c;返回较小的次数即可 解题过程 计算行翻转次数&#xff1a;对于每一行&#xff0c;如果第一个数与最后一个数不相同&#xff08;前提前一个数的索引小于后一个数的索引&#xff09;则需翻转一次&#xff0c;将所有行翻转…

计算光纤色散带来的相位移动 matlab

需要注意的地方 1.以下内容纯属个人理解&#xff0c;很有可能不准确&#xff0c;请大家仅做参考 2.光速不要直接用3e8 m/s&#xff0c;需要用精确的2.9979.... 3.光的频率无论在真空还是光纤(介质)都是不变的&#xff0c;是固有属性&#xff0c;但是波长lambdac/f在不同的介…

15分钟学 Go 第 53 天 :社区资源与学习材料

第53天&#xff1a;社区资源与学习材料 目标 了解Go语言官方资源掌握社区重要学习平台学会利用开源项目学习构建个人知识体系 一、Go语言官方资源汇总 资源类型网址说明Go官网golang.org官方文档、下载、教程Go Blogblog.golang.org技术博客、最新特性介绍Go Playgroundpla…

丹摩征文活动 |【前端开发】HTML+CSS+JavaScript前端三剑客的基础知识体系了解

前言 &#x1f31f;&#x1f31f;本期讲解关于HTMLCSSJavaScript的基础知识&#xff0c;小编带领大家简单过一遍~~~ &#x1f308;感兴趣的小伙伴看一看小编主页&#xff1a;GGBondlctrl-CSDN博客 &#x1f525; 你的点赞就是小编不断更新的最大动力 …

【Python · PyTorch】卷积神经网络(基础概念)

【Python PyTorch】卷积神经网络 CNN&#xff08;基础概念&#xff09; 0. 生物学相似性1. 概念1.1 定义1.2 优势1.2.1 权重共享1.2.2 局部连接1.2.3 层次结构 1.3 结构1.4 数据预处理1.4.1 标签编码① One-Hot编码 / 独热编码② Word Embedding / 词嵌入 1.4.2 归一化① Min-…

机器学习-36-对ML的思考之机器学习研究的初衷及科学研究的期望

文章目录 1 机器学习最初的样子1.1 知识工程诞生(专家系统)1.2 知识工程高潮期1.3 专家系统的瓶颈(知识获取)1.4 机器学习研究的初衷2 科学研究对机器学习的期望2.1 面向科学研究的机器学习轮廓2.2 机器学习及其应用研讨会2.3 智能信息处理系列研讨会2.4 机器学习对科学研究的重…

激光slam学习笔记5---ubuntu2004部署运行fastlivo踩坑记录

背景&#xff1a;看看fastlivo论文&#xff0c;觉得挺有意思的&#xff0c;就本地部署跑跑看看效果。个人环境&#xff0c;ubuntu20.04。 一、概要 由于依赖比较多&#xff0c;个人构建工作空间&#xff0c;使用catkin_make编译 src├── FAST-LIVO├── livox_ros_driver…

多模态大模型开启AI社交新纪元,Soul App创始人张璐团队亮相2024 GITEX GLOBAL

随着AI在全球范围内的加速发展和广泛应用,各行业纷纷在此领域发力。作为全球最大的科技盛会之一,2024年的GITEX GLOBAL将目光再次聚焦于人工智能的飞速发展,吸引了超过6700家来自各个领域的企业参与。在这样的背景下,Soul App作为国内较早将AI技术应用于社交领域的平台,首次亮相…

67页PDF |埃森哲_XX集团信息发展规划IT治理优化方案(限免下载)

一、前言 这份报告是埃森哲_XX集团信息发展规划IT治理优化方案&#xff0c;报告中详细阐述了XX集团如何优化IT治理结构以适应新的要求。报告还分析了集团管控模式的变化&#xff0c;提出了六大业务中心的差异化管控策略&#xff0c;并探讨了这些变化对IT治理模式的影响。报告进…

基于java Springboot高校失物招领平台

一、作品包含 源码数据库设计文档万字PPT全套环境和工具资源部署教程 二、项目技术 前端技术&#xff1a;Html、Css、Js、Vue、Element-ui 数据库&#xff1a;MySQL 后端技术&#xff1a;Java、Spring Boot、MyBatis 三、运行环境 开发工具&#xff1a;IDEA/eclipse 数据…

[C++] 智能指针

文章目录 智能指针的使用原因及场景分析为什么需要智能指针&#xff1f;异常抛出导致的资源泄漏问题分析 智能指针与RAIIC常用智能指针 使用智能指针优化代码优化后的代码优化点分析 析构函数中的异常问题解决方法 RAII 和智能指针的设计思路详解什么是 RAII&#xff1f;RAII 的…

Git回到某个分支的某次提交

1.切换到需要操作的分支&#xff08;<branch-name>是分支名称&#xff09;。 命令如下&#xff1a; git checkout <branch-name> 2.获取代码的提交记录 。命令如下&#xff1a; git log 按q退出当前命令对话。 获取到某次提交或者合并的hash值&#xff08;下文…

掌握 Spring Boot 的最佳方法 – 学习路线图

在企业界&#xff0c;人们说“Java 永垂不朽&#xff01;”。但为什么呢&#xff1f;Java 仍然是开发企业应用程序的主要平台之一。大型公司使用企业应用程序来赚钱。这些应用程序具有高可靠性要求和庞大的代码库。根据Java开发人员生产力报告&#xff0c;62% 的受访开发人员使…