CI/CD 入门:自动化您的第一个管道的初学者指南(使用 Jenkins)
目录
介绍
持续集成/持续部署 (CI/CD) 流水线是现代软件开发的核心。它们使团队能够自动化开发生命周期中的关键步骤,从集成新的代码更改、运行自动化测试,到将应用程序部署到各种环境。随着 DevOps 实践的普及,掌握 CI/CD 流水线对于开发人员、DevOps 工程师和 IT 团队来说至关重要。
在本指南中,我们将重点帮助您入门 Jenkins,它是最受欢迎的 CI/CD 工具之一。Jenkins 的灵活性和丰富的插件生态系统使其成为自动化各种工作流程的强大解决方案,从简单的项目到复杂的微服务架构。本指南将带您了解使用 Jenkins 设置 CI/CD 流水线的整个过程——从安装到创建您的第一个流水线,等等。
什么是 CI/CD?
在深入了解 Jenkins 之前,让我们花点时间了解 CI/CD 的关键组件。
持续集成(CI)
持续集成 (CI) 是一种软件开发实践,开发者会频繁地将代码更改提交到共享代码库,理想情况下每天提交多次。每次提交新代码时,都会触发一个自动化流程,用于构建代码、运行测试并及早发现错误。CI 的核心目的是改善协作、快速检测集成问题,并减少多个开发者在同一个项目上工作时可能出现的集成问题。
- 频繁提交:开发人员更频繁地提交代码更改,以确保存储库始终具有最新的工作代码。
- 自动构建和测试:每次提交后,都会运行自动构建和测试,为开发人员提供有关其更改的快速反馈。
- 早期失败:CI 允许团队尽早发现问题,防止小错误在后续过程中滚雪球般发展成更严重的问题。
持续交付(CD)
持续交付 (CD) 建立在 CI 之上,可自动将代码更改交付到暂存环境以供进一步测试和验证。CD 的目标是确保代码库始终处于可部署状态,并确保新功能、错误修复和更新在准备就绪后即可立即交付给用户。
- 自动化测试和打包:CD 确保代码更改始终经过测试和打包以供发布。
- 生产环境的手动审批:持续交付模式下,生产环境的部署是手动的,但准备工作是自动完成的。最终审批需要人工干预。
- 随时发布:通过在任何给定时间拥有可部署的产品,团队可以更快、更频繁地发布新功能。
持续部署
持续部署在持续交付的基础上更进一步,它将流水线所有阶段的变更自动部署到生产环境。持续部署需要对自动化测试流程有高度的信心,因为在部署到生产环境之前无需人工审批。
CI/CD 的好处
更快上市时间
CI/CD 流水线使团队能够更快地向用户交付软件更新。通过自动化集成、测试和部署流程,团队可以持续发布功能、改进和错误修复,而无需等待主要发布周期。
- 更短的反馈循环:开发人员可以更快地获得有关其代码的反馈。
- 更快的部署:自动化管道显著减少了从代码提交到生产所需的时间。
提高代码质量
使用 CI/CD,代码会在整个开发过程中持续测试。自动化测试可以及早发现问题,从而将更高质量的代码集成到主代码库中。
- 自动化测试:每次提交代码时,单元、集成和端到端测试都可以自动运行,确保代码符合质量标准。
- 频繁测试:定期测试可以减少生产过程中出现的错误数量。
高效协作
CI/CD 流水线能够促进团队成员之间更好的协作。由于代码在共享环境中频繁集成和测试,团队可以更有效地协作,并在流程早期发现并解决任何集成问题。
- 共享代码库:开发人员始终使用最新的代码,这减少了合并冲突或构建中断的可能性。
- 更少的意外:团队更有可能在开发周期的早期发现重大变化。
提高自动化程度和一致性
通过自动执行构建、测试和部署等重复性和手动任务,CI/CD 管道可以减少人为错误、提高一致性并释放开发人员的时间来专注于更复杂的任务。
- 一致性:自动化管道确保每次构建都遵循相同的步骤并产生可靠的结果。
- 减少错误:自动化消除了部署过程中人为错误的可能性。
如何创建您的第一个 CI/CD 管道
现在我们了解了 CI/CD 的好处,让我们深入了解使用 Jenkins 创建您的第一个 CI/CD 管道的实际步骤。
步骤1:设置版本控制(GitHub)
在设置 Jenkins 之前,我们需要一个用于项目代码的版本控制仓库。在本例中,我们将使用 GitHub 作为版本控制平台。
指示:
-
创建 GitHub 存储库:
- 转到GitHub并创建一个新的存储库。
- 命名存储库(例如
my-first-pipeline
),提供描述,并使用README.md
文件初始化存储库。 - 选择存储库是公共的还是私有的。
-
将存储库克隆到本地机器:
- 打开终端并使用以下命令克隆存储库:
git clone https://github.com/your-username/my-first-pipeline.git
-
导航到项目文件夹:
cd my-first-pipeline
-
添加项目文件:
- 将您的应用程序文件(例如,一个简单的 Web 应用程序)添加到存储库。
- 对于 Node.js 应用程序,这可能包括诸如
app.js
、package.json
和tests
目录等文件。
-
提交并推送代码:
- 使用以下命令来暂存、提交和推送您的更改:
git add . git commit -m "Initial commit" git push origin main
您的存储库现在包含应用程序的代码库,并且 Jenkins 可以自动执行构建和部署过程。
第 2 步:选择 CI/CD 工具
市面上有各种 CI/CD 工具,例如 GitHub Actions、CircleCI、GitLab CI 和 Jenkins。本指南将重点介绍 Jenkins,因为它具有灵活性、强大的社区支持以及广泛的插件生态系统。
步骤3:Jenkins管道设置
步骤3.1:安装Jenkins
设置 Jenkins 的第一步是将其安装在本地计算机或服务器上。Jenkins 可以在 Windows、macOS 和 Linux 等各种平台上运行,也可以安装在 Docker 容器中。本文将介绍 Linux 计算机(Ubuntu/Debian)和 Docker 的安装过程。
在 Linux(Ubuntu/Debian)上安装 Jenkins
- 安装 Java:Jenkins 需要 Java 才能运行。安装 OpenJDK:
sudo apt update
sudo apt install openjdk-11-jdk
-
添加 Jenkins 存储库:
- 添加 Jenkins 存储库密钥并将其添加到您的源:
wget -q -O - https://pkg.jenkins.io/debian/jenkins.io.key | sudo apt-key add - sudo sh -c 'echo deb http://pkg.jenkins.io/debian-stable binary/
/etc/apt/sources.list.d/ jenkins.list'```
- 安装 Jenkins:
sudo apt update
sudo apt install jenkins
- 启动并启用 Jenkins:
sudo systemctl start jenkins
sudo systemctl enable jenkins
-
访问 Jenkins:
- 打开浏览器并转到
http://localhost:8080
(localhost
如果您使用远程服务器,请替换为服务器 IP)。 - 系统将提示您解锁 Jenkins。初始密码可以在以下文件中找到:
cat /var/lib/jenkins/secrets/initialAdminPassword
- 打开浏览器并转到
-
安装建议的插件:Jenkins 将引导您安装 Git、Pipeline 和 Docker 等必备插件。点击“安装建议的插件”即可设置最常用的插件。
使用 Docker 安装 Jenkins
或者,您可以使用以下命令使用 Docker 安装 Jenkins:
- 安装 Docker:
sudo apt update
sudo apt install docker.io
- 在 Docker 中运行 Jenkins:
docker run -p 8080:8080 -p 50000:50000 jenkins/jenkins:lts
现在您可以通过导航到 来在浏览器中访问 Jenkins http://localhost:8080
。
步骤3.2:Jenkins配置
安装 Jenkins 后,需要进行一些基本配置以将其与 GitHub 集成并为创建管道做好准备。
-
安装 Git:
- 确保您的 Jenkins 服务器上安装了 Git:
sudo apt install git
-
在 Jenkins 中配置 Git:
- 前往“管理 Jenkins” > “全局工具配置”,并配置 Git 可执行文件路径。这样 Jenkins 就可以使用 Git 克隆仓库了。
-
设置 GitHub 的凭据:
- Jenkins 需要访问你的 GitHub 仓库。要设置凭据,请执行以下操作:
- 转到管理 Jenkins >管理凭据>全局。
- 添加凭证(例如 GitHub 个人访问令牌或 SSH 密钥)以允许 Jenkins 通过 GitHub 进行身份验证。
- 如果您使用 HTTPS 连接 GitHub,请创建一个“用户名+密码”类型的凭证,其中用户名是您的 GitHub 用户名,密码是您的个人访问令牌 (PAT)。如果您使用 SSH,请将您的 SSH 私钥添加为“SSH 用户名+私钥”类型的凭证。
- Jenkins 需要访问你的 GitHub 仓库。要设置凭据,请执行以下操作:
步骤 3.3:创建 Jenkins 管道
Jenkins 提供了强大的流水线功能,允许您使用代码定义构建、测试和部署流程的各个阶段。这可以通过Jenkinsfile
在您的仓库中创建一个文件来完成,Jenkins 将自动检测并使用它来执行您的流水线。
-
创建一个新的管道作业:
- 转到Jenkins 仪表板>新建项目。
- 输入管道的名称(例如),然后从作业类型中
my-first-pipeline
选择管道。 - 单击“确定”即可创建作业。
-
从 SCM 配置管道脚本:
- 向下滚动到作业配置页面中的管道部分。
- 在“定义”下,选择“来自 SCM 的管道脚本”。
- 选择Git作为源代码控制系统。
- 提供您的 GitHub 存储库的 URL 并选择适当的分支(例如
main
)。 - 指定存储库中的路径
Jenkinsfile
(通常只是Jenkinsfile
位于存储库的根目录中)。
此时,Jenkins 已设置为自动检测Jenkinsfile
存储库中的内容并执行其中定义的管道。
步骤 4:编写基本管道配置(Jenkinsfile)
管道的行为定义在 中Jenkinsfile
,它是一个包含管道阶段和步骤的文本文件。让我们Jenkinsfile
为一个基本的 Node.js 项目编写一个简单的示例。
Jenkinsfile
Node.js示例:
pipeline {
agent any
stages {
stage('Checkout') {
steps {
git url: 'https://github.com/your-username/my-first-pipeline.git', branch: 'main'
}
}
stage('Build') {
steps {
// Install dependencies
sh 'npm install'
}
}
stage('Test') {
steps {
// Run tests
sh 'npm test'
}
}
stage('Deploy') {
steps {
// Deployment logic goes here (e.g., pushing to a cloud provider)
echo 'Deploying application...'
}
}
}
post {
always {
echo 'Pipeline completed.'
}
failure {
echo 'Pipeline failed!'
}
}
}
细目Jenkinsfile
:
agent any
:这意味着管道可以在任何可用的 Jenkins 代理(节点或工作器)上运行。- 阶段:管道由代表 CI/CD 流程不同部分的多个阶段组成:
- 检出:此阶段从您的 GitHub 存储库中检出最新代码。
- 构建:此阶段运行命令
npm install
来安装 Node.js 应用程序的依赖项。 - 测试:此阶段运行
npm test
以执行单元测试。 - 部署:这是添加部署步骤的地方,例如将构建的代码推送到 AWS、Azure 或 Heroku 等云平台。
- 后续操作:此
post
部分允许您指定管道完成后要采取的操作,无论成功还是失败。在本例中,我们会根据管道成功还是失败来打印一条消息。
要实现此流水线,只需在仓库中创建一个名为 的新文件Jenkinsfile
,并将上述流水线脚本添加到其中。提交并推送到仓库后,Jenkins 将检测到Jenkinsfile
并执行该流水线。
步骤 5:部署应用程序
一旦你的管道成功运行且测试通过,下一步就是部署应用程序。Jenkins 可以与各种云平台(例如 Heroku、AWS 或 Azure)集成,以实现自动化部署。
示例:部署到 Heroku
Heroku 是一个流行的云平台,可以轻松集成到 Jenkins 流水线中。要将应用程序部署到 Heroku,请执行以下操作:
- 在 Jenkins 代理上安装 Heroku CLI :
sudo snap install --classic heroku
- 将 Heroku 部署步骤添加到
Jenkinsfile
:修改Deploy
阶段如下Jenkinsfile
:
stage('Deploy') {
steps {
withCredentials([string(credentialsId: 'heroku-api-key', variable: 'HEROKU_API_KEY')]) {
sh 'heroku git:remote -a your-heroku-app'
sh 'git push heroku main'
}
}
}
- 此示例假设您已将 Heroku API 密钥存储在 Jenkins 凭证中(在 ID 下
heroku-api-key
)。 - 此命令将最新代码推送到 Heroku,这将自动触发部署到 Heroku 云。
通过将部署步骤添加到您的管道,Jenkins 可以完全自动化从代码提交到生产部署的过程。
CI/CD 管道的最佳实践
虽然 Jenkins 灵活且功能强大,但必须遵循最佳实践以确保您的管道高效、可维护且可靠。
自动化一切
力求自动化开发工作流程的每一步,从构建应用程序、运行测试、部署到预发布阶段,再到部署到生产环境。自动化程度越高,所需的人工干预就越少,您的流程就越快、越可靠。
快速失败,经常失败
设置流水线,以便在流程早期检测故障。例如,尽早运行单元测试,以便在问题影响其他阶段之前发现它们。如果流水线即将发生故障,应尽早进行,以便开发人员能够快速修复问题。
版本控制最佳实践
运用版本控制最佳实践对于 CI/CD 的成功至关重要。为每个功能、错误修复或改进创建一个分支,并在通过所有测试和检查后将其合并到主分支。这确保了主分支始终可部署。
保持管道简单
从简单的流水线入手,随着项目发展逐渐增加复杂性。阶段过多或依赖关系复杂的流水线可能会难以维护。将大型流水线拆分为多个较小的作业或微服务,使其更易于管理。
结论
本指南全面介绍了如何使用 Jenkins 设置您的第一个 CI/CD 流水线。从安装 Jenkins、设置版本控制、编写代码Jenkinsfile
到部署应用程序,我们涵盖了您开始自动化所需的基本步骤。Jenkins 的灵活性及其广泛的插件生态系统使其成为构建、测试和部署应用程序的首选解决方案。
随着您对 Jenkins 越来越熟悉,您可以探索更多高级功能,例如并行构建、使用 Jenkins 代理进行分布式构建以及集成其他 DevOps 工具(例如 Docker、Kubernetes 和监控系统)。
按照本指南中的步骤操作,您将顺利实现软件交付流程的自动化,并采用 DevOps 最佳实践,从而实现更快、更高质量的软件发布。祝您自动化之旅顺利!
👤 作者

加入我们的电报社区||在 GitHub 上关注我以获取更多 DevOps 内容!
文章来源:https://dev.to/prodevopsguytech/getting-started-with-cicd-a-beginners-guide-to-automating-your-first-pipeline-483b