DevOps - Git
Git 是一个分布式版本控制系统。它在 DevOps 工作流中发挥着重要作用。我们使用 Git 来管理源代码、帮助开发人员协作以及自动化持续集成/持续部署 (CI/CD) 管道。Git 可以轻松跟踪版本、创建分支和合并代码更改。
这些功能对于快速协作和快速开发周期非常重要。Git 存储库是 DevOps 管道的核心。它们触发自动构建、测试和部署。这确保我们能够快速、一致地交付软件,并具有完全的可追溯性。
为 DevOps 工作流设置 Git
在本节中,让我们了解如何为 DevOps 工作流设置 Git。
安装和配置 Git
要在 DevOps 工作流中开始使用 Git,首先,我们需要在我们的系统上安装它 −
Linux
sudo apt-get install git
macOS
brew install git
Windows
我们可以从 官方网站。
安装 Git 后,我们需要全局设置用户详细信息 −
git config --global user.name "您的姓名" git config --global user.email "you@example.com"
这可确保我们的提交正确链接到我们。要检查设置,我们可以使用 −
git config --list
将 Git 与 CI/CD 工具(Jenkins、GitLab CI 等)集成
Git 可与 Jenkins、GitLab CI 等 CI/CD 工具配合使用。它有助于自动触发构建和部署。
Jenkins
首先,我们需要在 Jenkins 中安装 Git 插件。在 Jenkins 作业设置中,我们添加 Git 存储库 URL 和我们的凭据。我们将构建配置为基于 Git 事件(如推送或拉取请求)启动。请查看以下示例 −
scm:
git:
- url: 'https://github.com/your-repository.git'
branch: 'main'
GitLab CI
我们在存储库中名为 .gitlab-ci.yml 的文件中定义 CI/CD 管道。请查看以下示例−
stages:
- build
- test
- deploy
build:
stage: build
script:
- npm install
test:
stage: test
script:
- npm test
deploy:
stage: deploy
script:
- ./deploy.sh
这可确保每次推送到 Git 存储库都会触发正确的 CI/CD 管道。
DevOps 中的分支策略
在 DevOps 中,分支策略可帮助我们管理如何在 Git 存储库中对代码进行更改。良好的分支策略对于更好的团队合作、更快的开发和顺畅的 CI/CD 管道非常重要。我们使用的一些常见策略是 Git Flow、GitHub Flow 和基于主干的开发。
Git Flow 与 GitHub Flow 与基于主干的开发
Git Flow − Git Flow 是一种旧方法。在此策略中,主分支具有用于生产的稳定代码,而开发分支具有最新的开发更改。新功能进入单独的功能分支。我们从发布分支创建发布,任何紧急修复都在修补程序分支中完成。此方法适用于需要计划发布的大型项目。
git flow init
GitHub Flow − GitHub Flow 更简单,最适合持续交付。在此方法中,我们从主分支创建功能分支,对其进行处理,一旦准备就绪,就将其合并回主分支。这对于经常部署并使用拉取请求来审查代码的团队非常有用。
git checkout -b feature-branch git push origin feature-branch
基于主干的开发 − 基于主干的开发专注于直接向主分支(或主干)进行小规模、频繁的提交。我们经常创建短暂的功能分支,或者有时直接在主分支上工作并每天多次合并更改。该方法支持持续集成和交付,并且分支最少。
git checkout main git pull origin main git merge feature-branch
创建和管理功能、发布和修补程序分支
在 DevOps 中,我们为功能、发布和修补程序创建和管理不同的分支。这有助于我们在不干扰主代码的情况下处理不同的任务。
功能分支 − 我们使用功能分支来开发新功能或改进,而无需更改主代码。这些分支是从主分支或开发分支创建的。
git checkout -b feature/login-ui
发布分支 − 发布分支帮助我们准备代码以进行部署。在合并回主版本和开发版本之前,我们会使用它们进行最后的更改、错误修复和版本控制。
git checkout -b release/1.0.0
修补程序分支 − 修补程序分支用于在生产环境中进行快速修复。修复问题后,我们将修补程序合并回主分支和开发分支,以使其保持最新状态。
git checkout -b hotfix/fix-crash
团队协作中的合并和变基策略
我们可以使用合并或变基将不同分支的更改整合在一起。
合并 − 合并将一个分支的更改合并到另一个分支,同时保留提交历史记录。当我们想要维护每个更改的完整上下文时,这很有用。
git merge feature-branch
变基 −变基将整个分支移动到从目标分支的最新提交开始,从而提供更清晰的历史记录。当我们想要避免额外的合并提交时,它很有用。
git rebase main
何时使用合并或变基
- 当我们想要保留更改的准确历史记录时,我们更喜欢合并。
- 当我们想要干净的历史记录时,我们会使用变基,尤其是在将功能分支合并到主分支之前。
我们选择的策略取决于我们团队的工作流程、发布时间表以及我们是否想要详细或干净的提交历史记录。
DevOps 自动化中的 Git Hooks
Git Hooks 是在 Git 流程的不同点运行的简单脚本。它们有助于在某些 Git 操作之前或之后自动执行任务。使用钩子可以使我们的工作流程更顺畅,并有助于在 DevOps 管道中实施良好的做法。
- pre-commit − 此钩子在创建提交之前运行。它对于检查代码样式或运行 linters 以保持代码清洁很有用。
- commit-msg − 它在提交消息写入之后但在提交完成之前运行。它确保提交消息遵循特定的样式。
- post-commit − 这个钩子在提交后运行。它通常用于通知团队或运行额外的测试。
- pre-push − 此钩子在将更改推送到远程存储库之前运行。它可用于在推送之前运行单元测试或验证检查。
- post-merge −合并后运行。它可以在合并代码后触发部署脚本或运行额外测试。
我们通常将这些钩子放在 .git/hooks/ 文件夹中。我们还可以根据 DevOps 管道需求自定义它们。
使用 Git Hooks 自动执行 Linting、测试和部署
Git 钩子非常适合在开发过程中自动执行 Linting、测试和部署等任务。例如:
预提交(Linting)
我们可以在每次提交之前自动对代码进行 lint,以确保代码干净。
预提交钩子的示例(使用 eslint 进行 JavaScript) −
# .git/hooks/pre-commit #!/bin/sh npm run lint if [ $? -ne 0 ]; then echo "Linting failed, commit aborted!" exit 1 fi
预推送(测试)
我们可以在推送之前运行单元测试,以确保代码不会破坏任何东西。
预推送钩子示例(使用 jest 进行测试)−
# .git/hooks/pre-push #!/bin/sh npm test if [ $? -ne 0 ]; then echo "Tests failed, push aborted!" exit 1 fi
提交后(部署)
提交后,我们可以触发部署脚本,尤其是对于暂存或生产环境。
提交后钩子的示例(部署到服务器) −
# .git/hooks/post-commit #!/bin/sh ./deploy.sh
这些钩子有助于自动执行检查代码、运行测试和部署等任务,同时与 Git 工作流紧密集成。
结论
在本章中,我们解释了在 DevOps 环境中使用 Git 的关键方面。我们介绍了如何为工作流设置 Git、自动执行常见的 Git 操作、管理分支、使用 Git 钩子以及自动执行部署脚本。
通过在 DevOps 管道中使用 Git 的强大功能,我们可以确保一致的代码质量。它还帮助我们简化测试和部署并改善协作。

