Jenkins的原理及应用详解(六)

本系列文章简介:

        Jenkins是一种自动化构建工具,它的出现使得软件开发过程变得更加高效、可靠和可持续。它采用了一种事件驱动的架构,能够通过触发不同的事件来执行相应的构建任务和操作。Jenkins支持多种版本控制系统的集成,可以自动从代码仓库中拉取最新的代码,并进行编译、测试和部署等操作。它还提供了丰富的插件生态系统,可以满足不同项目的需求,并且可以灵活地扩展和定制。作为一种持续集成和持续交付的工具,Jenkins可以帮助开发团队快速构建、测试和部署软件,提供实时的反馈和报告,从而加速开发周期,降低人工错误。

        在本系列文章中,我们将深入探讨Jenkins的原理和应用。我们将介绍Jenkins的基本概念和核心组件,探讨其工作原理和机制。我们还将讨论如何在实际项目中应用Jenkins,包括如何配置和管理Jenkins服务器,如何创建和管理构建任务,以及如何利用Jenkins的插件来满足特定项目的需求。此外,我们还将讨论如何利用Jenkins来实现持续集成和持续交付,并探讨其在软件开发过程中的优势和应用场景。无论是初学者还是有经验的开发者,本系列文章都将为你提供全面而详尽的Jenkins知识,帮助你更好地理解和应用这个强大的自动化构建工具。

        欢迎大家订阅《Java技术栈高级攻略》专栏,一起学习,一起涨分!

目录

一、引言

二、安全与最佳实践

2.1 安全性

2.1.1 访问控制与权限管理

2.1.2 加密敏感数据(如凭据)

2.1.3 网络安全与防火墙配置

2.2 最佳实践

2.2.1 保持Jenkins与插件的更新

2.2.2 使用Pipeline代替Freestyle Job

2.2.3 编写清晰、可维护的Jenkinsfile

2.2.4 备份与恢复策略

三、总结与展望

3.1 Jenkins在CI/CD领域的重要性

3.2 Jenkins的发展趋势与未来展望

四、结语


一、引言

        Jenkins是一个开源的自动化构建工具,它能够帮助开发团队实现持续集成和持续交付。它具有良好的扩展性和灵活性,可集成多种版本控制系统和构建工具,适用于各种类型的项目。

        本文将跟随《Jenkins的原理及应用详解(五)》的进度,继续介绍Jenkins。希望通过本系列文章的学习,您将能够更好地理解Jenkins的内部工作原理,掌握Jenkins的使用技巧,以及通过合理的设计完成最佳实践,充分发挥优化Jenkins的潜力,为系统的高效运行提供有力保障。

二、安全与最佳实践

2.1 安全性

2.1.1 访问控制与权限管理

Jenkins提供了访问控制和权限管理的功能,用于保护Jenkins实例的安全性。下面是一些关于Jenkins访问控制和权限管理的重要概念和配置选项:

  1. 用户认证:Jenkins支持多种用户认证方式,包括Jenkins内部数据库、LDAP、Active Directory和其他插件。管理员可以配置所需的用户认证方式。用户认证可以防止未经授权的访问。

  2. 角色:Jenkins使用角色来分配和管理用户的权限。每个角色定义了一组权限,用户被分配到不同的角色。管理员可以创建并配置角色来满足特定的访问需求。

  3. 全局安全配置:管理员可以配置全局安全选项,例如允许匿名访问、允许用户自行注册、允许用户配置和读取系统配置等。这些选项可以根据实际需求进行调整。

  4. 项目级权限:管理员和项目所有者可以配置项目级权限,例如允许特定用户或角色访问和执行特定项目。这些权限可以根据项目的特定需求进行定制。

  5. 细粒度权限控制:Jenkins提供了细粒度的权限控制选项,管理员可以控制用户或角色对不同操作和功能的访问权限。例如,可以限制某些用户只能查看构建日志而无法重新构建。

  6. 审计日志:Jenkins支持审计日志功能,记录了用户访问和操作的详细信息。管理员可以通过审计日志来监控和调查可能的安全问题。

  7. 插件安全:Jenkins的插件系统也有一些安全机制,如插件签名和沙箱执行。这些机制可以防止恶意插件对系统进行攻击。

总而言之,Jenkins的访问控制和权限管理功能可以帮助管理员保护Jenkins实例的安全性,确保只有经过授权的用户能够访问和执行相关操作。管理员应该根据实际需求进行配置,并定期审查和更新权限设置。


2.1.2 加密敏感数据(如凭据)

Jenkins提供了一些功能和机制来加密敏感数据,如凭据和密码。以下是关于Jenkins加密敏感数据的一些重要概念和配置选项:

  1. 凭据存储:Jenkins提供了一个专门的凭据存储系统,用于安全地存储和管理凭据。凭据包括用户名/密码对、密钥、证书等敏感信息。凭据存储可以通过UI或API进行配置和管理。

  2. 密码加密:Jenkins使用加密算法对凭据中的密码进行加密存储。这样即使在存储或传输过程中被窃取,也无法直接获取到原始密码。Jenkins支持多种密码加密算法,如AES、RSA等。

  3. SSH凭据:对于SSH密钥,Jenkins使用Java密钥库(JKS)和OpenSSH格式来存储和管理私钥和公钥。私钥被加密存储,只有在使用时才解密。

  4. 敏感数据掩码:Jenkins提供了敏感数据掩码功能,可以在构建日志中对敏感信息进行掩码处理,例如隐藏密码和密钥。这样可以防止敏感信息在日志中被意外泄露。

  5. 插件支持:Jenkins的插件系统提供了许多插件来增强和加强敏感数据的安全性。例如,有一些插件可以从外部凭据存储系统(如Vault)中获取凭据,而不是将凭据直接存储在Jenkins中。

  6. 加密传输:Jenkins支持使用HTTPS来加密传输数据,包括敏感凭据和其他重要信息。管理员可以配置Jenkins使用HTTPS来保护数据的机密性。

总而言之,Jenkins提供了一系列功能和机制来加密敏感数据,如凭据和密码。管理员应该根据实际需求配置和使用这些功能,以确保敏感数据的安全性。同时,也要确保及时更新和维护Jenkins实例的安全性,如升级Jenkins版本和及时修复任何已知的安全漏洞。


2.1.3 网络安全与防火墙配置

Jenkins的网络安全和防火墙配置非常重要,以保护Jenkins实例免受潜在的网络攻击。以下是一些关于Jenkins网络安全和防火墙配置的重要事项:

  1. 防火墙配置:确保Jenkins服务器所在的主机和网络上的防火墙配置正确。只允许必要的网络流量访问Jenkins服务器,限制对Jenkins的远程访问,只开放必需的端口(如HTTP或HTTPS端口)。

  2. 安全连接:使用HTTPS来加密Jenkins的传输数据,包括用户凭据和构建日志。配置Jenkins使用SSL证书,以确保与Jenkins服务器的通信是安全的。

  3. 网络访问控制:使用网络ACL(访问控制列表)或其他网络访问控制机制,限制对Jenkins服务器的访问权限。只允许授权的IP地址或网络范围访问Jenkins。

  4. 安全插件:安装和配置Jenkins安全插件,如防火墙插件、IP过滤插件等,来增强Jenkins的网络安全性。

  5. 安全更新:及时更新Jenkins和相关插件的版本,以获取最新的安全修复和功能改进。保持Jenkins实例处于最新的安全状态。

  6. 系统监控:设置系统监控和警报,以便及时检测和响应任何潜在的安全事件或异常活动。

  7. 访问日志:启用访问日志,记录所有对Jenkins的访问和活动。定期审查和分析访问日志,以便发现潜在的安全威胁或异常行为。

  8. 安全培训:对Jenkins管理员和用户进行网络安全培训,提高他们的安全意识和知识,并教育他们如何正确配置和使用Jenkins以确保安全性。


2.2 最佳实践

2.2.1 保持Jenkins与插件的更新

保持Jenkins与插件的更新是保持Jenkins实例安全和稳定运行的关键。

以下是一些保持Jenkins与插件更新的最佳实践:

  1. 定期更新Jenkins和插件:及时安装Jenkins的最新版本和可用的插件更新。新版Jenkins通常包含了安全修复、性能改进和新功能。插件的更新通常包括修复了已知的漏洞和错误,并提供了更好的功能。

  2. 使用稳定版本:在更新Jenkins和插件时,首先选择已经经过测试和认证的稳定版本。避免使用beta或开发版,它们可能包含未知的问题。

  3. 定期检查更新:定期检查Jenkins和插件的更新。可以配置Jenkins的更新中心,它会提醒可用的更新,并提供自动更新选项。

  4. 先进行测试:在生产环境之前,在测试环境中验证Jenkins和插件的更新。确保更新不会破坏现有的配置和功能,并且与其他插件和工具兼容。

  5. 监控变化:监控Jenkins和插件的更新日志和变更信息。了解更新中的变化和修复的漏洞,以便评估其对现有配置和功能的影响。

  6. 注意安全修复:特别关注插件的安全修复更新。及时安装这些更新,以防止已知漏洞和安全威胁。

  7. 备份配置和数据:在进行Jenkins和插件的更新之前,确保备份Jenkins的配置文件和重要数据。这样,如果出现问题,可以恢复到之前的正常状态。

  8. 强调团队协作:与团队成员共享关于Jenkins和插件的更新信息,并确保所有人都了解更新的重要性和潜在的影响。

通过保持Jenkins和插件的更新,可以获得最新的功能和修复已知漏洞的补丁。这有助于提高Jenkins实例的安全性、性能和稳定性,同时为用户提供更好的体验。


2.2.2 使用Pipeline代替Freestyle Job

使用Pipeline代替Freestyle Job是Jenkins的最佳实践之一,因为Pipeline提供了更灵活、可扩展和可维护的方式来定义和管理构建和部署过程。

以下是一些使用Pipeline代替Freestyle Job的最佳实践:

  1. 使用声明性Pipeline:Jenkins Pipeline支持两种语法,一种是脚本式Pipeline,另一种是声明式Pipeline。建议使用声明式Pipeline,因为它提供了更简洁和可读性好的语法,更易于管理和维护。

  2. 将构建逻辑定义为代码:使用Pipeline,可以将整个构建和部署过程定义为代码,即Jenkinsfile。这样可以将构建逻辑与Jenkins实例解耦,使其可以存储在版本控制系统中,并与代码一起进行版本控制和持续集成。

  3. 利用Pipeline插件和库:Jenkins Pipeline提供了许多有用的插件和库,可以扩展其功能。例如,可以使用插件来集成第三方工具、管理构建参数、处理构建日志等。还可以使用共享库来共享常见的构建步骤和功能,以便在多个Pipeline项目中重用。

  4. 使用步骤和阶段:Pipeline的核心概念是步骤(Step)和阶段(Stage)。将构建和部署过程分解为多个步骤和阶段,可以更好地组织和管理构建流程。每个步骤和阶段都可以定义自己的任务和条件,使构建过程更灵活和可控。

  5. 编写可重用的函数和组件:通过编写可重用的函数和组件,可以将常用的构建逻辑封装起来,并在不同的Pipeline项目中重用。这样可以减少重复代码,提高代码的可维护性和可读性。

  6. 使用Pipeline语法检查工具:由于Pipeline是以代码形式定义的,因此可能存在语法错误和潜在的问题。为了减少错误和提高代码质量,可以使用支持Pipeline语法检查的工具,如Jenkins的Pipeline Syntax插件或静态代码分析工具。

使用Pipeline代替Freestyle Job可以更好地管理和维护构建和部署过程,提高可重复性、可扩展性和可读性,同时使构建和部署过程变得更透明和可追溯。


2.2.3 编写清晰、可维护的Jenkinsfile

编写清晰、可维护的Jenkinsfile是Jenkins的最佳实践之一,以下是一些建议:

  1. 模块化和复用:将Jenkinsfile分解为多个模块,每个模块负责不同的功能或阶段。这样可以使Jenkinsfile更可读、更易于理解和维护。同时,可以将一些常用的步骤封装为单独的函数,方便在不同的Jenkinsfile中复用。

  2. 使用参数化:使用参数化可以增加Jenkinsfile的灵活性。通过使用参数,可以在运行时根据需要进行自定义。例如,可以将构建版本、目标环境等作为参数传递给Jenkinsfile,而不是在Jenkinsfile中硬编码。

  3. 引入错误处理:在Jenkinsfile中,可以使用try-catch语句来处理异常和错误。这样可以增强Jenkinsfile的健壮性,确保在出现错误时能够进行适当的处理,如发送通知或进行回滚操作。

  4. 使用环境变量:Jenkins提供了许多环境变量,可以在Jenkinsfile中使用。例如,可以使用BUILD_NUMBER和GIT_COMMIT等变量来获取构建的版本号和代码提交的哈希值。使用环境变量可以使Jenkinsfile更灵活,适应不同的构建环境。

  5. 编写清晰的注释:使用注释可以使Jenkinsfile的逻辑更易于理解和维护。合理地编写注释可以帮助其他人了解Jenkinsfile中的意图和逻辑,并减少潜在的错误。

  6. 使用版本控制:将Jenkinsfile与代码存储在同一个版本控制系统中,可以使Jenkinsfile的变更和版本管理更加方便和可追溯。使用版本控制系统可以追踪Jenkinsfile的变更历史,方便回滚和查找问题。

  7. 运行静态分析:Jenkins提供了许多插件和工具,可以对Jenkinsfile进行静态分析。这些工具可以检测潜在的错误、代码质量问题和最佳实践违规。运行静态分析可以提高Jenkinsfile的质量和可维护性。

  8. 定期进行代码审查:定期进行代码审查是保持Jenkinsfile清晰、可维护性的重要方式。通过代码审查,可以发现潜在的问题和改进的机会,并确保Jenkinsfile符合团队的标准和最佳实践。

通过遵循这些最佳实践,可以编写清晰、可维护的Jenkinsfile,提高构建和部署过程的可读性和可维护性,并减少潜在的错误和问题。


2.2.4 备份与恢复策略

备份与恢复策略是Jenkins的最佳实践之一,以下是一些建议:

  1. 定期备份Jenkins主目录:Jenkins主目录包含了Jenkins的配置文件、插件和作业等重要数据。定期备份Jenkins主目录是保护Jenkins数据的关键。可以使用工具或脚本来自动化备份过程,确保备份的完整性和一致性。

  2. 将备份数据存储在安全的地方:备份数据应该存储在安全可靠的地方,例如另一个服务器或存储设备。同时,备份数据应该进行加密和保护,以防止数据泄露和未经授权访问。

  3. 测试备份的可恢复性:定期测试备份的可恢复性是非常重要的。可以通过恢复到另一个环境或虚拟机来测试备份的有效性。测试备份的可恢复性可以确保在需要时能够快速和准确地恢复Jenkins系统。

  4. 备份插件和配置文件:除了备份Jenkins主目录,还应该备份Jenkins插件和配置文件。插件和配置文件包含了定制的设置和配置,例如全局工具配置、全局凭证等。备份插件和配置文件可以减少重新配置和设置的工作量。

  5. 考虑分散备份:将备份数据分散存储在多个地点可以提高备份的安全性和可靠性。可以将备份数据复制到另一个地理位置或云存储中,以防止单点故障和数据丢失。

  6. 建立备份策略和计划:制定备份策略和计划非常重要。需要确定备份的频率、保留时间和恢复点目标(RPO)。备份策略和计划可以根据业务需求和风险评估来确定。

  7. 监控备份过程和结果:监控备份过程和结果可以及时发现备份问题和异常。可以设置警报和通知,以便在备份失败或出现异常时进行及时处理。

通过遵循这些最佳实践,可以确保Jenkins系统的备份和恢复策略健壮可靠,保护Jenkins数据免受数据丢失和损坏的风险,并确保在灾难发生时能够快速恢复Jenkins系统。

三、总结与展望

3.1 Jenkins在CI/CD领域的重要性

Jenkins在CI/CD(持续集成/持续交付)领域扮演着非常重要的角色。以下是Jenkins在CI/CD中的重要性:

  1. 自动化构建和测试:Jenkins可以自动化构建和测试软件项目。通过配置和管理Jenkins作业,可以轻松地将源代码从软件存储库中检出,构建应用程序,并运行各种测试,如单元测试、集成测试和端到端测试。

  2. 持续集成:Jenkins使得持续集成成为可能。持续集成是一种开发实践,通过频繁地将代码合并到共享存储库中,并通过自动构建和测试来验证新代码的质量。Jenkins可以在每次代码提交后自动触发构建和测试过程,从而加速开发流程并减少错误的引入。

  3. 持续交付和部署:Jenkins是实现持续交付和部署的关键工具。持续交付是指将已通过测试的软件版本可靠地交付给用户。Jenkins可以自动化部署软件到各种环境中,包括开发、测试、预生产和生产环境。这样可以减少人为的错误和减小发布风险,同时加快交付时间。

  4. 插件生态系统:Jenkins具有庞大的插件生态系统,可以扩展其功能和集成其他工具和技术。例如,可以使用插件来与版本控制系统(如Git)集成、与构建工具(如Maven和Gradle)集成、与测试框架(如JUnit和Selenium)集成等。这使得Jenkins非常灵活和适应各种不同的项目和工作流。

  5. 可视化和报告:Jenkins提供了丰富的可视化和报告功能,用于监控和分析构建和测试结果。用户可以通过Jenkins的Web界面查看构建历史、构建状态、测试报告和代码覆盖率等信息。这些可视化和报告帮助开发团队和管理者实时了解项目的状态和质量。

3.2 Jenkins的发展趋势与未来展望

Jenkins作为一款开源的CI/CD工具,一直在不断发展和演进。以下是Jenkins的发展趋势和未来展望:

  1. Pipeline as Code(代码化流水线):Jenkins Pipeline是一种将CI/CD流程以代码的形式定义和管理的方式。它提供了更丰富的表达能力和可重用性,使得构建、测试和部署流程更加灵活和可扩展。未来,Jenkins将进一步发展和改进Pipeline as Code的功能,以提供更好的开发体验和更高的自动化水平。

  2. 容器化和云原生支持:随着容器技术的兴起以及云原生应用的发展,Jenkins将更多地与容器技术(如Docker和Kubernetes)以及云平台(如AWS、Azure和GCP)进行整合和支持。这使得Jenkins能够更好地适应现代化的应用部署和管理方式,提供弹性和可伸缩的构建和部署环境。

  3. DevOps和自动化实践:Jenkins作为CI/CD的核心工具,与DevOps文化和自动化实践密切相关。未来,Jenkins将进一步加强与DevOps工具和流程的集成,以支持更深度的自动化和协作。它将与代码仓库、配置管理工具、测试和监控工具等进行更紧密的集成,以提供更完整的DevOps解决方案。

  4. 用户体验和扩展性改进:Jenkins一直致力于提供良好的用户体验和易于扩展的架构。未来,Jenkins将继续改进其用户界面、流程可视化和报告功能,以提高用户的使用体验。同时,Jenkins还将继续增加和改进插件生态系统,以支持更多的工具和技术集成。

  5. 社区合作与开源创新:Jenkins是一个活跃的开源社区,拥有众多的贡献者和用户。未来,Jenkins将继续依靠社区的合作和贡献,推动其发展和创新。社区将不断改进和修复Bug,发布新的功能和改进,以满足用户的需求和提高Jenkins的质量。

四、结语

        文章至此,已接近尾声!希望此文能够对大家有所启发和帮助。同时,感谢大家的耐心阅读和对本文档的信任。在未来的技术学习和工作中,期待与各位大佬共同进步,共同探索新的技术前沿。最后,再次感谢各位的支持和关注。您的支持是作者创作的最大动力,如果您觉得这篇文章对您有所帮助,请分享给身边的朋友和同事!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/608988.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

FPGA+炬力ARM实现VR视频播放器方案

FPGA炬力ARM方案,单个视频源信号,同时驱动两个LCD屏显示,实现3D 沉浸式播放 客户应用:VR视频播放器 主要功能: 1.支持多种格式视频文件播放 2.支持2D/3D 效果实时切换播放 3.支持TF卡/U盘文件播放 4.支持定制化配置…

Linux运维:centos环境变量

前言 在 Linux 运维工作中,管理环境变量是至关重要的一项任务。在 CentOS 环境下,正确配置环境变量可以使系统更加高效和易于管理。 本文将重点讨论 CentOS 环境下的环境变量设置,并就python的环境变量配置方案进行讲解(不包含Ano…

AutoModelForCausalLM.from_pretrained 函数调用本地权重报错

文章目录 1、代码报错的位置(前情提要)finetune_lora.shfintune_clm_lora.py 2、报错截图2.1、huggingfaces上的 meta-llama/Llama-2-7b-chat-hf2.2、服务器上模型文件路径 3、特别注意事项 1、代码报错的位置(前情提要) 在终端直…

06.命令的组合使用

命令的组合使用 1.查询当前整个系统每个进程的线程数 我们经常遇到这样的问题,比如某台服务器的CPU 使用率飙升,通过top命令查看是某个程序(例如java)占用的cpu比较大,现在需要查询java各个进程下的线程数情况。可以通…

Reactor Netty HTTP 服务器端-响应式编程-014

🤗 ApiHug {Postman|Swagger|Api...} = 快↑ 准√ 省↓ GitHub - apihug/apihug.com: All abou the Apihug apihug.com: 有爱,有温度,有质量,有信任ApiHug - API design Copilot - IntelliJ IDEs Plugin | Marketplace The Next Generation API Development Platform …

风扇开启执行逻辑

执行流程 public static void businessExecutionWork(){//以下为业务逻辑部分System.out.println("1、根据电池包控制风扇服务执行 开始!");//1、获取电池包电压、电流、环境温度//获取电池包电压、电流、环境温度ObtainBatteryDataService obtainBatteryDataServic…

Docker 怎么将映射出的路径设置为非root用户权限

在Docker中,容器的根文件系统默认是由root用户拥有的。如果想要在映射到宿主机的路径时设置为非root用户权限,可以通过以下几种方式来实现: 1. 使用具有特定UID和GID的非root用户运行容器: 在运行容器时,你可以使用-u…

监控异地组网怎么组网?

监控异地组网是指在不同地域的网络环境下,实现对监控设备的远程访问和管理。在传统的网络环境下,由于网络限制和设备配置等问题,监控设备的远程访问往往受到一定的限制和困扰。为了解决这个问题,引入了天联组网技术,实…

Mysql幻读

幻读指的是一个事务在前后两次查询同一个范围的时候,后一次查询看到了前一次查询没有看到的行。 幻读仅专指“新插入的行” 在可重复读隔离级别下,普通的查询是快照读,是不会看到别的事务插入的数据的。因此,幻读在“当前读”下…

【JavaEE网络】HTTP/HTTPS协议的工作原理与格式详解

目录 HTTP/HTTPSHTTP是什么理解“应用层协议”理解HTTP协议的工作过程HTTP协议格式 HTTP/HTTPS HTTP是什么 应用层,一方面是需要自定义协议,一方面也会用到一些现成的协议 HTTP及HTTPS是应用层重点协议 使用浏览器,打开网站,这…

自动化运维工具——Ansible

一、Ansible的概念: 1.Ansible的介绍: Ansible是一个基于Python开发的配置管理和应用部署工具,现在也在自动化管理领域大放异彩。它融合了众多老牌运维工具的优点,Pubbet和Saltstack能实现的功能,Ansible基本上都可以…

OpenHarmony 实战开发(南向)-Docker编译环境搭建

Docker环境介绍 OpenHarmony为开发者提供了两种Docker环境,以帮助开发者快速完成复杂的开发环境准备工作。两种Docker环境及适用场景如下: 独立Docker环境:适用于直接基于Ubuntu、Windows操作系统平台进行版本编译的场景。 基于HPM的Docker…

2024车载测试还有发展吗?

2024年已过接近1/4了,你是不是还在围观车载测试行业的发展? 现在入车载测试还来得及吗? 如何高效学习车载测试呢? 首先我们看一下车载测试行情发展,通过某大平台,我们后去数据如下: 这样的数据可以预估一下未来车载测试还是会持续发展. 随着科技的发展和汽车行业的不断创新,…

第08章 IP分类编址和无分类编址

8.1 本章目标 了解IP地址的用途和种类了解分类编址和无分类编址区别掌握IP地址、子网掩码、网关概念及使用掌握子网划分及超网划分方法掌握无分类编址的改变和使用 8.2 IP地址的用途和种类 分类编址:造成地址的浪费,以及地址不够用;无分类编…

labview技术交流-字符串数组连接成字符串

应用场景 我们可能需要将一维的字符串数组转换成一整条字符串,然后方便记录在数据库或表格中的一个单元格中。 代码展示 方案一 我们使用for循环完成这样的功能需求,见下图: 这种方案可能相对基础和普通,但是它更方便和易于扩展…

在Flask中使用Celery完成异步和定时任务(Flask、Celery、Redis)

编程目标 通过使用Flask和Celery,实现一个简单的Web应用程序,能够接收HTTP POST请求,并异步发送电子邮件。 说明 使用Flask创建一个简单的Web应用程序,包含一个HTTP POST路由,用于接收发送电子邮件的请求。使用Cele…

【Java SE】对象的比较

🥰🥰🥰来都来了,不妨点个关注叭! 👉博客主页:欢迎各位大佬!👈 本期内容满满干货,将会深入介绍对象与对象之间是如何进行比较的,我们知道基本数据类型是可以直…

使用 docker-compose 搭建个人博客 Halo

说明 我这里使用的是 Halo 作为博客的工具,毕竟是开源了,也是使用 Java 写的嘛,另外一点就是使用 docker 来安装(自动挡,不用自己考虑太多的环境因素),这样子搭建起来更快一点,我们…

【STM32 |新建一个工程】基于标准库(库函数)新建工程

目录 STM32开发方式 库函数文件夹 建工程步骤 库函数工程建立 建立工程总结 STM32开发方式 目前stm32的开发方式主要有基于寄存器的方式、基于标准库的方式(库函数的方式)、基于HAL库的方式基于库函数的方式是使用ST官方提供的封装好的函数&…

17、线上系统中垃圾回收参数的精准调校指南

17.1、前文回顾 在上一篇文章中,我们已经通过逐步的图解方式,详细解释了CMS垃圾回收的运行机制。简单来说,CMS垃圾回收器采用了四个阶段来进行垃圾回收,以尽量避免长时间的“Stop the World”现象。这四个阶段分别是:初始标记、并发标记、重新标记和并发清理。 在初始标…