Jenkins 简述及其搭建
什么是持续集成?
- 持续集成(CI)是在软件开发过程中自动化和集成许多团队成员的代码更改和更新的过程。在 CI 中,自动化工具在集成之前确认软件代码是有效且无错误的,这有助于检测错误并加快新版本的发布。
什么是持续交付?
- 持续交付 (CD) 是指每天多次将新软件投入生产,自动将应用程序交付到基础设施环境的能力。CD 是 DevOps 的一部分,有助于缩短软件开发生命周期。
CI/CD 管道的各个阶段
持续集成
- 在第一阶段,开发人员将他们的代码更改与其项目的主代码存储库合并。当开发人员推出代码时,他们会自动触发软件构建。
持续交付
这是将构建交付到运行时环境以进行集成、质量保证或预生产的过程。在此阶段,将对应用程序运行功能和性能测试。
由于许多团队除了生产之外还使用多种软件开发环境,包括开发和测试,因此 CD 可以帮助团队有效地使用自动化来快速将代码更改推送到每个环境。
持续部署
- 在这个阶段,代码被部署到生产环境,包括公有云和混合云。部署会自动启动软件并将其分发给最终用户。自动化工具将经过测试和集成的软件移动到可以部署给最终用户的地方,例如应用程序商店。
CI/CD 的好处
更频繁的代码部署
- 构建 CI/CD 管道的组织可以更快地推出代码。通过标准化构建、开发测试和自动化部署,团队可以将更多时间用于改进应用程序,而将更少的时间用于将代码交付到不同环境的技术流程。
与多种环境无缝协作
- 软件开发团队通常访问多个开发和测试环境来测试和审查应用程序代码。借助 CI/CD,团队仍然可以将代码引入各种环境,而不必担心项目无法按计划进行。
推动回归测试
通过自动化测试,可以识别构建何时通过或失败,工程师还可以通过回归测试移动代码。回归测试有助于确保代码在与其他主干合并时不会破坏软件构建,并确认代码按预期工作。
要求开发人员在所有环境中运行回归测试是一个好主意,这样开发人员只有在所有测试通过后才将测试发送到版本控制。
改善项目协作和质量
由于采用 CI/CD 的开发人员更频繁地提交代码,因此团队可以使用较小的代码包快速识别质量问题,而不是沿着项目时间线稍后创建较大的代码包。此外,当开发人员的提交周期较短时,他们可能不会编辑相同的代码并需要合并。
使用 CI/CD 的团队也倾向于预先加载质量检查,例如从版本控制配置和实践定义开始。除了经常检查代码之外,开发人员还将在不同的时间线上管理功能和修复,然后可以控制哪些代码和功能已准备好投入生产。
降低开发成本
- 借助一套通用、一致的开发和测试工具,软件开发团队可以避免与管理和许可不同应用程序相关的额外成本。当 CI/CD 支持自动化时,团队可以在开发和发布应用程序方面获得规模经济。
生成反馈
当团队获得有关方法的反馈时,功能会更快地推进。反馈使团队能够衡量结果,以便他们有确凿的证据作为新项目的基础。当团队快速获得关于哪些工作流程和方法可以成功构建的答案时,这些知识就会融入到未来的每个构建中。
什么是 Jenkins?
Jenkins 是一个开源持续集成 (CI) 服务器。它管理和控制软件交付过程的多个阶段,包括构建、文档、自动化测试、打包和静态代码分析。Jenkins 是一种非常流行的 DevOps 工具,被数千个开发团队使用。
Jenkins 自动化通常由 GitHub、Bitbucket 和 GitLab 等存储库中的代码更改触发,并与 Maven 和 Gradle 等构建工具集成。
Jenkins 支持使用 Docker 和 Kubernetes 等容器技术来测试和打包软件版本,但它既不是 Kubernetes 原生解决方案,也不是容器原生 CI 解决方案。
Jenkins 中的“持续集成”是什么?
持续集成是一种开发实践,可以将代码集成到共享存储库中。
该实践使用自动验证来及早发现代码问题。
持续集成触发构建以查找和识别代码中存在的错误。
它增加了构建过程的一致性。
这是一种更快地构建事物并防止代码损坏的方法。
Jenkins 架构
Jenkins 如何工作?
Jenkins 在每次提交源代码存储库(通常是开发分支)时都会触发构建。
Jenkins 可以配置为运行初始的单元测试套件,以确保提交不会“破坏构建”。如果测试未通过,可以立即通知开发人员采取纠正措施。这就解决了“谁破坏建造?”的问题。因为很容易确定哪个提交导致构建失败。如果所有单元测试都通过,那么构建管道可以进入下一阶段的集成测试,这通常需要更长的时间来运行。
Jenkins 提供了在多台机器上并行运行构建的能力,以最大限度地减少完成许多这些活动所需的总时间。最后,Jenkins 可以将构建部署到允许在将其发布到生产环境之前进行任何所需的用户验收测试 (UAT) 的环境。这些简化的步骤体现了持续集成 (CI) 环境的精神。
Jenkins的好处
Jenkins 并不是当今唯一的 CI 工具 - GitHub Actions、GitLab、Travis CI 和 CircleCI 是一些使用更广泛的替代品。那么是什么让 Jenkins 脱颖而出,成为大多数开发人员的首选呢?
开源:这显然是 Jenkins 受到广泛欢迎的一个关键原因。它是免费的,因此任何组织都可以开始使用它,而不受预算限制。它也很
容易安装:Jenkins 是作为一个独立的 Java 程序开发的,这意味着它可以在大多数设备和操作系统上运行。
社区支持:由于它是开源的,并且多年来一直是首选 CI 工具,Jenkins 现在拥有强大的社区支持。这增强了 Jenkins 的受欢迎程度,因为很容易找到教程和其他资源来充分利用它。
插件: Jenkins 的主要优点之一是可以扩展其功能的庞大插件目录。据最新统计,Jenkins 拥有超过 1,800 个社区开发的插件,允许任何组织调整或增强基本功能以适应自己的 DevOps 环境。除了插件之外,Jenkins 还易于修改和扩展,以满足大多数组织的需求。
分布式:对于复杂的项目来说,一台服务器就足够了,因此 Jenkins 使用主从架构来管理分布式构建。主服务器是“主”服务器,然后它可以将工作负载分配给其他“从”服务器,从而允许同时运行多个构建和测试环境。例如,这种方法可用于在不同操作系统上构建和测试代码。
Jenkins 搭建过程
本文章使用版本:Jenkins 2.426.1 (November 2023) and newer
需要支持Java版本:Java 11, Java 17 or Java 21
准备环境
[root@Jenkins ~]# cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)
[root@Jenkins ~]# uname -r
3.10.0-1160.el7.x86_64
[root@Jenkins ~]# setenforce 0
[root@Jenkins ~]# sed -i.bak '7s/enforcing/disabled/' /etc/selinux/config
[root@Jenkins ~]# systemctl stop firewalld
[root@Jenkins ~]# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
Active: inactive (dead)
Docs: man:firewalld(1)
[root@Jenkins ~]# firewall-cmd --state
not running
下载安装
# 下载安装java 11
[root@Jenkins ~]# yum install java-11-openjdk java-11-openjdk-devel
#############################################################################################################
# 下载安装指定稳定版Jenkns
[root@Jenkins ~]# wget https://mirrors.jenkins-ci.org/redhat-stable/jenkins-2.346.1-1.1.noarch.rpm
[root@Jenkins ~]# rpm -ivh jenkins-2.346.1-1.1.noarch.rpm
#############################################################################################################
# 下载安装最新稳定版Jenkins (当前2.426.1)
[root@Jenkins ~]# wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
[root@Jenkins ~]# rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io-2023.key
[root@Jenkins ~]# yum install jenkins
[root@Jenkins ~]# yum list | grep jenkins
jenkins.noarch 2.426.1-1.1 @jenkins
[root@Jenkins ~]# rpm -ql jenkins
/usr/bin/jenkins # jenkins安装目录,WAR包会放在这里。
/usr/lib/systemd/system/jenkins.service # Jenkins配置文件、端口、JENKINS_HOME等配置信息
/usr/share/java/jenkins.war # jenkins.war默认位置
/usr/share/jenkins/migrate # 关于迁移
/var/cache/jenkins # 缓存目录
/var/lib/jenkins # 默认的JENKINS_HOME
[root@Jenkins ~]# chown -R root.root /var/cache/jenkins /var/lib/jenkins
修改配置
# 默认配置
[root@Jenkins ~]# egrep -v "^$|^#" /usr/lib/systemd/system/jenkins.service
[Unit]
Description=Jenkins Continuous Integration Server
Requires=network.target
After=network.target
[Service]
Type=notify
NotifyAccess=main
ExecStart=/usr/bin/jenkins
Restart=on-failure
SuccessExitStatus=143
User=jenkins
Group=jenkins
Environment="JENKINS_HOME=/var/lib/jenkins"
WorkingDirectory=/var/lib/jenkins
Environment="JENKINS_WEBROOT=%C/jenkins/war"
Environment="JAVA_OPTS=-Djava.awt.headless=true"
Environment="JENKINS_PORT=8080"
[Install]
WantedBy=multi-user.target
# 修改如下内容
[root@Jenkins ~]# vim /usr/lib/systemd/system/jenkins.service
...
...
# 修改用户及属组
#User=jenkins
#Group=jenkins
User=root
Group=root
...
...
# 修改端口号
#Environment="JENKINS_PORT=8080" 默认端口
Environment="JENKINS_PORT=8989"
...
...
# 开启日志
#Environment="JENKINS_ENABLE_ACCESS_LOG=false" 默认关闭
Environment="JENKINS_ENABLE_ACCESS_LOG=true"
启动 Jenkins
[root@Jenkins ~]# systemctl start jenkins
[root@Jenkins ~]# java --version
openjdk 11.0.21 2023-10-17 LTS
OpenJDK Runtime Environment (Red_Hat-11.0.21.0.9-1.el7_9) (build 11.0.21+9-LTS)
OpenJDK 64-Bit Server VM (Red_Hat-11.0.21.0.9-1.el7_9) (build 11.0.21+9-LTS, mixed mode, sharing)
[root@Jenkins ~]# jenkins --version
2.426.1
[root@Jenkins ~]# netstat -ntpl | grep 8989
tcp6 0 0 :::8989 :::* LISTEN 1687/java
[root@Jenkins ~]#
[root@Jenkins ~]# ps -ef | grep jenkins
jenkins 1687 1 4 16:28 ? 00:00:12 /usr/bin/java -Djava.awt.headless=true -jar /usr/share/java/jenkins.war --webroot=%C/jenkins/war --httpPort=8989 --accessLoggerClassName=winstone.accesslog.SimpleAccessLogger --simpleAccessLogger.format=combined --simpleAccessLogger.file=/var/log/jenkins/access_log
root 1967 1427 0 16:33 pts/1 00:00:00 grep --color=auto jenkins
打开浏览器进入链接 http://IP:PORT
[root@Jenkins ~]# cat /var/lib/jenkins/secrets/initialAdminPassword
1d6f364f60a44f449f9253b5cee0893c
Jenkins 简述及其搭建的更多相关文章
- jenkins+git+maven搭建自动化部署项目环境
简介 折腾了两个晚上,趁着今晚比较有空,把jenkins+git+maven搭建自动化部署项目环境搭建的过程记录一下,这里我把github作为git的远程仓库(https://github.co ...
- Docker+Jenkins+Maven+SVN搭建持续集成环境
Docker+Jenkins+Maven+SVN搭建持续集成环境 环境拓扑图(实验项目使用PHP环境) 发布流程图 环境说明 系统:Centos 7.4 x64 Docker版本:18.09.0 Ma ...
- Jenkins入门-环境搭建(1)
因为Jenkins的环境搭建比较简单,本来不想来介绍,但是发现有些入门小朋友,从各种网站上下载的各种安装包来搭建,最后导致出现了各种千奇百怪的问题,介于这种情况下我决定还是来写一下Jenkins的环境 ...
- 使用Jenkins+Calabash+Cocoapods搭建iOS持续集成环境
使用jenkins+calabash+cocoapods搭建ios持续集成环境 持续集成 持续集成到底是什么呢?依据敏捷大师Martin Fowler的定义: 持续集成是一种软件开发实践. 在持续集成 ...
- linux环境下完成jenkins的环境搭建
环境搭建部署: 请完成jenkins的环境搭建,需安装tomcat,mysql. Jenkins 地址: https://jenkins.io/download/ 步骤分析: 1.全部操作使用普通用 ...
- FileCloud 的原理简述&自己搭建文件云
FileCloud 的原理简述&自己搭建文件云 copyright(c) by zcy 关于如何使用IIS创建asp服务,请读者自行研究 注:不要忘记添加入站规则 代码的存储: 根目录 fil ...
- 「持续集成实践系列」Jenkins 2.x 搭建CI需要掌握的硬核要点
1. 前言 随着互联网软件行业快速发展,为了抢占市场先机,企业不得不持续提高软件的交付效率.特别是现在国内越来越多企业已经在逐步引入DevOps研发模式的变迁,在这些背景催促之下,对于企业研发团队所需 ...
- Jenkins入门-环境搭建(1)-转
因为Jenkins的环境搭建比较简单,本来不想来介绍,但是发现有些入门小朋友,从各种网站上下载的各种安装包来搭建,最后导致出现了各种千奇百怪的问题,介于这种情况下我决定还是来写一下Jenkins的环境 ...
- jenkins+ant+jmeter搭建持续集成的接口测试平台
一.jemter接口脚本的编写步骤如下: 1. 编写接口请求 通过录制或者查看接口文档,编写接口请求,进行调试,确保接口调试通过,对于http的请求来说,就是正确的填写域名,查询字符串,查询参数等信息 ...
- 基于Jenkins的环境搭建
基于 Jenkins 快速搭建持续集成环境 持续集成是一种软件开发实践,对于提高软件开发效率并保障软件开发质量提供了理论基础.Jenkins 是一个开源软件项目,旨在提供一个开放易用的软件平台,使持续 ...
随机推荐
- .NET Emit 入门教程:第二部分:构建动态程序集(追加构建静态程序集教程)
前言: 在本部分中,我们将深入探讨如何使用C# Emit 来创建动态程序集. 动态程序集是在运行时生成的,为我们提供了一种灵活.动态地构建和加载程序集的能力. 1. 程序集的概念 程序集是.NET中的 ...
- 《.NET内存管理宝典 》(Pro .NET Memory Management) 阅读指南 - 第3章
本章勘误: 暂无,等待细心的你告诉我哦. 本章注解: 暂无 本章释疑: 暂无,等待你的提问 致谢: MVP 林德熙 MVP 吕毅 sPhinX 相关链接 试读记录
- vue中elementui组件el-dialog拖拽(已处理边界情况)
全局注册 Vue.directive("elDialogDrag", (el) => { const header = el.querySelector(".el- ...
- DRConv:旷视提出区域感知动态卷积,多任务性能提升 | CVPR 2020
论文提出DRConv,很好地结合了局部共享的思想并且保持平移不变性,包含两个关键结构,从实验结果来看,DRConv符合设计的预期,在多个任务上都有不错的性能提升 来源:晓飞的算法工程笔记 公众号 ...
- Web Audio API 第3章 音量和响度
此章介绍的科普物理声音知识相当有用,编程的反而涉及的少 音量和响度 Loudness 响度 注:根据<韦氏词典>,响度是"一种声音的属性,它决定了所产生的听觉感觉的大小,主要取决 ...
- SQLite数据库(来自菜鸟教程)
SQLite是什么?为什么要用SQLite?SQLite有什么特点? 答:下面请听小猪娓娓道来: ①SQLite是一个轻量级的关系型数据库,运算速度快,占用资源少,很适合在移动设备上使用, 不仅支持标 ...
- Jenkins设置定时触发器执行任务
1. 选中任务,选择配置/构建触发器,选择定时构建 2. 填写定时器参数,格式说明如下,共五个参数,参数之间空格隔开,不需要填的直接*号即可. 此处d定时任务的格式遵循 cron 的语法(可以与 c ...
- OpenHarmony集成OCR三方库实现文字提取
1. 简介 Tesseract(Apache 2.0 License)是一个可以进行图像OCR识别的C++库,可以跨平台运行 .本样例基于Tesseract库进行适配,使其可以运行在OpenAtom ...
- 分布式数据对象:超级终端的"全局变量"
3月底发布的OpenAtom OpenHarmony(以下简称"OpenHarmony")3.1 Release版本中,新增了分布式数据对象特性.什么是分布式数据对象呢?本期就让我 ...
- C++ 多线程编程和同步机制:详解和实例演示
C++中的多线程编程和同步机制使得程序员可以利用计算机的多核心来提高程序的运行效率和性能.本文将介绍多线程编程和同步机制的基本概念和使用方法. 多线程编程基础 在C++中,使用<thread&g ...