使用Jenkins,GitHub和Docker的最先进的持续集成和部署管道

搭建舞台

在过去的两年中,我一直在从事Node.js项目。 我们使用GitHub进行源管理,使用Jenkins进行持续集成。 我们还有一个基于Docker和Terraform的部署工具 。

在此期间,我们对配置进行了一些改进。 产生积极影响的更改之一是在分支上运行CI管道,并在GitHub上查看反馈。

在合并PR之前检查构建的结果可以防止由于微小错误而造成的大量损坏。 就像忘记运行lint或添加新文件一样。 一旦我们决定自动执行依赖关系的更新,反馈将使其变得快速,安全。

在这篇文章中,我将解释如何使用以下方法配置Continuos集成和部署管道:

  • Jenkins用于构建配置。 用于创建构建的多分支管道。 Jenkinsfile,用于决定在每个构建中执行什么
  • GitHub用于存储源代码,检查构建输出以及将分支合并到master
  • Docker将构建与执行环境隔离。 无论是开发人员机器还是Jenkins节点

特征

构建管道的配置与源代码一起进行版本控制。 这给您:

  • 旧配置的历史和回滚功能
  • 配置和源的原子更改
  • 使用分支来尝试配置本身

分支机构的建立和反馈意味着您可以:

  • 在代码审查期间查看构建结果
  • 如果分支破坏了构建,则防止分支合并
  • 自动合并不间断的更改

其他小事:

  • 该构建被定义为一系列步骤而不是作业,因此一旦开始就不会重新进入队列
  • 您可以通过编辑文件而不是使用Jenkins Web UI来执行大多数构建配置

缺点

  • 您需要学习Jenkinsfile的语法
  • 您需要注意两种不同的语法选项(脚本式和声明式)
  • 有关如何使用插件的文档并不总是很清楚,并且通常没有任何示例

该应用程序

我创建了一个Node.js Web应用程序作为示例。 为了简化构建,该应用程序没有外部运行时依赖项,例如数据库或服务。 可以扩展此配置以应对外部依赖性,而不会影响隔离性。 例如通过使用Docker Compose设置依赖关系。

Dockerfile

 FROM node:lts-slim  WORKDIR /opt/app  COPY package .json yarn.lock ./  RUN yarn  COPY . .  EXPOSE 8080  CMD yarn start 

Docker是最流行的应用程序容器化解决方案。 有关Docker的完整介绍,我推荐Andre Torres的Docker容器 。

在此CI管道中,Docker将应用程序代码与Jenkins节点隔离。

隔离启用复制。 如果在Jenkins中构建失败,并且我们需要调查失败,则可以在开发人员机器上将其复制,因为Jenkins节点及其软件的状态在容器内不起作用。

隔离还解决了具有不同运行时环境的问题。 每个应用程序可以在Dockerfile中指定不同版本的Node.js,以用于测试和部署。

詹金斯档案

 pipeline { agent any stages { stage( 'Build' ) { steps { sh 'docker build -t codurance/jenkins-pipeline-blog:latest .' } } stage( 'Test' ) { steps { sh 'docker run codurance/jenkins-pipeline-blog:latest yarn test' } } stage( 'Deploy' ) { when { branch 'master' } steps { sh 'docker push codurance/jenkins-pipeline-blog:latest' } } } post { failure { echo 'build is broken. notify team!' 'build is broken. notify team!' } }  } 

该常规文件替换了通常用于在Jenkins中配置作业的长Web表单。 此示例中的管道具有三个阶段(构建,测试,部署),每个阶段均由步骤实现。

部署阶段仅在主分支或中继分支受到影响时运行。 在此示例中,它将映像发布到hub.docker.com,但您可能会将其替换为用于部署应用程序的基础结构命令。

管道还具有一个称为post的部分,其中包含在构建完成后触发的诸如alwaysfailure步骤。 这些扩展点可以在您的工作流中集成消息传递系统,例如Slack。

Jenkins设置

Jenkins需要访问GitHub。 在我的情况下,有效的方法是使用新的GitHub个人令牌作为密码,在Jenkins中创建用户名和密码凭据。 这取决于在GitHub中设置用户的方式,因此它可能不适用于您的帐户。 我在CloudBees知识库中找到了详细的解释

配置完凭据后,就可以在Jenkins中创建新作业了。 当询问类型时,选择“多分支管道”

部署管道

Jenkins提供的默认设置对我的工作流程很明智,因此我对其进行了很少的修改。 如果您习惯了Jenkins的自由职业,您可能会对少量可用选项感到惊讶。 那是因为我们已经在Jenkinsfile中定义了整个构建管道。

部署管道

您可以配置哪些提交,分支或PR触发管道。 使用上面显示的设置,在推送到主节点,推送到分支以及创建PR时将触发管道。

保存配置后,最好在GitHub中检查webhook。 Jenkins将在存储库中配置一个Webhook,以在推送提交或创建PR后立即触发管道。 它要求Jenkins可以从Internet进行访问,最好使用有效的SSL证书。

部署管道

单击自由样式的Jenkins作业时,熟悉的景象就是减少内部版本号的列表。 现在,只需单击一下即可,因为每个分支和PR都有自己的内部编号序列。

GitHub中分支的构建状态通过链接到Jenkins的叉和刻度线报告。

部署管道

对于PR,管道是在与master合并之后运行的,并且与PR对话一起可见。

部署管道

也可以将GitHub配置为网守,以便无法合并测试失败的PR。 此功能称为受保护分支 。

部署管道

根据您的工作流程配置管道之后,您就可以开始开发应用程序了。

然后去哪儿?

最先进的技术并不意味着完美。 这是我目前所知道的最好的事情,我想学习更多,并回顾这是迈向更好的一步。

Jenkins是我在该领域使用最多的工具。 使用不同的工具很有可能会获得更好的结果。 我狭窄的经验是限制因素。

这篇文章中未涉及的领域是如何使用具有外部依赖项的应用程序。 我将在以后的文章中介绍。

在@jaramir或@codurance上发推文,让我知道您的想法。

快乐黑客!

资源资源

  • 示例Node.js项目https://github.com/codurance/jenkins-pipeline-blog
  • Jenkinsfile语法https://jenkins.io/doc/book/pipeline/syntax/
  • Jenkinsfile步骤参考https://jenkins.io/doc/pipeline/steps/
  • 多分支管道https://jenkins.io/doc/book/pipeline/multibranch/

翻译自: https://www.javacodegeeks.com/2019/05/continuous-integration-deployment-pipeline-jenkins-github-docker.html

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

zigbee与WiFi模块和蓝牙模块的区别是什么?

先说无线吧。市面主流三大协议Wifi,Zigbee,蓝牙。(协议可以理解为控制通信方式)如果使用Wifi协议接入,那如果家里网断了怎么办?显而易见,语音控制远程控制全部瘫痪。所以不管有线还是无线的设备…

工业级交换机的5个常见的优点解析

随着科技的不断发展,越来越多的工业级交换机逐渐取代了普通交换机。是因为工业级交换机有着普通交换机没有的优势。下面飞畅科技就来为大家详细说说工业级交换机最常见的5个优点,一起来看看吧! 一、超强抗干扰性 工业级交换机具有很强的抗干…

zigbee物联网模块标准:LTE标准Cat.1和nbiot无线通信模块差异

2021年LTE Cat.1出货量同比增长3倍以上,超过NB-IoT出货量成为最大标准。LTE Cat.1 从 2020 年到 2021 年在中国市场飞速发展,取代 2G 和部分 LTE Cat.4。 最初,据说 NB-IoT 可以解决广泛的用例。然而,它的主要应用保持不变&#…

[渝粤教育] 东北大学 现代科学运算—MATLAB语言与应用 参考 资料

教育 -现代科学运算—MATLAB语言与应用-章节资料考试资料-东北大学【】 01-01 本课程的主要内容 1、【判断题】 A、正确 B、错误 参考资料【 】 2、【判断题】 A、正确 B、错误 参考资料【 】 01-02 为什么学习计算机数学语言 1、【判断题】 A、正确 B、错误 参考资料【 】 2、…

zigbee物联网模块市场:LTE标准Cat.1和nbiot无线通信模块差异

2021 年对于zigbee物联网模块行业来说是忙碌的一年。zigbee模块需求快速增长,但半导体供应短缺导致模块供应紧张。zigbee物联网模组市场将在2021年实现显着的量增长。基于目前的供应情况,2022年将继续强劲的市场增长。但是,供过于求的担忧出现…

工业交换机常见问题汇总!

我们在使用工业交换机的时候,有时候会碰到自己不理解的问题,一般我们是通过网上搜索或者直接找技术客服人员来解决的。今天飞畅科技的小编给大家整理了一些工业交换机的常见的问题,希望能帮助到大家! 1、什么是数据交换&#xff…

lora无线模块基于LoRaWAN网关技术在国家物联网应用

该网路将由Lorawan无线网关模块运营,并将逐步部署在全国各地的Cellnex网络上。 物联网应用网路为提升居民生活水平质量和多产业链产业互联网提拱更有效的改进方案和服务质量是重中之重。 例如,物联网应用服务质量允许开发国家改进方案来监控物体的位置…

全球最大的LoRaWAN智能路灯项目刚刚启动

NNNCo 与技术提供商 Wellness TechGroup 合作推出 LoRaWAN无线网关模块在世界上最大的物联网应用智能街道照明项目之一。 该项目将覆盖200平方公里,为超过130万人提供物联网智能应用智能路灯,改善社区和道路安全,减少高达80%的碳排放。该计划…

LoRaWAN 巩固了其作为低功耗广域网主导技术的地位

LoRa大联盟是支持物联网应用(IoT)低功耗广域网(LPWAN)对外开放LoRaWAN标准规范的全世界机构行业协会,已发布了其2021年年度总结报告,全方位深入分析其活动内容和造就2021年。该报告书特别强调了该大联盟在过去的1年中推进规模性扩展的造就。 LoRa大联盟…

工业交换机的日常维护保养该怎么做?

如今工业交换机的使用越来越广泛了,作为数据通信传输设备,工业交换机在日常的维护保养上该怎么做呢?接下来飞畅科技就给大家详细介绍一下工业交换机的日常维护保养,一起来看看吧! 一、日常环境维护 工业交换机对于机房…

物联网蓝牙模WiFi无线模块技术和ZigBee技术再智能家具领域发展对比?

从物联网无线通信模块长远来看,很难说蓝牙模块、WiFi模块和zigbee模块三中通信协议哪种好,但目前这三种通信协议的适用相对明确,选择相对容易。 如果你想要一个中高端的无线智能家居系统,骨干仍然不能考虑Blemesh,主要…

物联网ZigBee3.0协议E18-2G4U04B模块无线数据抓包调试的方法

ZigBee3.0无线抓包简介 ZigBee3.0是ZigBee联盟推出的可以互联互通的标准协议,用之前的Packet Sniffer抓包工具是无法解析ZigBee3.0的数据包,因ZigBee3.0的安全机制所有的数据包都是加密的,无法解析每个数据包含义,所以此抓包方法在…

工业以太网交换机和普通商用交换机的区别

工业交换机宽温工作、抗干扰能力强、防雾、抗震性能强。那么,你知道工业交换机和商用(普通)交换机的区别吗?接下来飞畅科技就来为大家详细介绍下工业以太网交换机和普通商用交换机的区别,一起来看看吧! 工…

基于E18-2G4U04B的ZigBee3.0无线数据抓包安装方法

1.Ubiqua的安装说明 第一步 :解压Ubiqua的安装包; 第二步:选中官方安装文件“UbiquaToolbox_1.4.2244.msi”进行安装,安装过程中选择安装盘直接“下一步”直到安装成功。 第三步:将“Ubiqua.exe”文件复制到安装目录…

SI4432射频芯片方案物联网无线通信模块数传的典型应用

Si4432是Silicon labs公司的射频芯片,是一款高集成度、低功耗、多频段的EZRadioPRO系列无线收发芯片。其工作电压为1.9~3.6V,可工作在315/433/868/915MHz四个频段;内部集…

工业以太网交换机是否可以组建冗余环网?

工业以太网交换机作为重要的数据通信产品,要保证系统长期稳定、安全的运行,系统必须是开放的,兼容多个厂家的产品,如果仅仅依赖于某一个厂家,风险极大。因此,基于扩展性与兼容性考虑,应当充分考…

低功耗无线模块超远距离无线传输实现中继的方法

一、无线中继发展背景 近年来,随着社会的发展和科学技术的进步,人们开始进入数字网络化的智能社会,各种各样的智能设备改变着我们的生活,而无线传输在这些智能化发展中占有不可或缺的地位。在无线网络中,实现终端间的…

jdk1.8 ::构造函数_在JDK 8中可通过反射获得构造函数/方法参数元数据

jdk1.8 ::构造函数JDK 8较不广为人知的新 功能之一是在已编译的Java类中包含参数元数据的可选功能[JDK增强建议( JEP ) 118 ]。 此功能允许Java应用程序在运行时通过反射访问此参数元数据信息。 Java教程的Reflection API路径包括一个名为“ 获取方法参…

lora无线通信模块LoRa技术在智能家居灯控上的应用

一、概述 灯在生活中随处可见,传统的灯光一种是每个灯对应着不同的开关,比如:家里的吊灯、壁灯、落地灯、台灯等等,一种是一键式总开关,比如:马路上的路灯,演唱会上的舞台灯,酒店一体…

如何对工业交换机端口进行调试?

随着工业物联网通信时代的到来,工业交换机的应用方面越来越广泛。当工业交换机出现问题时,我们该如何通过工业交换机端口进行快速检测配置是否正确?下面飞畅科技就给大家介绍一种调试方法:交换机环回测试! 工业交换机…