【DevOps工具篇】CICD之Jenkins速通

2020-12-19T14:33:22+08:00 | 13分钟阅读 | 更新于 2020-12-19T14:33:22+08:00

Macro Zhao

【DevOps工具篇】CICD之Jenkins速通

@TOC

推荐超级课程:

引言

在DevOps和持续集成/持续交付(CI/CD)的世界中,Jenkins是最受欢迎的工具之一。它是一个开源自动化服务器,可以帮助自动化软件开发的各个阶段,从构建和测试到部署。Jenkins支持多种插件,这些插件扩展了其功能,使其成为任何软件开发团队都强大且灵活的工具。本教程将全面介绍如何使用Jenkins,从安装和设置到创建和运行相关代码示例的管道。

目录

  1. 引言
  2. 安装Jenkins
  3. 设置Jenkins
  4. Jenkins概览
  5. 配置Jenkins
  6. Jenkins插件
  7. 创建您的第一个Jenkins作业
  8. Jenkins管道
  9. 将Jenkins与版本控制系统集成
  10. 使用Jenkins自动化测试
  11. 使用Jenkins部署应用程序
  12. Jenkins最佳实践
  13. 结论

1. 安装Jenkins

先决条件

在安装Jenkins之前,请确保您具备以下先决条件:

  • 支持的操作系统的机器(Windows、Linux、macOS)
  • 安装了Java开发工具包(JDK)(Jenkins需要Java 8或Java 11)
  • 下载Jenkins和必要插件的互联网连接

在Windows上安装Jenkins

  1. 下载Jenkins:访问Jenkins官方网站 并下载Windows安装程序。
  2. 运行安装程序:双击下载的.msi文件以开始安装过程。按照屏幕上的说明完成安装。
  3. 启动Jenkins:安装后,Jenkins应该会自动启动。您也可以通过从服务面板运行Jenkins服务来手动启动。
  4. 访问Jenkins:打开您的网络浏览器,导航到http://localhost:8080。您应该会看到Jenkins设置向导。

在Linux上安装Jenkins

  1. 添加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'
  1. 安装Jenkins:更新您的包索引并安装Jenkins:
sudo apt-get update
sudo apt-get install jenkins
  1. 启动Jenkins:启动Jenkins服务:
sudo systemctl start jenkins
  1. 启用Jenkins:使Jenkins在启动时启动:
sudo systemctl enable jenkins
  1. 访问Jenkins:打开您的网络浏览器,导航到http://your_server_ip_or_domain:8080

在macOS上安装Jenkins

  1. 安装Homebrew:如果您尚未安装Homebrew,请在终端中运行以下命令进行安装:
/bin/bash -c “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
  1. 安装Jenkins:使用Homebrew安装Jenkins:
brew install jenkins-lts
  1. 启动Jenkins:运行以下命令启动Jenkins:
brew services start jenkins-lts
  1. 访问Jenkins:打开您的网络浏览器,导航到http://localhost:8080

2. 设置Jenkins

初始设置

首次访问Jenkins时,系统将提示您使用初始管理员密码解锁Jenkins。按照以下步骤操作:

  1. 查找初始管理员密码:密码存储在系统上的文件中。此文件的位置显示在设置屏幕上。在Linux上,它通常位于/var/lib/jenkins/secrets/initialAdminPassword
  2. 输入密码:从文件中复制密码并粘贴到设置向导中以解锁Jenkins。
  3. 安装建议的插件:Jenkins将提示您安装插件。选择“安装建议的插件”选项。这将安装一组常用的插件。
  4. 创建第一个管理员用户:安装插件后,系统将提示您创建第一个管理员用户。填写详细信息并点击“保存并完成”。
  5. 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作业

创建一个自由风格作业

  1. 创建新作业:在Jenkins仪表板上,点击“新建项目”。为您的作业输入一个名称,并选择“自由风格项目”。点击“确定”。
  2. 配置源代码管理:在“源代码管理”部分,选择“Git”。输入仓库URL和如果需要的话,输入凭据。
仓库URL:https://github.com/your-repo/your-project.git
  1. 构建触发器:配置作业应该如何被触发。例如,您可以设置作业定期运行,或者在仓库有更改被推送到时触发。
  2. 构建环境:如果需要,配置构建环境设置。
  3. 构建步骤:添加构建步骤来定义作业应该执行的任务。例如,要构建一个Maven项目,添加一个“调用顶级Maven目标”的构建步骤。
目标:clean install
  1. 构建后操作:配置构建后操作,如发送通知或归档工件。
  2. 保存并构建:点击“保存”以保存作业配置。要运行作业,点击“立即构建”。

7. Jenkins管道

Jenkins管道用于定义在构建、测试和部署应用程序中所涉及的步骤。管道可以使用基于Groovy的领域特定语言(DSL)来定义。

创建一个简单管道

  1. 创建新的管道作业:在Jenkins仪表板上,点击“新建项目”。为您的作业输入一个名称,并选择“管道”。点击“确定”。
  2. 管道定义:在“管道”部分,使用管道DSL定义您的管道。
pipeline {
agent any
stages {
stage('Build') {
steps {
echo 'Building…'
}
}
stage('Test') {
steps {
echo 'Testing…'
}
}
stage('Deploy') {
steps {
echo 'Deploying…'
}
}
}
}
  1. 保存并构建:点击“保存”以保存管道配置。要运行管道,点击“立即构建”。

声明式与脚本式管道

Jenkins支持两种类型的管道:声明式和脚本式。

  • 声明式管道:使用更结构化和简单的语法。推荐用于大多数用例。
pipeline {
    agent any
    stages {
        stage('构建') {
            steps {
                echo '正在构建…'
            }
        }
    }
}
  • 脚本式管道:使用基于Groovy的更灵活和强大的语法。
node {
    stage('构建') {
        echo '正在构建…'
    }
}

8. 将Jenkins与版本控制系统集成

与Git集成

  1. 安装Git插件:确保已安装Git插件。
  2. 配置源代码管理:在创建或配置作业时,在“源代码管理”部分选择“Git”。输入仓库URL和如果需要的话,输入凭据。
仓库URL:https://github.com/your-repo/your-project.git
  1. 指定分支:指定要构建的分支。例如,要构建主分支:
要构建的分支:*/master

与GitHub集成

  1. 安装GitHub插件:确保已安装GitHub插件。
  2. 配置GitHub仓库:在创建或配置作业时,选择“GitHub项目”并输入仓库URL。
项目URL:https://github.com/your-repo/your-project
  1. 配置GitHub钩子:设置一个GitHub webhook,以便在仓库有更改被推送时触发Jenkins作业。在您的GitHub仓库设置中,添加一个带有以下URL的webhook:
有效负载URL:http://your-jenkins-server/github-webhook/

9. 使用Jenkins自动化测试

运行单元测试

  1. 添加构建步骤:在您的作业配置中,添加一个构建步骤来运行单元测试。例如,对于Maven项目,添加一个“调用顶级Maven目标”的构建步骤。
目标:test
  1. 发布测试结果:添加一个构建后操作来发布测试结果。例如,对于JUnit测试结果,添加一个“发布JUnit测试结果报告”的构建后操作。
测试报告XML:**/target/surefire-reports/*.xml

运行集成测试

  1. 添加构建步骤:在您的作业配置中,添加一个构建步骤来运行集成测试。例如,对于Maven项目,添加一个“调用顶级Maven目标”的构建步骤。
目标:verify
  1. 发布测试结果:添加一个构建后操作来发布测试结果。例如,对于JUnit测试结果,添加一个“发布JUnit测试结果报告”的构建后操作。
测试报告XML:**/target/failsafe-reports/*.xml

10. 使用Jenkins部署应用程序

部署到本地服务器

  1. 添加构建步骤:在您的作业配置中,添加一个构建步骤来将应用程序部署到本地服务器。例如,对于Tomcat服务器,您可以使用“将war/ear部署到容器”的构建步骤。
WAR/EAR文件:**/target/*.war
容器:Tomcat 8.x
  1. 配置容器:配置容器细节,如URL、凭据和上下文路径。
Tomcat URL:http://localhost:8080

部署到远程服务器

  1. 添加构建步骤:在您的作业配置中,添加一个构建步骤来将应用程序部署到远程服务器。为此,您可以使用SSH或SCP。例如,使用“通过SSH发送构建工件”的构建步骤。
源文件:**/target/*.war
移除前缀:target
远程目录:/path/to/deploy
  1. 配置SSH服务器:配置SSH服务器的细节,如主机名、端口和凭据。
主机名:remote.server.com
端口:22

11. Jenkins最佳实践

  1. 使用声明式管道:由于它们的简单性和结构化,优先选择声明式管道。
  2. 对管道脚本使用版本控制:将管道脚本存储在版本控制中以跟踪更改并与团队成员协作。
  3. 使用参数化构建:使用参数化构建将变量传递给您的作业和管道。
  4. 监控Jenkins性能:定期监控Jenkins性能并优化构建时间。
  5. 备份Jenkins配置:定期备份Jenkins配置和作业数据以防止数据丢失。
  6. 使用安全最佳实践:遵循安全最佳实践,如启用安全功能、使用强密码凭据以及限制用户权限。

12. 结论

Jenkins是一个强大且灵活的自动化服务器,可以显著提高您的软件开发工作流程。通过遵循这个全面的教程,您现在应该已经对如何安装、配置和使用Jenkins来自动化软件开发生命周期的各个阶段有了扎实的理解。无论您是在构建简单项目还是复杂应用程序,Jenkins都提供了工具和功能来帮助您轻松实现持续集成和持续交付。祝您构建愉快!

© 2011 - 2025 Macro Zhao的分享站

关于我

如遇到加载502错误,请尝试刷新😄

Hi,欢迎访问 Macro Zhao 的博客。Macro Zhao(或 Macro)是我在互联网上经常使用的名字。

我是一个热衷于技术探索和分享的IT工程师,在这里我会记录分享一些关于技术、工作和生活上的事情。

我的CSDN博客:
https://macro-zhao.blog.csdn.net/

欢迎你通过评论或者邮件与我交流。
Mail Me

推荐好玩(You'll Like)
  • AI 动·画
    • 这是一款有趣·免费的能让您画的画中的角色动起来的AI工具。
    • 支持几十种动作生成。
我的项目(My Projects)
  • 爱学习网

  • 小乙日语App

    • 这是一个帮助日语学习者学习日语的App。
      (当然初衷也是为了自用😄)
    • 界面干净,简洁,漂亮!
    • 其中包含 N1 + N2 的全部单词和语法。
    • 不需注册,更不需要订阅!完全免费!
  • 小乙日文阅读器

    • 词汇不够?照样能读日语名著!
    • 越读积累越多,积跬步致千里!
    • 哪里不会点哪里!妈妈再也不担心我读不了原版读物了!
赞助我(Sponsor Me)

如果你喜欢我的作品或者发现它们对你有所帮助,可以考虑给我买一杯咖啡 ☕️。这将激励我在未来创作和分享更多的项目和技术。🦾

👉 请我喝一杯咖啡

If you like my works or find them helpful, please consider buying me a cup of coffee ☕️. It inspires me to create and share more projects in the future. 🦾

👉 Buy me a coffee