《DevOps实战:VMware管理员运维方法、工具及最佳实践》——3.4 管理源代码

简介:

本节书摘来自华章计算机《DevOps实战:VMware管理员运维方法、工具及最佳实践》一书中的第3章,第3.4节,作者:小特雷弗 A. 罗伯茨(Trevor A. Roberts Jr.)乔希·阿特韦尔(Josh Atwell)埃格勒·西格勒(Egle Sigler)著,更多章节内容可以访问云栖社区“华章计算机”公众号查看

3.4 管理源代码

源代码管理(SCM,Source Code Management)是DevOps环境中必不可少的元素。想象一下:如果你要把基础设施转换为代码,重要的是有一种回顾任何更改、在新更改引入问题(例如,在最好的情况下是定期出现不稳定的情况,在最糟糕的情况下引起停机)时回到文件不同版本的手段。有些人可能认为“容易”的方法是建立文件的多个拷贝,每个都使用唯一的名称(Vagrantf?ile1、Vagrantf?ile2、Vagrantf?ile01012015等),但是接着当你想要使用这些文件并且试图记住所有文件的不同之处时,就会陷入文件重命名的麻烦之中。
开发组织中的不同团队很有可能已经使用某种SCM系统管理他们的工作(例如,软件开发人员保存其源代码,QA团队管理测试脚本)。在你开始使用SCM技术时,和其他小组讨论最佳实践是值得的。
SCM解决方案包括SVN、Mercurial等。Git是DevOps社区中较为流行的SCM系统之一,所以,在本书中我们使用Git。
使用Git
Git是一个分布式版本控制系统,这意味着建立中央存储库的一个本地拷贝,而不只是访问单独的文件。本地提交可以同步到中央服务器,保持环境中的一致性,用户总是可以从中央存储库获取最新的源代码版本。这种架构与传统的源代码管理系统不同,原来的系统中只有中央服务器有完整的存储库拷贝。
在实验本书中的例子时,建议使用免费的在线Git存储库,如BitBucket、GitHub和Gitorious,作为存储代码的中心位置。每个站点都有自己的独特功能。例如,BitBucket允许无限制的免费私有存储库。GitHub是本书作者用于自有代码的在线存储库系统。但是,完全可以使用任何符合你的需求的系统,因为获取代码(克隆/拉取)和存储代码(推送)的方法在任何Git系统上都通用。
对于生产环境中的项目,考虑使用公共存储库站点之前请咨询法律部门。虽然许多站点都提供私有存储库功能,但是公司的领导可能更愿意使用内部中央Git服务器。
创建第一个Git存储库
首先,用你喜欢的包管理器(例如,Mac OS X上的homebrew或macports,Ubuntu/Debian上的apt-get,Red Hat/CentOS/Fedora上的yum)安装Git。对于Windows用户,GitHub和BitBucket等流行在线存储库提供软件客户端,简化了与在线存储库系统的交互。另外,http://git-scm.com网站维护用于Windows的一个Git二进制独立安装版本。
如果你使用Linux或者Mac OS X,可以打开一个终端窗口试验下面的例子。Windows用户必须使用随Git客户端安装的特殊shell。示例的语法基于Liunx/Mac,但是在Windows平台上的命令应该等价。
在开始编写代码之前,必须设置两个全局变量,让Git知道我们是谁。这不像存储库的本地拷贝那么重要,但是在向远程服务器推送代码时非常重要。这两个全局变量是你的电子邮件地址和用户名:

screenshot

事实上,如果尝试使用Git,在第一次提交时没有设置这些变量,Git将提示你设置它们之后才能继续。
如果你试验过前面的Vagrant示例,就已经有了一个用于处理内容的目录。否则,创建一个新目录并在其中创建一个文本文件。从现在起,要在命令行提示符上确认处于该目录。
首先,初始化该目录以建立一个Git存储库:

screenshot

如果用显示隐藏文件的选项列出目录(Linux/Mac上的ls-a,或者Windows上的dir/A:H),就会看到一个隐藏目录.git。这个目录包含存储库的文件和特定设置。这些本地设置和我们前面设置的全局设置组合,使用如下命令可以确认:

screenshot

如果想要查看目录中文件的状态(文件是否已经加入存储库?最后一个命令之后有无更改?等等),可以输入git status,会看到类似程序清单3-5中展示的输出。

screenshot

最后一行最重要,它告诉我们需要跟踪存储库的文件以进行管理。注意SCM工具不会自动跟踪放入目录中的文件是很重要的。这一特性可以避免我们跟踪存储库中的垃圾文件,浪费空间。
我们告诉Git跟踪Vagrantf?ile:

screenshot


但是.vagrant/目录没有必要跟踪,因为它只包含Vagrant用于设置VM的临时文件。可以创建一个.gitignore文件,明确地告诉Git忽略这个目录。使用你所喜欢的文本编辑器,创建有一个条目的.gitigonore文件:

screenshot

也可以使用简单的echo命令实现相同的功能。(Windows用户需要使用包含在Git安装中特殊的Git Shell二进制文件才能正常工作。)

screenshot

如果再次运行git status命令,将会看到Git显示关于.gitignore文件的信息。发生了什么情况?记住,必须告诉Git如何处理存储库所能看到的任何文件或者目录,包括.gitignore文件。有两种方法可以处理.gitignore文件:将.gitignore文件本身加入需要忽略的文件及目录列表。
告诉Git跟踪.gitignore文件。
我将使用第二种选项,以便让使用存储库的其他人都能忽略相应的文件:

screenshot

现在,如果再次检查存储库状态,会看到类似程序清单3-6中展示的输出。

screenshot

目录中的所有文件都已经准备好提交或者添加到非必要文件及目录的.gitignore列表。剩下的工作就是提交存储库更改:

screenshot

这将自动打开一个文件编辑器,可以输入关于提交文件的细节。(默认使用vi。)参见程序清单3-7。

screenshot

必须输入一条消息;否则,提交将被撤销。如果不熟悉vi,按下I,输入一些文本,按下Esc键,然后输入:wq并按Enter键。如果不想使用文本编辑器,可以使用git commit命令的简短形式,加上-m选项,在同一行输入提交消息:

screenshot

如果提交成功,应该看到如下输出:

screenshot

使用中央Git服务器(远程服务器)
如果在GitHub、BitBucker或者任何公共Git存储库站点上开立了账户,就必须向站点提供计算机的SSH公钥,以便验证你的身份。每个站点完成这一操作的方法不同,查询文档找到对应的步骤。对于Windows用户,通常可以安装站点的客户端软件自动处理。Mac和Linux用户必须使用ssh -keygen命令生成SSH公钥。
在远程服务器上正确配置SSH公钥之后,就可以在远程站点创建存储文件的存储库:这一过程称作推送(pushing)。在网站上创建远程存储库时,应该跳过README文件的自动生成。在存储库创建之后,站点将提供一个链接,可以使用它告诉本地存储库远程服务器的位置,该链接的标签往往标记为origin。
在我的设置中,为存储库取了和本地存储库相同的名称。这是一个可选项,名称可以不同。可以使用git remote命令和GitHub提供的链接更新本地存储库设置:

screenshot


使用git conf?ig -l命令,可以看到关于远程服务器位置的新数据:

screenshot


现在,可以从本地存储库向远程存储库推送文件:

screenshot


会看到类似程序清单3-8展示的输出。

screenshot

图3-1展示了向远程服务器推送第一次提交的文件后GitHub上的存储库。

screenshot


如果有了想要使用的远程存储库(正如我们为本书提供的样本),可以使用基于CLI或者GUI的方法将存储库克隆到本地机器。远程存储库系统应该有类似于图3-1左下角的选项。
根据使用的站点,基于GUI的方法有所不同。然而,在GitHub上,如果使用Mac或者Windows客户端,可以使用Clone in Desktop按钮,或者使用Download Zip按钮——这是一个包含存储库所有源代码的简单zip文件。如果使用Windows或Mac平台,建议使用Clone in Desktop选项,因为它将自动创建指向远程存储库的Git链接。
基于CLI的方法包括取得SSH或者HTTP克隆URL和使用git clone命令,如:

screenshot


执行上述命令之后,Git将以存储库名称(在本例中是git-test)创建一个目录,并将存储库的内容拷贝到这个目录中。你可以开始使用和更新代码,Git远程链接将自动创建,正如前面提到的Clone in Desktop按钮那样。如果你有更改远程存储库的权限,可以执行Git推送,将任何本地更改转发到远程存储库。请求更改其他人的存储库不在本书讨论的范围内,但是,如果对此感兴趣,可以研究存储库的分支和拉取请求。这些功能的实现在不同的公共存储库站点上各不相同,所以,必须查看所使用站点的对应文档。如果在设置远程存储库时有问题,替代的工作流如下。
1.?开始工作之前,在所选择的远程Git站点(例如,GitHub)上创建一个新的空存储库。
2.?用前面讨论的GUI或者CLI方法将空白的存储库克隆到本地机器。
3.?开始在克隆的目录中工作,并执行提交。之后,可以使用前面介绍的git push命令将源代码转发到远程存储库。

相关文章
|
4月前
|
人工智能 运维 监控
运维也能“先演练后实战”?聊聊数字孪生的那些神操作
运维也能“先演练后实战”?聊聊数字孪生的那些神操作
142 0
|
5月前
|
运维 监控 Kubernetes
“你那边修好了吗?”——DevOps时代,运维团队到底该怎么配合?
“你那边修好了吗?”——DevOps时代,运维团队到底该怎么配合?
126 2
|
6月前
|
人工智能 运维 安全
基于合合信息开源智能终端工具—Chaterm的实战指南【当运维遇上AI,一场效率革命正在发生】
在云计算和多平台运维日益复杂的今天,传统命令行工具正面临前所未有的挑战。工程师不仅要记忆成百上千条操作命令,还需在不同平台之间切换终端、脚本、权限和语法,操作效率与安全性常常难以兼顾。尤其在多云环境、远程办公、跨部门协作频繁的背景下,这些“低效、碎片化、易出错”的传统运维方式,已经严重阻碍了 IT 团队的创新能力和响应速度。 而就在这时,一款由合合信息推出的新型智能终端工具——Chaterm,正在悄然颠覆这一现状。它不仅是一款跨平台终端工具,更是业内率先引入 AI Agent 能力 的“会思考”的云资源管理助手。
|
5月前
|
缓存 运维 安全
7天精通电商API:从接入到运维的完整实战手册
本文全面解析电商API接口技术,从基础概念到高阶应用,涵盖商品、订单、支付与营销等核心模块,并深入探讨性能优化、安全防护与智能化发展方向,助你掌握驱动数字商业的核心技术。
|
2月前
|
数据采集 运维 监控
爬虫与自动化技术深度解析:从数据采集到智能运维的完整实战指南
本文系统解析爬虫与自动化核心技术,涵盖HTTP请求、数据解析、分布式架构及反爬策略,结合Scrapy、Selenium等框架实战,助力构建高效、稳定、合规的数据采集系统。
爬虫与自动化技术深度解析:从数据采集到智能运维的完整实战指南
|
8月前
|
消息中间件 存储 NoSQL
RocketMQ实战—6.生产优化及运维方案
本文围绕RocketMQ集群的使用与优化,详细探讨了六个关键问题。首先,介绍了如何通过ACL配置实现RocketMQ集群的权限控制,防止不同团队间误用Topic。其次,讲解了消息轨迹功能的开启与追踪流程,帮助定位和排查问题。接着,分析了百万消息积压的处理方法,包括直接丢弃、扩容消费者或通过新Topic间接扩容等策略。此外,提出了针对RocketMQ集群崩溃的金融级高可用方案,确保消息不丢失。同时,讨论了为RocketMQ增加限流功能的重要性及实现方式,以提升系统稳定性。最后,分享了从Kafka迁移到RocketMQ的双写双读方案,确保数据一致性与平稳过渡。
|
5月前
|
敏捷开发 运维 数据可视化
提升协作效率的秘密武器:2025年DevOps任务可视化工具全解析
开发、测试、运维团队协作常因流程不透明导致效率低下,DevOps任务可视化工具成为解决这一痛点的关键方案。这类工具通过图形化呈现任务流程、状态追踪和CI/CD监控,实现跨团队协作透明化。核心功能包括看板管理、流水线可视化、自动告警等,能显著降低沟通成本,提升交付效率。市场主流工具如Jenkins、GitLab、板栗看板等各有优势,企业需根据规模、集成需求选择合适方案。随着AI和ChatOps发展,未来可视化工具将更智能化,助力企业构建高效DevOps闭环。
220 1
|
5月前
|
敏捷开发 运维 数据可视化
DevOps看板工具中的协作功能:如何打破开发、测试与运维之间的沟通壁垒
在DevOps实践中,看板工具通过可视化任务管理和自动化流程,提升开发与运维团队的协作效率。它支持敏捷开发、持续交付,助力团队高效应对需求变化,实现跨职能协作与流程优化。
|
4月前
|
机器学习/深度学习 人工智能 运维
DevOps 不香了?可能是你还没用上“智能运维”!
DevOps 不香了?可能是你还没用上“智能运维”!
178 0