【DevOps工具篇】CICD之Jenkins速通
@TOC
推荐超级课程:
引言
在DevOps和持续集成/持续交付(CI/CD)的世界中,Jenkins是最受欢迎的工具之一。它是一个开源自动化服务器,可以帮助自动化软件开发的各个阶段,从构建和测试到部署。Jenkins支持多种插件,这些插件扩展了其功能,使其成为任何软件开发团队都强大且灵活的工具。本教程将全面介绍如何使用Jenkins,从安装和设置到创建和运行相关代码示例的管道。
目录
- 引言
- 安装Jenkins
- 设置Jenkins
- Jenkins概览
- 配置Jenkins
- Jenkins插件
- 创建您的第一个Jenkins作业
- Jenkins管道
- 将Jenkins与版本控制系统集成
- 使用Jenkins自动化测试
- 使用Jenkins部署应用程序
- Jenkins最佳实践
- 结论
1. 安装Jenkins
先决条件
在安装Jenkins之前,请确保您具备以下先决条件:
- 支持的操作系统的机器(Windows、Linux、macOS)
- 安装了Java开发工具包(JDK)(Jenkins需要Java 8或Java 11)
- 下载Jenkins和必要插件的互联网连接
在Windows上安装Jenkins
- 下载Jenkins:访问Jenkins官方网站 并下载Windows安装程序。
- 运行安装程序:双击下载的
.msi
文件以开始安装过程。按照屏幕上的说明完成安装。 - 启动Jenkins:安装后,Jenkins应该会自动启动。您也可以通过从服务面板运行Jenkins服务来手动启动。
- 访问Jenkins:打开您的网络浏览器,导航到
http://localhost:8080
。您应该会看到Jenkins设置向导。
在Linux上安装Jenkins
- 添加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:更新您的包索引并安装Jenkins:
sudo apt-get update
sudo apt-get install jenkins
- 启动Jenkins:启动Jenkins服务:
sudo systemctl start jenkins
- 启用Jenkins:使Jenkins在启动时启动:
sudo systemctl enable jenkins
- 访问Jenkins:打开您的网络浏览器,导航到
http://your_server_ip_or_domain:8080
。
在macOS上安装Jenkins
- 安装Homebrew:如果您尚未安装Homebrew,请在终端中运行以下命令进行安装:
/bin/bash -c “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
- 安装Jenkins:使用Homebrew安装Jenkins:
brew install jenkins-lts
- 启动Jenkins:运行以下命令启动Jenkins:
brew services start jenkins-lts
- 访问Jenkins:打开您的网络浏览器,导航到
http://localhost:8080
。
2. 设置Jenkins
初始设置
首次访问Jenkins时,系统将提示您使用初始管理员密码解锁Jenkins。按照以下步骤操作:
- 查找初始管理员密码:密码存储在系统上的文件中。此文件的位置显示在设置屏幕上。在Linux上,它通常位于
/var/lib/jenkins/secrets/initialAdminPassword
。 - 输入密码:从文件中复制密码并粘贴到设置向导中以解锁Jenkins。
- 安装建议的插件:Jenkins将提示您安装插件。选择“安装建议的插件”选项。这将安装一组常用的插件。
- 创建第一个管理员用户:安装插件后,系统将提示您创建第一个管理员用户。填写详细信息并点击“保存并完成”。
- Jenkins准备就绪:点击“开始使用Jenkins”以完成设置。
3. Jenkins概览
Jenkins仪表板
Jenkins仪表板是您可以管理作业、配置设置和监控构建的主要界面。它包括以下部分:
- 新建项目:创建新作业或管道。
- 人员:查看和管理用户。
- 构建历史:查看构建历史。
- 管理Jenkins:访问配置设置和管理插件。
- 我的视图:创建自定义视图以组织作业。
Jenkins节点
Jenkins可以在多个机器之间分配构建作业,这些机器称为节点。这有助于管理和平衡负载,特别是在大型项目中。可以从“管理Jenkins”->“管理节点和云”部分添加和配置节点。
Jenkins作业
Jenkins作业是Jenkins中的基本工作单位。每个作业都可以被配置为执行特定的任务,如构建代码、运行测试和部署应用程序。可以通过点击仪表板上的“新建项目”来创建作业。
作业类型 Jenkins提供了几种项目(作业)类型,您可以在设置新作业时创建。这些作业类型允许您根据项目需求实施各种构建和自动化工作流程。
- 自由风格项目: 这是Jenkins中的传统作业类型,您可以使用图形用户界面配置构建步骤、触发器和构建后操作。它适用于简单直接的构建过程。
- 管道: Jenkins管道允许您使用基于Groovy的领域特定语言(DSL)将构建过程定义为代码。使用管道,您可以建模复杂的构建、测试和部署工作流程,以及与版本控制系统的集成。
- 多分支管道: 这种作业类型是管道项目的扩展,专为多分支开发工作流程优化。它可以在您的版本控制仓库中自动检测分支,并为每个分支创建单独的管道,非常适合与多个分支的持续集成。
- 文件夹: 文件夹是在Jenkins内部以层次结构组织作业的方式。您可以创建文件夹来将相关作业分组在一起,从而提供更好的项目组织和管理工作。
- 多配置项目: 多配置项目,也称为矩阵项目,是Jenkins中的一种项目类型,允许您同时执行多种配置的构建或测试。当您需要针对不同平台、操作系统、环境或参数组合测试应用程序或代码时,这非常有用。 在Jenkins中,“通用"选项指的是适用于任何类型的Jenkins作业(项目)的基本设置和配置。
- 丢弃旧构建: 此选项允许您控制要保留的构建数量。您可以指定要保留的最大构建数量、保留构建的最大天数,或两者都指定。超出指定限制的旧构建将自动删除,以节省磁盘空间。
- GitHub项目: 如果您的Jenkins作业与GitHub仓库相关联,您可以在该选项中指定GitHub项目的URL。它帮助Jenkins显示构建状态,并提供回链到GitHub的链接。
- 此项目已参数化: 启用此选项后,允许您向作业添加参数,使您能够根据用户输入或其他动态值自定义构建。
- Jenkins支持几种参数类型,包括:
- 字符串参数: 允许您定义一个简单的文本参数。
- 选择参数: 提供一个带有预定义选择的下拉菜单。
- 布尔参数: 表示一个真/假或是/否的参数。
- 文件参数: 允许用户在触发作业时上传文件。
- 限制构建 限制构建是Jenkins的一个插件,允许您限制特定作业或特定类别内作业的并发构建数量。当您拥有有限资源(如构建代理或硬件容量)并且想要控制特定作业或作业组的并发构建数量时,这个插件特别有用。
- 并发构建: 默认情况下,Jenkins允许同一作业的并发构建。您可以设置最大并发构建数量,以控制允许的并发构建数量。
- 静默期: 静默期是从Jenkins被触发到实际开始构建之间的时间延迟。它有助于避免因快速连续的多次更改而触发的过多构建。
4. 配置Jenkins
全局配置
可以从“管理Jenkins”->“配置系统”访问全局配置设置。在这里,您可以配置各种设置,例如:
- Jenkins URL:设置访问Jenkins的URL。
- JDK:配置Java开发工具包的安装。
- Git:设置Git的安装。
- 邮件通知:配置构建状态的邮件通知。
安全配置
保护Jenkins以保障您的构建环境安全至关重要。Jenkins在“管理Jenkins”->“配置全局安全”下提供了多种安全选项:
- 启用安全:启用Jenkins的安全功能。
- 域:选择一个安全域(例如,Jenkins自己的用户数据库,LDAP)。
- 授权:配置授权策略(例如,基于矩阵的安全策略,基于角色的策略)。
工具配置
Jenkins可以与各种工具和服务集成。工具配置可以在“管理Jenkins”->“全局工具配置”下进行。常见的工具包括:
- JDK:配置JDK安装。
- Maven:配置Maven安装。
- Git:配置Git安装。
- Gradle:配置Gradle安装。
5. Jenkins插件
管理插件
Jenkins有一个庞大的插件生态系统,这些插件扩展了其功能。插件可以在“管理Jenkins”->“管理插件”中进行管理。在这里您可以:
- 安装插件:从可用插件列表中浏览和安装新插件。
- 更新插件:检查更新并更新已安装的插件。
- 卸载插件:卸载不必要的插件。
必要插件
以下是一些您应该考虑安装的必要插件:
- Git插件:将Jenkins与Git仓库集成。
- Maven集成插件:将Jenkins与Maven项目集成。
- Pipeline插件:启用Jenkins管道的创建。
- Blue Ocean插件:为Jenkins提供一个现代的用户界面。
- Slack通知插件:向Slack发送构建通知。
6. 创建您的第一个Jenkins作业
创建一个自由风格作业
- 创建新作业:在Jenkins仪表板上,点击“新建项目”。为您的作业输入一个名称,并选择“自由风格项目”。点击“确定”。
- 配置源代码管理:在“源代码管理”部分,选择“Git”。输入仓库URL和如果需要的话,输入凭据。
仓库URL:https://github.com/your-repo/your-project.git
- 构建触发器:配置作业应该如何被触发。例如,您可以设置作业定期运行,或者在仓库有更改被推送到时触发。
- 构建环境:如果需要,配置构建环境设置。
- 构建步骤:添加构建步骤来定义作业应该执行的任务。例如,要构建一个Maven项目,添加一个“调用顶级Maven目标”的构建步骤。
目标:clean install
- 构建后操作:配置构建后操作,如发送通知或归档工件。
- 保存并构建:点击“保存”以保存作业配置。要运行作业,点击“立即构建”。
7. Jenkins管道
Jenkins管道用于定义在构建、测试和部署应用程序中所涉及的步骤。管道可以使用基于Groovy的领域特定语言(DSL)来定义。
创建一个简单管道
- 创建新的管道作业:在Jenkins仪表板上,点击“新建项目”。为您的作业输入一个名称,并选择“管道”。点击“确定”。
- 管道定义:在“管道”部分,使用管道DSL定义您的管道。
pipeline {
agent any
stages {
stage('Build') {
steps {
echo 'Building…'
}
}
stage('Test') {
steps {
echo 'Testing…'
}
}
stage('Deploy') {
steps {
echo 'Deploying…'
}
}
}
}
- 保存并构建:点击“保存”以保存管道配置。要运行管道,点击“立即构建”。
声明式与脚本式管道
Jenkins支持两种类型的管道:声明式和脚本式。
- 声明式管道:使用更结构化和简单的语法。推荐用于大多数用例。
pipeline {
agent any
stages {
stage('构建') {
steps {
echo '正在构建…'
}
}
}
}
- 脚本式管道:使用基于Groovy的更灵活和强大的语法。
node {
stage('构建') {
echo '正在构建…'
}
}
8. 将Jenkins与版本控制系统集成
与Git集成
- 安装Git插件:确保已安装Git插件。
- 配置源代码管理:在创建或配置作业时,在“源代码管理”部分选择“Git”。输入仓库URL和如果需要的话,输入凭据。
仓库URL:https://github.com/your-repo/your-project.git
- 指定分支:指定要构建的分支。例如,要构建主分支:
要构建的分支:*/master
与GitHub集成
- 安装GitHub插件:确保已安装GitHub插件。
- 配置GitHub仓库:在创建或配置作业时,选择“GitHub项目”并输入仓库URL。
项目URL:https://github.com/your-repo/your-project
- 配置GitHub钩子:设置一个GitHub webhook,以便在仓库有更改被推送时触发Jenkins作业。在您的GitHub仓库设置中,添加一个带有以下URL的webhook:
有效负载URL:http://your-jenkins-server/github-webhook/
9. 使用Jenkins自动化测试
运行单元测试
- 添加构建步骤:在您的作业配置中,添加一个构建步骤来运行单元测试。例如,对于Maven项目,添加一个“调用顶级Maven目标”的构建步骤。
目标:test
- 发布测试结果:添加一个构建后操作来发布测试结果。例如,对于JUnit测试结果,添加一个“发布JUnit测试结果报告”的构建后操作。
测试报告XML:**/target/surefire-reports/*.xml
运行集成测试
- 添加构建步骤:在您的作业配置中,添加一个构建步骤来运行集成测试。例如,对于Maven项目,添加一个“调用顶级Maven目标”的构建步骤。
目标:verify
- 发布测试结果:添加一个构建后操作来发布测试结果。例如,对于JUnit测试结果,添加一个“发布JUnit测试结果报告”的构建后操作。
测试报告XML:**/target/failsafe-reports/*.xml
10. 使用Jenkins部署应用程序
部署到本地服务器
- 添加构建步骤:在您的作业配置中,添加一个构建步骤来将应用程序部署到本地服务器。例如,对于Tomcat服务器,您可以使用“将war/ear部署到容器”的构建步骤。
WAR/EAR文件:**/target/*.war
容器:Tomcat 8.x
- 配置容器:配置容器细节,如URL、凭据和上下文路径。
Tomcat URL:http://localhost:8080
部署到远程服务器
- 添加构建步骤:在您的作业配置中,添加一个构建步骤来将应用程序部署到远程服务器。为此,您可以使用SSH或SCP。例如,使用“通过SSH发送构建工件”的构建步骤。
源文件:**/target/*.war
移除前缀:target
远程目录:/path/to/deploy
- 配置SSH服务器:配置SSH服务器的细节,如主机名、端口和凭据。
主机名:remote.server.com
端口:22
11. Jenkins最佳实践
- 使用声明式管道:由于它们的简单性和结构化,优先选择声明式管道。
- 对管道脚本使用版本控制:将管道脚本存储在版本控制中以跟踪更改并与团队成员协作。
- 使用参数化构建:使用参数化构建将变量传递给您的作业和管道。
- 监控Jenkins性能:定期监控Jenkins性能并优化构建时间。
- 备份Jenkins配置:定期备份Jenkins配置和作业数据以防止数据丢失。
- 使用安全最佳实践:遵循安全最佳实践,如启用安全功能、使用强密码凭据以及限制用户权限。
12. 结论
Jenkins是一个强大且灵活的自动化服务器,可以显著提高您的软件开发工作流程。通过遵循这个全面的教程,您现在应该已经对如何安装、配置和使用Jenkins来自动化软件开发生命周期的各个阶段有了扎实的理解。无论您是在构建简单项目还是复杂应用程序,Jenkins都提供了工具和功能来帮助您轻松实现持续集成和持续交付。祝您构建愉快!