Jenkins持续集成部署——jenkins安装
前言
Jenkins 是一个开源的自动化服务器,主要用于持续集成(CI)和持续交付(CD)。它为软件开发团队提供了一个易于使用的平台来自动化构建、测试和部署应用程序的过程。
Jenkins 主要功能
1. 持续集成 (CI)
- 自动构建:每次代码提交后,Jenkins 可以自动触发构建过程,确保最新的代码可以成功编译。
- 测试执行:在构建完成后,Jenkins 可以运行单元测试、集成测试等,确保代码质量。
- 静态代码分析:通过插件,Jenkins 可以执行静态代码分析工具(如 SonarQube),检查代码中的潜在问题。
2. 持续交付 (CD)
- 自动化部署:Jenkins 支持从构建到部署的整个流水线自动化,包括将应用程序部署到不同环境(如开发、测试、生产)。
- 版本控制集成:与各种版本控制系统(如 Git、SVN)无缝集成,能够自动检测代码变更并触发相应的构建任务。
3. Pipeline as Code
- 定义 CI/CD 流水线:使用 Jenkins Pipeline 功能,可以将 CI/CD 流程定义为代码的一部分,并将其存储在项目的源代码仓库中。这不仅便于版本控制,还促进了团队协作和审查。
- Declarative 和 Scripted Pipelines:提供两种编写 Pipeline 的方式,满足不同的需求。Declarative Pipeline 更加结构化,适合新手;Scripted Pipeline 提供更大的灵活性,适合复杂场景。
4. 分布式构建
- 主从架构:Jenkins 支持主从架构,允许将构建任务分发到多个节点上执行,提高构建效率,特别适用于大型项目或需要跨平台构建的情况。
- 多平台支持:可以在不同的操作系统(如 Linux、Windows、macOS)上设置 Jenkins Agent,以适应多样化的构建需求。
5. 插件生态系统
- 丰富的插件库:拥有超过 1,500 个插件,涵盖从构建工具、测试框架到通知服务等各种工具和技术,极大地扩展了 Jenkins 的功能。
- 自定义扩展:用户还可以根据自己的需求开发和安装自定义插件,进一步增强 Jenkins 的能力。
6. 安全性和权限管理
- 用户认证:支持多种认证机制(如 LDAP、Active Directory),确保只有授权人员才能访问和操作 Jenkins。
- 权限控制:提供了细粒度的权限管理,可以根据角色分配不同的权限,保护敏感信息和操作。
7. 监控和报告
- 构建状态可视化:通过 Web 界面直观地展示每个 Job 的构建状态,帮助团队快速了解项目健康状况。
- 历史记录和趋势分析:保存所有构建的历史记录,提供趋势分析图表,有助于发现和解决长期存在的问题。
8. 通知和集成
- 通知机制:可以通过电子邮件、Slack、HipChat 等多种渠道发送构建结果通知,确保团队成员及时获得反馈。
- 第三方服务集成:与 Docker、Kubernetes、AWS 等云服务和其他 DevOps 工具链集成,提升整体工作效率。
9. 易用性
- Web 界面:提供了友好的 Web 用户界面,简化了 Jenkins 的配置和管理。
- 文档和支持:拥有详尽的官方文档和活跃的社区支持,方便用户学习和解决问题
Jenkins 工作流
代码提交:
1. 开发人员将代码提交到版本控制系统(如 Git)。
2. 提交代码后,版本控制系统会记录此次提交。
触发构建:
1. Jenkins 监控版本控制系统的变化,当检测到代码提交时,会自动触发构建。
2. Jenkins 会根据配置的触发规则(如代码提交、定时任务等)启动构建任务。
构建和测试:
1. Jenkins 根据配置的构建脚本,编译代码并运行自动化测试。
2. 测试结果会被记录并分析,以确保代码的质量。
3. 如果测试失败,构建过程会中断,并报告失败原因。
生成构建结果:
1. Jenkins 将构建结果(成功或失败)报告给开发人员,并生成构建工件(如可执行文件、Docker 镜像等)。
2. 构建工件会被存储在 Jenkins 的工作空间中,以便后续使用。
3. Jenkins 还可以生成详细的构建日志和报告,方便开发人员查看和调试。
部署:
1. Jenkins 可以自动将构建好的工件部署到测试环境或生产环境。
2. 部署过程可以配置为手动或自动,具体取决于团队的需求和流程。
3. Jenkins 支持多种部署方式,如直接部署到服务器、通过 Docker 部署等。
Jenkins 安装
1. 基础环境准备
1.1节点规划
IP | 主机名 | 节点 |
192.168.200.70 | jenkins | Jenkins |
上传jdk-17.0.10_linux-x64_bin.tar.gz jenkins-2.489-1.1.noarch.rpm软件包到虚拟机/root目录下。
2. 安装 Jenkins
2.1 基础环境配置
(1)修改主机名
[root@localhost ~]# hostnamectl set-hostname jenkins
[root@localhost ~]#bash
(2)关闭防火墙
[root@jenkins ~]# systemctl stop firewalld
[root@jenkins ~]# setenforce 0
2.2 安装 jdk
Jenkins是基于java8编写的软件,所以在安装之前需要在主机上安装Java8的运行环境,及安装jdk 17.0.10。
[root@jenkins ~]# mkdir /usr/lib/jdk17/
[root@jenkins ~]# tar -zxvf jdk-17.0.10_linux-x64_bin.tar.gz -C /usr/lib/jdk17/
[root@jenkins ~]# ls /usr/lib/jdk17/
jdk-17.0.10
配置环境变量
[root@jenkins ~]# vi /etc/profile
export JAVA_HOME=/usr/lib/jdk17/jdk-17.0.10
export CLASSPATH=.:$JAVA_HOME/lib
export PATH=.:$JAVA_HOME/bin:$PATH
[root@jenkins ~]# source /etc/profile
[root@jenkins ~]# java -version
java version "17.0.10" 2024-01-16 LTS
Java(TM) SE Runtime Environment (build 17.0.10+11-LTS-240)
Java HotSpot(TM) 64-Bit Server VM (build 17.0.10+11-LTS-240, mixed mode, sharing)
2.3 安装 Jenkins
Jenkins是一个独立的开源软件项目,是基于Java开发的一种可扩展的持续集成(CI)工具,用于监控持续重复的工作,自动的构建和测试软件项目,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。
解压jenkins-2.489-1.1.noarch.rpm包。
[root@jenkins ~]# rpm -ivh jenkins-2.489-1.1.noarch.rpm
配置 Jenkins
[root@jenkins ~]# vi /usr/lib/systemd/system/jenkins.service
修改下图标注内容
启动 Jenkins
[root@jenkins ~]# yum install -y fontconfig
[root@jenkins ~]# systemctl daemon-reload
[root@jenkins ~]# systemctl start jenkins
[root@jenkins ~]# systemctl status jenkins
[root@jenkins ~]# netstat -tuln
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp6 0 0 :::8088 :::* LISTEN
tcp6 0 0 ::1:25 :::* LISTEN
tcp6 0 0 :::22 :::* LISTEN
udp 0 0 127.0.0.1:323 0.0.0.0:*
udp6 0 0 ::1:323 :::*
登录网站 http://ip:8088(默认端口为8080)
查看安装日志,查询密码,并输入管理员密码。
[root@jenkins ~]# cat /var/lib/jenkins/secrets/initialAdminPassword
c4245c993980486495d104caa4366d60
3. 自定义 Jenkins
(1)安装插件
登陆后,会出现如下页面,这里涉及到jenkins的插件安装,建议选择“安装推荐的插件”,点击“安装推荐的插件”后,进入“新手入门”页面,等待全部插件安装成功即可。
(2)创建第一个管理员用户
插件安装完成后,会出现“创建第一个管理员用户”页面,填写正确信息后,点击“保存并完成”,这样第一个管理员用户就创建完毕了,如下图:
至此,Jenkins安装结束。你可以开始使用自己的Jenkins了。