什么是持续集成?

  • 持续集成(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

下载安装

Jenkins 官方

清华大学开源软件镜像站

# 下载安装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 简述及其搭建的更多相关文章

  1. jenkins+git+maven搭建自动化部署项目环境

    简介    折腾了两个晚上,趁着今晚比较有空,把jenkins+git+maven搭建自动化部署项目环境搭建的过程记录一下,这里我把github作为git的远程仓库(https://github.co ...

  2. Docker+Jenkins+Maven+SVN搭建持续集成环境

    Docker+Jenkins+Maven+SVN搭建持续集成环境 环境拓扑图(实验项目使用PHP环境) 发布流程图 环境说明 系统:Centos 7.4 x64 Docker版本:18.09.0 Ma ...

  3. Jenkins入门-环境搭建(1)

    因为Jenkins的环境搭建比较简单,本来不想来介绍,但是发现有些入门小朋友,从各种网站上下载的各种安装包来搭建,最后导致出现了各种千奇百怪的问题,介于这种情况下我决定还是来写一下Jenkins的环境 ...

  4. 使用Jenkins+Calabash+Cocoapods搭建iOS持续集成环境

    使用jenkins+calabash+cocoapods搭建ios持续集成环境 持续集成 持续集成到底是什么呢?依据敏捷大师Martin Fowler的定义: 持续集成是一种软件开发实践. 在持续集成 ...

  5. linux环境下完成jenkins的环境搭建

    环境搭建部署: 请完成jenkins的环境搭建,需安装tomcat,mysql. Jenkins 地址:  https://jenkins.io/download/ 步骤分析: 1.全部操作使用普通用 ...

  6. FileCloud 的原理简述&自己搭建文件云

    FileCloud 的原理简述&自己搭建文件云 copyright(c) by zcy 关于如何使用IIS创建asp服务,请读者自行研究 注:不要忘记添加入站规则 代码的存储: 根目录 fil ...

  7. 「持续集成实践系列」Jenkins 2.x 搭建CI需要掌握的硬核要点

    1. 前言 随着互联网软件行业快速发展,为了抢占市场先机,企业不得不持续提高软件的交付效率.特别是现在国内越来越多企业已经在逐步引入DevOps研发模式的变迁,在这些背景催促之下,对于企业研发团队所需 ...

  8. Jenkins入门-环境搭建(1)-转

    因为Jenkins的环境搭建比较简单,本来不想来介绍,但是发现有些入门小朋友,从各种网站上下载的各种安装包来搭建,最后导致出现了各种千奇百怪的问题,介于这种情况下我决定还是来写一下Jenkins的环境 ...

  9. jenkins+ant+jmeter搭建持续集成的接口测试平台

    一.jemter接口脚本的编写步骤如下: 1. 编写接口请求 通过录制或者查看接口文档,编写接口请求,进行调试,确保接口调试通过,对于http的请求来说,就是正确的填写域名,查询字符串,查询参数等信息 ...

  10. 基于Jenkins的环境搭建

    基于 Jenkins 快速搭建持续集成环境 持续集成是一种软件开发实践,对于提高软件开发效率并保障软件开发质量提供了理论基础.Jenkins 是一个开源软件项目,旨在提供一个开放易用的软件平台,使持续 ...

随机推荐

  1. [Java]基本数据类型与引用类型赋值的底层分析的小结

    [版权声明]未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) https://www.cnblogs.com/cnb-yuchen/p/17969159 出自[进步*于辰的博客] 目录 1.关于 ...

  2. flume采集nginx日志文件数据到Kafka

    flume官网地址http://flume.apache.org/ #下载 wget https://mirrors.bfsu.edu.cn/apache/flume/1.9.0/apache-flu ...

  3. Java字符串比较 == 和 equals方法的区别

    今天在排除一个bug的时候出现了一个很低级但是也很容易被忽视的错误,在此写了一个小例子做记录. 首先我先说一下错误的场景,我读取了一段json数据,并使用JSONObject的实例对象的getStri ...

  4. 【已解决】Android----java.lang.NullPointerException:---java.lang.NullPointerException:

    2021-03-06 13:26:12.274 8544-8544/com.example.helloworld E/AndroidRuntime: FATAL EXCEPTION: main Pro ...

  5. Python 安装与快速入门

    Python安装 许多PC和Mac已经预装了Python. 要检查在Windows PC上是否安装了Python,请在开始菜单中搜索Python,或在命令行(cmd.exe)上运行以下命令: C:\U ...

  6. jemter做参数化的几种方法

    第一种:使用用户参数:添加--前置处理器--用户参数

  7. 4天带你上手HarmonyOS ArkUI开发

    本次HarmonyOS ArkUI入门训练营课程--健康生活实战篇,手把手教大家如何制作一个合理膳食的APP前端Demo! 课程实战样例通过ArkUI声明式UI开发框架实现,只需用几行简单直观的声明式 ...

  8. Centos 8.0 minimal命令行安装图形化界面(超详细)

    Centos 8.0 安装图形化界面(超详细) 开始之前呢,请先查看您的Centos版本和是否有root账户权限. 一.安装Centos 图形化界面并重启 下载安装图形化界面 执行命令 yum gro ...

  9. centos6.5下安装配置apache2.4.9

    centos6.5下安装配置apache2.4.9 摘要: 需要下载的包 apr-1.5.0.tar.gz apr-util-1.5.3.tar.gz pcre-8.33.tar.gz httpd-2 ...

  10. 微信、企微小程序使用taro对位置权限进行处理

    1.功能 当用户未授权地理位置权限时,引导用户开启地理位置权限,区别于之前的uni处理,uni的处理 的处理没有手机系统关闭位置权限的处理,但是uni文章中对于打开位置权限后重新返回小程序有做权限重获 ...