携程运维总监手把手带你上手CI/CD


从业几年,你肯定听说过CI/CD之类的词。对于一家公司或者一个创业团队来说,持续集成、持续交付将会大幅度提升团队的协同效率,并保证软件按时按质交付。


但今天我想说,持续交付也是中高级程序员的关键能力,每个程序员都应该认真去学习。为什么这么说呢?


你可以通过对持续交付的学习,进一步加强自己对整个软件工程的认识。


持续交付涵盖了软件交付端到端的整个周期,其覆盖面不仅仅包括编码,还包括:设计、测试、部署、运维、运营等等。


如果你对自己的发展有更高的要求,那么你就应该学习一下持续交付的内容,它能让你看到更多与编码有关的其他东西,比如不同的编码方式等;也能让你站在更高的角度去看待自己的工作:研发效率的提高往往不是个人能力的提高,而是集体协同效率的提高。


你可以利用持续交付的工具或最佳实践,提高自己的工作效率和质量。


随着持续交付的流行,其配套的实践和工具也层出不穷。如果你玩过ping-pong式的结对编程(A写测试,B写实现,然后B写下一个测试,A写重构和实现),你一定会觉得编程如此轻松有趣,而这种TDD的方式也很好的保证了代码质量。


你可以参与到持续交付实施中去,享受为其他程序员提供效率工具的挑战和乐趣。


试想一下,如果你是一个出租车司机,而你的乘客却是舒马赫(F1世界冠军),此时你开车的压力会有多大。其实参与到持续交付的实施中也是一样,因为你正在用程序员的方式改造程序员的工作习惯,为程序员提供工具。


而今天,我就想把我多年积累的持续集成、持续交付经验通过《持续交付36讲》专栏分享给你。


640?wx_fmt=jpeg

是谁


我是王潇俊,携程旅行网系统研发部总监,目前负责携程PaaS平台、容器云及持续交付体系等。


我拥有10年以上的互联网企业技术开发及管理经验,既经历过创业企业发展的过程,也在较成熟的大型集团公司担任过技术管理工作,对互联网研发技术、体系、方法有较深入的理解。


在工作初期从事过直接面向用户的业务端开发;之后在大众点评网期间,也常年致力于平台工具的研发;后又逐步转型到系统架构,云架构的研发;在大众点评和携程期间,承担着企业持续交付能力和研发效率提升的工作,对整个互联网的研发也有比较全面的了解


课程介绍


专栏约三个月,共37期,围绕持续交付主要知识,分成4大模块。


持续交付知识详解:通过对持续交付5大核心内容(配置管理、环境管理、构建集成、灰度发布和测试管理)的介绍,帮你系统地、全面地了解持续交付。


持续交付的平台化:通过实际的设计案例,整合持续交付的各个环节,帮你以平台化思维,进一步对持续交付体系加以完善和优化。


打造移动App的持续交付体系:将介绍与传统网站、后端服务完全不同的持续交付思想,以及业内领先的相关技术和设计,教你移动App如何做到持续交付。


利用开源工具快速打造持续交付平台: 将为你系统介绍构建持续交付的三款开源工具:GitLab、Jenkins、Ansible,并以此为基础带你构建一套完整的持续交付平台。


640?wx_fmt=jpeg


订阅福利

福利一:限时优惠¥45元,原价¥68元(7月14日恢复原价)


福利二:每邀请一位好友购买,你可获得18元的现金返现,多邀多得,上不封顶,可立即提现(提现流程:极客时间公众号-我的-现金奖励提现)


如何订阅?

扫描下方二维码即可订阅



640?wx_fmt=jpeg

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
是的,可以通过缓冲的通道来控制协程数量。具体实现方法是,先创建一个缓冲的通道,然后在启动协程之前,向通道中发送一些数据。每当一个协程启动时,从通道中读取一条数据,如果通道已经空了,则协程会被阻塞,直到有新的数据进入通道。 这个方法的原理是,通过限制通道中数据的数量,从而限制同时运行的协程数量。当通道已满时,新的协程会被阻塞,直到有其他协程执行完毕,从而腾出一个通道位置。 下面是一个示例代码,使用缓冲通道控制同时运行的协程数量: ```go package main import ( "fmt" "time" ) func worker(id int, jobs <-chan int, results chan<- int) { for j := range jobs { fmt.Println("worker", id, "started job", j) time.Sleep(time.Second) fmt.Println("worker", id, "finished job", j) results <- j * 2 } } func main() { const numJobs = 10 const numWorkers = 3 jobs := make(chan int, numJobs) results := make(chan int, numJobs) for w := 1; w <= numWorkers; w++ { go worker(w, jobs, results) } for j := 1; j <= numJobs; j++ { jobs <- j } close(jobs) for a := 1; a <= numJobs; a++ { <-results } } ``` 在这个示例代码中,我们创建了一个 `jobs` 通道和一个 `results` 通道,并启动了三个协程来处理 `jobs` 通道中的任务。在 `main` 函数中,我们向 `jobs` 通道中发送了 10 个任务,并在最后等待所有任务完成。 可以看到,在启动协程时,我们使用了缓冲的 `jobs` 通道,来限制同时运行的协程数量。当 `jobs` 通道已满时,新的协程会被阻塞,直到有其他协程执行完毕,从而腾出一个通道位置。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值