云原生之深入解析Jenkins多分支管道

news2024/11/24 15:33:49

一、 前言

  • 多分支管道是一种基于 Git 分支自动创建 Jenkins Pipeline 的概念,这意味着,它可以在 SCM(Github)中创建时自动发现新的 Git 分支,并自动为该分支创建管道,当管道构建开始时,Jenkins 在该分支中使用 Jenkinsfile 进行构建阶段。
  • SCM 可以是 Github、Bitbucket 或 Gitlab 存储库,如果不希望所选分支出现在带有 Java 正则表达式的自动管道中,则可以选择排除。多分支管道支持基于 PR 的分支发现,这意味着,如果有人从分支提出 PR(拉动请求),则会在管道中自动发现分支。如果启用了此配置,则仅在提 PR 时才会触发构建。因此,如果正在寻找基于 PR 的 Jenkins 构建工作流程,这是一个不错的选择。
  • 可以向 Jenkinsfile 添加条件逻辑,以根据分支需求构建作业。例如,如果希望功能分支仅运行单元测试和 Sonar 分析,则可以设置条件以使用 when 条件跳过部署阶段,如下所示:
stage('Deploy for production') {
	when {
		branch 'production'
	}
	steps {
		----
	}
}	
  • 因此,每当开发人员将 PR 从功能分支提交到其他分支时,管道将运行单元测试和 Sonar 分析阶段,从而跳过部署阶段。而且,多分支流水线不仅限于连续交付应用程序,当然也可以使用它来管理基础结构代码。

二、多分支管道如何工作?

  • 这里将引导完成基本的构建和部署工作流程,以了解多分支管道的工作方式,假设希望 Jenkins 管道在以下条件下构建和部署应用程序:
    • 开发人员通过向功能分支提交代码来从功能分支开始;
    • 每当开发人员从功能分支提 PR 来开发分支时,Jenkins 管道都应触发以运行单元测试和静态代码分析;
    • 在功能分支中成功测试代码后,开发人员将 PR 合并到开发分支;
    • 当代码准备发布时,开发人员将 PR 从 develop 分支提到 master,它应该触发一个构建管道,该管道将运行单元测试用例,代码分析并将其部署到 dev/QA 环境。
  • 从以上条件可以看出,没有手动触发 Jenkins 作业的情况,并且每当有分支请求请求时,都需要自动触发管道并为该分支运行所需的步骤。此工作流程为工程师建立了一个很好的反馈循环,并避免了依赖 DevOps 团队在非产品环境中进行构建和部署,开发人员可以在 Github 上检查构建状态,然后决定下一步要做的事情。
  • 通过 Jenkins 多分支管道可以轻松实现此工作流程,如下显示了以上示例构建过程的多分支管道工作流的外观:

在这里插入图片描述

  • 这是多分支管道的工作方式:
    • 当开发人员从功能分支创建 PR 来开发分支时,Github 将带有 PR 信息的 Webhook 发送给 Jenkins;
    • Jenkins 收到 PR,并找到相关的多分支管道并自动创建分支管道,然后它按照功能分支中 Jenkinsfile 中提到的步骤运行作业,签出期间,PR 中的源分支和目标分支将合并,PR 合并将在 Github 上被阻止,直到从 Jenkins 返回构建状态为止;
    • 构建完成后,Jenkins 会将状态更新为 Github PR,现在将能够合并代码,另外如果想查看 Jenkins 构建日志,则可以在 PR 状态下找到 Jenkins 构建日志链接。

三、多分支 Pipleline Jenkinsfile

  • 在开始实施之前,来看一下可在管道中使用的多分支管道 Jenkins 示例 Jenkinsfile,为了使多分支管道正常工作,需要在 SCM 存储库中包含 Jenkinsfile,如果正在学习/测试,则可以使用下面提供的多分支管道 Jenkinsfile,它具有一个检出阶段和其他阶段,它们会回显消息。另外,可以克隆并使用具有此 Jenkinsfile 的 Github 存储库。
  • 需要注意的是:将代理标签“master”替换为我们的 Jenkins 代理名称,master 也可以工作,但不建议它在实际的项目环境中运行:
pipeline {

  agent {
      node {
          label 'master'
      }
  }

  options {
      buildDiscarder logRotator(
                  daysToKeepStr: '16',
                  numToKeepStr: '10'
          )
  }

  stages {
       
      stage('Cleanup Workspace') {
          steps {
              cleanWs()
              sh """
              echo "Cleaned Up Workspace For Project"
              """
          }
      }

      stage('Code Checkout') {
          steps {
              checkout([
                  $class: 'GitSCM',
                  branches: [[name: '*/main']],
                  userRemoteConfigs: [[url: 'https://github.com/spring-projects/spring-petclinic.git']]
              ])
          }
      }

      stage(' Unit Testing') {
          steps {
              sh """
              echo "Running Unit Tests"
              """
          }
      }

      stage('Code Analysis') {
          steps {
              sh """
              echo "Running Code Analysis"
              """
          }
      }

      stage('Build Deploy Code') {
          when {
              branch 'develop'
          }
          steps {
              sh """
              echo "Building Artifact"
              """

              sh """
              echo "Deploying Code"
              """
          }
      }

  }  
}

四、设置 Jenkins 多分支管道

  • 在这里,将逐步在 Jenkins 上建立多分支管道,该设置将基于 Github 和最新的 Jenkins 2.x 版本,还可以将 Bitbucket 或 Gitlab 用作多分支管道的 SCM 源。
  • 步骤 1:在 Jenkins 主页上创建一个“新项目”:

在这里插入图片描述

  • 步骤 2:从选项中选择“多分支管道”,然后单击“确定”:

在这里插入图片描述

  • 步骤 3:点击“添加来源”,然后选择 Github:

在这里插入图片描述

  • 步骤 4:在认证字段下,选择 Jenkins 并使用 Github 用户名和密码创建一个认证:

在这里插入图片描述

  • 步骤 5:选择创建的凭据,然后提供 Github 存储库以验证凭据,如果正在测试多分支管道,则可以克隆演示 Github 存储库并使用它,如下所示:

在这里插入图片描述

  • 步骤 6:选择所需的选项以符合要求,可以选择发现存储库中的所有分支,也可以仅选择具有“拉取请求”的分支,管道还可以从分叉的仓库中发现具有 PR 的分支,选择这些选项取决于所需的工作流程:

在这里插入图片描述

  • 可以从“添加”按钮中选择其他行为,例如如果选择不从存储库中发现所有分支,则可以选择正则表达式或通配符方法从存储库中发现分支,如下所示:

在这里插入图片描述

  • 这是一个正则表达式和通配符示例:

在这里插入图片描述

  • 步骤 7:如果选择为 Jenkinsfile 使用其他名称,则可以通过在构建配置中指定名称来实现,在“脚本路径”选项中,可以提供所需的名称,确保仓库中的 Jenkinsfile 与在管道配置中提供的名称相同。另外,启用“放弃旧版本”以仅保留所需的生成日志,如下所示:

在这里插入图片描述

  • 步骤 8:保存所有作业配置,Jenkins 扫描已配置的 Github 存储库,以查找所有提升了 PR 的分支。如下显示了扫描三个分支的作业,并且由于没有提出任何拉取请求,Jenkins 不会创建任何基于分支的管道,将展示如何在设置 Webhook 之后测试自动管道创建:

在这里插入图片描述

  • 到目前为止,已经在 Jenkins 完成了配置,可以根据 PR 请求扫描分支。为了拥有完整的工作流程,需要在 Github 中配置一个 Webhook,以将所有事件(提交,PR 等)发送给 Jenkins,因为可以自动触发管道。

五、为多分支管道配置 Webhook

  • 转到 Github 存储库,然后单击设置:

在这里插入图片描述

  • 选择左侧的 webhook 选项,然后单击“添加 Webhook”按钮:

在这里插入图片描述

  • 在有效负载 URL 下添加 Jenkins URL,后跟“ /github-webhook /”,选择内容类型为“application/json”,然后单击“添加 Webhook”,可以选择要在 Jenkins 中接收的 Webhook 类型。例如只想在 PR 期间触发管道,然后可以从“让我选择单个事件”选项中仅选择 PR 事件:

在这里插入图片描述

  • 将在成功的 Webhook 配置上看到一个绿色的勾号 ,如下所示:

在这里插入图片描述

  • 如果没有看到绿色的勾号或警告标志,请单击 Webhook 链接,然后单击最后一个 Webhook,应该能够使用状态代码查看为什么 Webhook 传递失败:

在这里插入图片描述

  • 现在,就完成了多分支管道的所有必需配置。

六、测试多分支管道

  • 出于演示目的,选择了“仅将分支作为 PR 的分支”选项,使用此选项,仅发现具有 PR 请求的分支。要使用多分支管道,可以将此回购与示例 Jenkinsfile 一起使用。 这个仓库有三个分支,更新功能分支中自述文件中的某些内容,并提高 PR 以进行开发,它将向 Jenkins 发送一个 Webhook,并且 Jenkins 将发送回 Jenkins 的工作详细信息,并且 PR 将进入检查状态,如下所示:

在这里插入图片描述

  • 如果单击“详细信息”,它将带到 Jenkins 构建日志,可以在 Jenkins 文件中编写自定义检查,以用于构建审核。现在,如果选择了 Jenkins,将在 Jenkins 中找到功能分支的管道,如下所示:

在这里插入图片描述

  • 如果构建失败,则可以将更改提交到功能分支,并且只要 PR 打开,它将触发功能管线。在 Jenkinfile 中,如果分支未开发,添加一个条件以跳过部署阶段,可以在 Jenkins 构建日志中进行检查。另外,如果在蓝海仪表板中检查构建流程,则可以清楚地看到跳过的部署阶段,如下所示:

在这里插入图片描述

  • 现在合并功能分支 PR 并将新的 PR 从 development 提升到 master 分支,Jenkins 将收到来自 Github 的 Webhook,以获取新的 PR,并如下所示创建开发管道:

在这里插入图片描述

  • 对于开发分支,启用了部署阶段,如果检查 Blue Ocean 的构建流程,则可以看到所有阶段都已成功触发:

在这里插入图片描述

七、对多分支管道进行故障排除

  • 分支发现问题:有时,即使在 SCM 中创建了新分支之后,它也可能不会反映在 Jenkins 管道中,可以尝试运行“立即扫描存储库”选项以再次扫描存储库,另外检查管道中的存储库扫描配置。
  • Webhooks 不会触发管道:当 Webhook 没有触发管道时,请检查 Github 中的 Webhook 交付状态代码和错误。另外,请检查 Jenkins URL 是否正确。
  • 还要从 Manage Jenkins-> System Logs-> All Jenkins 日志中检查 Jenkins 日志,如果 Jenkins 能够接收 Webhook,则日志应显示未触发作业的原因。

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

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

相关文章

Https中间人攻击

Https中间人攻击 https协议由 http ssl 协议构成,具体的链接过程可参考SSL或TLS握手的概述 中间人攻击过程如下: 服务器向客户端发送公钥。攻击者截获公钥,保留在自己手上。然后攻击者自己生成一个【伪造的】公钥,发给客户端。…

【Ubuntu】【grpc】grpc接口测试的工具--BloomRPC

目录 1下载 2 安装 3 使用 1下载 下载地址:https://github.com/bloomrpc/bloomrpc/releases 从地址下载选择你需要对应的版本,例如:bloomrpc_1.5.3_amd64.deb 2 安装 双击bloomrpc_1.5.3_amd64.deb文件直接安装。

【无标题】mysql 截取两个,之间字符串

截取两个,之间字符串 select area,SUBSTRING_INDEX(et.area,,,1) as XZQH1,if(length(et.area)-length(replace(et.area,,,))>1,SUBSTRING_INDEX(SUBSTRING_INDEX(et.area,,,2),,,-1),NULL) AS XZQH2,if(length(et.area)-length(replace(et.area,,,))>2,SUBS…

【后端速成 Vue】初识指令(上)

前言&#xff1a; Vue 会根据不同的指令&#xff0c;针对标签实现不同的功能。 在 Vue 中&#xff0c;指定就是带有 v- 前缀 的特殊 标签属性&#xff0c;比如&#xff1a; <div v-htmlstr> </div> 这里问题就来了&#xff0c;既然 Vue 会更具不同的指令&#…

简述TCP三次握手,四次挥手

前言&#xff1a; 通常大多数认为三次握手、四次挥手是HTTP协议产生的。这是一个错误的认知&#xff0c;实际上HTTP协议并不参与握手以及挥手过程&#xff0c;三次握手四次挥手均是在TCP协议层上进行的&#xff0c;而HTTP协议只是在已建立 TCP连接的基础上&#xff0c;进行通信…

软考中级软件评测师考什么?

软件评测师属于软考中级&#xff0c;考试没有软考高级难度大&#xff0c;但是会比软考初级要难&#xff0c;所以想要通过软件评测师考试还是需要花时间备考的。 软件评测师上午考试为基础知识&#xff0c;下午考试为应用技术。 基础知识考试题型为客观选择题&#xff0c;相对…

沉浸式体验与 AI 数智助理一起工作的一天

在当今商业世界中&#xff0c;人工智能、数据分析和指标管理已经成为企业持续成功不可或缺的一环。当你配备了一个 AI 数智助理之后&#xff0c;日常的工作又会受到什么影响呢&#xff1f;快来和我们一起沉浸式体验“连锁企业区域总监”与 AI 数智助理一起工作的一天吧&#xf…

【Linux初阶】信号入门2 | 信号阻塞、捕捉、保存

文章目录 ☀️前言☀️一、信号阻塞&#x1f33b;1.信号其他相关常见概念&#x1f33b;2.信号在内核中的表示 ☀️二、信号捕捉&#xff08;重点&#xff09;&#x1f33b;1.用户态 & 内核态&#x1f33b;2.如何判断进程处于用户态或内核态&#x1f33b;3.OS接口的访问方法…

板子接线图

1.ST-LINK V2接线 2.对抗板子刷蓝牙固件 接USB转TTL&#xff0c;用镊子短接两个孔 2.对抗板子用串口测试蓝牙AT命令 短接白色箭头&#xff0c;接TX&#xff0c;RX&#xff0c;电源

【已解决】:该该虚拟机似乎正在使用中。如果该虚拟机未在使用,请按“获取所有权(T)“按钮获取它的所有权。否则,请按“取消(C)“按钮以防损坏。

现象 启动VMware虚拟机&#xff0c;无法正常打开并出现以下信息&#xff1a; 原因 这是因为当运行一个“虚拟系统”时&#xff0c;为防止该系统被另外一个VMware程序打开&#xff0c;导致数据被修改或损坏&#xff0c;VMware会自动在该“虚拟系统”所在的文件夹下&#xff0c…

微信小程序 工具使用(HBuilderX)

微信小程序 工具使用:HBuilderX 一 HBuilderX 的下载二 工具的配置2.1 工具 --> 设置 --> 运行配置2.1.1 微信开发者工具路径2.1.2 node 运行配置 2.2 插件 工具 --> 插件安装2.2.1 下载插件 三 微信小程序端四 同步运行五 BUG5.1 nodemon在终端无法识别 一 HBuilderX…

前端面试题: 请解释什么是函数的作用域?

今天做到了一道题&#xff1a;请解释什么是函数的作用域&#xff1f; 我给的答案是&#xff1a; 函数的作用域是指函数执行到内部后创建的数据空间&#xff0c;在函数的作用域内&#xff0c;let定义的变量的有效期为函数作用域 AI觉得我答得比较简单&#xff1a;回答基本正确&…

使用 OpenWRT 设置 Banana Pi BPI-R3开源硬件路由器

这里介绍如何使用 pfSense 将ZimaBoard 216设置为防火墙的链接。我们正在为小型板计算机建立一个专用网络&#xff0c;这样当我开始教授 Linux 时&#xff0c;我就可以显示和共享它的 IP。 现在为我的网络设置一条到 pfSense 后面的路由。这是为了提供另一个级别的安全性。我有…

Ubuntu22.04 vnc远程黑屏

一、原因 原因是Ubuntu22.04使用的gnome启用了Wayland。vnc、teamviewer、向日葵、todesk等均无法使用或者远程黑屏等。 简单的说vnc、teamviewer、向日葵、todesk等均基于xorg实现&#xff08;xorg太流行&#xff09;&#xff0c;并不兼容Wayland&#xff0c;所以vnc无法正常…

权限提升Linux篇

提权工具 https://github.com/liamg/traitor https://github.com/AlessandroZ/BeRoot https://github.com/rebootuser/LinEnum https://github.com/mzet-/linux-exploit-suggester https://github.com/sleventyeleven/linuxprivchecker https://github.com/jondonas/linux…

DirectX12架构理解

无它&#xff0c;一图而已

Python - FastAPI 实现 get、post 请求

目录 一.引言 二.FastAPI Server 构建 1.get - read_items 2.post - create_item 3.uvicorn - run_app 三.Postman 请求 1.post - create_item 2.get - read_items 四.Requests 请求 1.post - create_item 2.get - read_items 五.总结 一.引言 前面介绍了 LLM 的相…

前端解决页面访问总是自动弹出 浏览器的 翻译此页 问题

今天克隆了一个项目下来 结果 浏览器自带的 翻译此页总会默认弹出 还一直以为是js设置的 结果最后才发现 这是个基础设置 在于 html标签的 lang 属性 这里设置了 en 他就会每次启动都弹出来 只需要改成langzh-CN 再次运行 就不会在弹出来了

恒合仓库 - 商品管理模块、上传照片、添加采购单、添加出库单、商品分类

商品管理模块 文章目录 商品管理模块一、分页查询商品1.1 实体类1.1.1 Store 仓库1.1.2 Brand 品牌1.1.3 ProductType 商品分类1.1.4 Supply 供应商1.1.5 Place 产地1.1.6 Unit 单位1.1.7 Product 商品 1.2 查询所有仓库1.2.1 Mapper1.2.2 Service1.2.3 Controller1.2.4 效果图…

基于宏基因组的功能挖掘:碳水化合物活性酶(CAZymes)注释

基于宏基因组数据&#xff0c;可以通过NR数据库进行物种注释&#xff0c;还可以进行功能挖掘&#xff0c;比如通过KEGG数据库来挖掘代谢通路、根据COG注释结果对蛋白进行功能归类&#xff0c;通过CAzyme可以得到碳化合物合成、代谢、转运等酶的分类和相关信息&#xff0c;通过P…