自動化の繰り返しのことをしてみましょう。
適切に使用した場合、CI / CDは、チームの効率化を支援するための優れたツールとなるでしょう。あなたは信じることがない、と確かに誰もがスクリプトの実行の結果を展開する「凝視」に、数時間の時間を費やすことを望んでいるが、また、システムが正常に動作することを確認するために、手動テスト。
著者|のタイラーBorgeson、許可された翻訳
翻訳| Luozhaoチェン、Zebian | TANGリード
出品 | CSDN(ID:CSDNnews)
以下は翻訳です。
EDITORIAL
これは私がソフトウェア開発の方法の範囲を改善するために、開発プロセスや実践を強化するためにソフトウェアエンジニアを含める予定、記事のこのシリーズの記事の私の「主流のソフトウェア開発プラクティス」シリーズの最初の部分です。私がThoughtWorksのソフトウェアでコンサルタントとして働いていた、そして今、私は大規模なドイツの小売企業で働く、これらの方法は、実績のある、私は彼のキャリアの中で学ばなければならなかったされています。
私は、顧客のクラウド移行プロジェクトに関わっています。それは仕事の後、シニアエンジニアが私を招待するときだけであるため前に、私は非常に興奮して作った彼のプロジェクトの展開、と「凝視」、一日の仕事の後、私はオフィスのオフィスに行ってきました初日でした私はそれは物事が展開するプロジェクト「凝視」やったことがない、と私は「凝視」、の前にいないに学ぶには、このことを楽しみにしています「知識」。
これは本当に非常に「刺激的な」プロセスは、「凝視」の展開が本当に最悪の決断です。
同社は、私は良い会社彼に電話するつもりです。自分の会社のシステムはそれぞれ、これらのインスタンスを実行し、別のLinuxマシン上で自社のデータセンターでは16個のインスタンスの合計を展開し、彼らはまた、別のマシン上のインスタンスを区別するために、別の名前を使用します。その日の展開は、私は、彼らが自分のコンピュータを使用して見た各サーバーにリモート接続スクリプトを展開した後、以前の書面による実行します。配置スクリプトが実行されると、彼らはまた、サーバー起動し、正常動作していることを確実にするために、手動でテストする必要があります。私たちは、展開プロセスを通じて「凝視」に3時間を過ごしました。
幸いなことに、私はこの男の子の上に言ったことに加えて、自分の会社だけでなく、エンジニアは、サーバーに展開する方法を知っています。しかし、状況は、彼らが同時に離れることができないという楽観的ではありません、そして、それらの病気の一つは、作業に関与することができないときはいつでも、他の人だけでは展開され、仕事というもののすべてを引き受けることになります。今、彼らは隔週展開しています。
夜、私が仕事から家に来ましたが、今日の事は私は眠ることができませんでした。
在我多年的工作中,我最喜欢做的一件事情就是:让重复的事情自动化。我知道,很多程序员都说过这个话。我一直把“任何事情不要做两遍”这句话当做我的座右铭。
对于任何一个团队来说,系统自动化部署都是一件非常重要的事情,这也是我在 A 公司所做的第一件事,使用构建管道来实现持续集成与持续交付。持续集成流程如下:
持续集成示例图
持续集成
在业界,我们通常将它称之为 CI ,这是一种开发、部署的实践。开发人员每天都将自己的更改推送到主分之中进行集成,通常情况下,这样的操作每天都会发生很多次。从更高的视角来看,CI 能使开发者更快的发现模块或功能中的错误。持续集成的整个流程很简单:
开发者将代码提交到项目主分支;
CI 服务器检测到更改并将最新代码拉下来;
CI 服务器编译更改后的代码,并给他们打个标签;
CI 服务器执行所有的单元测试、集成测试、端到端的测试;
如果上述任何阶段,出现任何问题(包括测试用例失败),整个 CI 流程将会被停止,并且将错误信息发送给开发人员。
无论提交的大小,CI 能让整个团队看到每一个提交对整个项目的影响。当流程中出现问题的时候,通过 CI,可以准确地知道问题是由哪个提交造成的,也有可能从错误信息中看到是因为哪一行代码引起的。
DevOps 中建议开发者,每一个代码提交,文件变更都尽可能地小。持续集成的最佳实践告诉我们,最好也按照 DevOps 中的建议做。当然,我们也需要确保,所有运行环境都要尽可能保持一致,不论是在开发环境、测试环境、集成环境、还是生产环境。
GoCD 的流程
持续交付
持续交互在业界被简称为 CD ,是指在自动完成所有的自动化测试代码过后,将通过的代码进行直接部署。
从本质上来讲,这是软件发布的最佳实践。—— Jez Humble(译者注:Jez Humble,被誉为「持续交付之父」,《DevOps 实践指南》、《精益企业》、《持续交付》作者。)
持续交互还应该包含以下几点:
作为整个构建流程的一部分,你需要在所有的测试通过过后,自动创建一个版本,并使用脚本,将它自动部署到你所有的环境中去(测试环境、集成环境、生产环境等)。
作为整个流程的最后一个步骤,你还需要运行冒烟测试,来确保你所部署的服务正在顺利的运行。
设置监控报警,当出现问题是要第一时间通知开发者。
应该提供功能切换的功能,隐藏代码的具体实现细节。
在部署过程中,所有的修改都是单独提交的,因此由部署带来的风险和 Bug 也会相对较少。这意味着,企业能够根据需求,更加快速地开发并部署代码。如果能将 CD 与容器化技术(如 Docker、k8s)配合使用,在云平台上,甚至可以实现不停机部署,这样开发团队就可以在任何时间进行代码部署。
为什么非常重要?
正如 《Accelerate》一书中所说,软件团队的性能和效率可以通过四个指标来检查。而良好的 CI / CD 的实践可以大大改善四个指标的得分。
交付时间:
CI / CD 可以让开发人员编写的代码直接部署到生产环境中。如果一个团队有良好的 CI / CD 的流程时,可能只需要几个小时甚至是几分钟时间就能完成新需求上线。
部署频率:
如果能够快速部署,小范围部署,那么团队可以频繁地进行部署,特别是那些“无关紧要”的部署。还记得我前面说到的 A 公司吗?想像一下,如果只需要点一个按钮就能进行部署,那他们的团队是不是都很愿意将代码部署上去?Amazon 曾公布数据表示,在他们全球所有的团队中,平均每 11s 就会部署一次。
平均故障恢复耗时:
举个例子,如团队中的某一个部署导致整个系统崩溃,有可能让整个系统停机好几个小时。那如果这个团队有良好的 CI / CD 的实践,那他们可以很准确地知道是由于哪个更改造成,知道是由哪个产品线更新引起的。或许 15 分钟后,就能够开发出修复程序并将其重新部署到生产环境中。
变更失败率:
如果使用了 CI ,那么所有的修改都会在你的 CI 服务器进行集成并运行所有的单元测试,这些修改也会在与用户环境非常接近的环境中进行运行,当这些变更呈现在用户面前时,都已经是经过了大量的测试验证过的版本,几乎不会出现任何隐藏的 Bug。
注意事项
当团队试图尝试使用 CI / CD 时,开发者在开发中,仍需要记住以下几个事情:
阻塞整个 CI / CD 流程的 Bug 需要第一优先级处理;
开发者应该尽可能避免大变更提交,应该尽可能拆分成多个提交;
开发者提交代码之前应该先跑一下测试代码,保证当前修改不会中断整个编译流程;
下班之前,不允许存在无法编译的问题。
如果运用得当,CI/CD 将会是一个很好的工具,帮助团队提效。你要相信,肯定没有人愿意花几个小时时间,去“盯”部署脚本执行的结果,还要手动测试来确认系统是否能正常运行。他们更希望,每天都只需要简单地将代码推送到代码库,剩下的事情就系统自动去做,当出现错误时,也能收到提醒。
开发者应该去解决问题,而不是去做那些电脑就可以完成的事。
你可以选择使用任何一个流行的 CI 系统(Concourse、Jenkins、GoCD、Circle-CI 等等),来帮助你完成很多开发上的事情,让开发者在解决问题的同时,也能保证系统的稳定性。
正说 Nike 所说, CI / CD 是主流软件开发实践中可以采取的最直接一步,你只需要:
JUST DO IT.
系列阅读:《被高估了的测试驱动开发?》
英文:Here’s Why Continuous Integration and Deployment is so Important to the Software Development Process
链接:https://levelup.gitconnected.com/heres-why-continuous-integration-and-deployment-is-so-important-to-the-software-development-c0caeead5881
作者:Tylor Borgeson,全栈软件开发者,对机器学习、AI、基础架构、DevOps 及敏捷等拥有强烈兴趣。
译者:罗昭成,Android 开发者。
【End】
《原力计划【第二季】- 学习力挑战》
正式开始
即日起至 3月21日
千万流量支持原创作者
更有专属【勋章】等你来挑战
推荐阅读
☞华为或将推出“华为搜索”;飞书回应微信指控;Fuchsia OS 进入开发者试用阶段 | 极客头条
☞超30亿人脸数据被泄露,美国AI公司遭科技巨头联合“封杀”
☞狂赚 1200 亿,差点收购苹果,影响千万程序员,那个叫做太阳的公司却陨落了!
☞两成开发者月薪超 1.7 万、算法工程师最紧缺!| 中国开发者年度报告
你点的每一个在看,我认真当成了喜欢