当前位置: 首页 > news >正文

在Google Kubernetes集群创建分布式Jenkins(二)

上一篇博客在Google Kubernetes集群创建分布式Jenkins(一)-CSDN博客我介绍了如何在GCP的K8S集群上部署一个分布式的Jenkins,并实现了一个简单的Pipeline的运行。

在实际的开发中,我们通常都会按照以下的CICD流程来设置Pipeline

在我司的实际实践中,通常包括如下的步骤:

  1. 往Git仓库提交开发分支的代码,创建Pull request来进行code review
  2. Git仓库配置hook,当收到PR时触发jenkins任务,拉取代码到Jenkins进行编译和UT检查
  3. Jenkins把UT检查结果回写到PR的comments,如果UT检查通过,自动Approve+1
  4. 当其他人对PR的code review完成,Approve+2,自动合并代码到主分支。
  5. 合并到主分支触发Jenkins的打包任务,Jenkins拉取主分支代码运行打包任务
  6. 打包任务完成后,把打包的镜像推送到registry
  7. 更新部署的manifest,更新镜像的标签
  8. 把应用部署到GKE

这里我将按照以上任务来设置相应的pipeline

Jenkins安装插件

要完成以上的任务,我们需要安装以下的一些插件

Generic webhook trigger plugin

Github plugin

Credential binding plugin

Git仓库设置webhook

我选择GitHub作为示例,在github上建立一个简单的Java Springboot项目,实现一个rest接口,完成一个简单的计算任务,代码仓库在https://github.com/gzroy/webdemo.git。在这个repo的页面上,点击Settings->webhooks,然后选择添加webhook,在Payload URL里面输入jenkins URL,例如我的Jenkins URL是http://123.123.123.123/jenkins/generic-webhook-trigger/invoke?token=abc,ContentType选择application/json,然后点击“Let me select individual events”,选择触发hook的事件。这里我选择Pull request。

设置CICD项目

因为我打算以后其他项目都统一用这个CICD的流程,所以新建一个CICD的项目,把所需要的Jenkins pipeline的代码都放到这个项目中。以后其他项目只需要引用这个项目的相关文件即可完成CICD的任务。代码仓库在https://github.com/gzroy/cicd.git

创建PR自动触发测试的Pipeline

我们要实现的功能是,当开发者新建一个分支,修改完代码,commit提交并创建PR之后,应该要自动触发CI的pipeline来进行UT测试,并把测试结果写到PR的comments里面,这样其他reviewer可以查看这个测试的结果。

在CICD项目里面,我新建了一个ut_pipeline.groovy文件,内容如下:

pipeline {agent{kubernetes{yaml '''apiVersion: v1kind: Podspec:containers:- name: mavenimage: maven:3.8.3-openjdk-17tty: trueimagePullPolicy: "IfNotPresent"command:- cat'''}}triggers {GenericTrigger(genericVariables: [[key: 'action', value: '$.action', expressionType: 'JSONPath'],[key: 'clone_url', value: '$.pull_request.base.repo.clone_url', expressionType: 'JSONPath'],[key: 'ref', value: '$.pull_request.head.ref', expressionType: 'JSONPath'],[key: 'sha', value: '$.pull_request.head.sha', expressionType: 'JSONPath'],[key: 'number', value: '$.number', expressionType: 'JSONPath'],[key: 'comments_url', value: '$.pull_request.comments_url', expressionType: 'JSONPath']],token: 'abc')}environment {CREDENTIAL = credentials("${CREDENTIAL_ID}")}stages{stage("git checkout") {when {expression {return action=="opened" || action=="synchronize"}}steps {script {git(url: clone_url,credentialsId: CREDENTIAL_ID,branch: ref)}}}stage("test"){when {expression {return action=="opened" || action=="synchronize"}}steps{container('maven') {script{sh 'mvn test '}}}post {failure {sh """(curl -L -X POST \-H \"Accept: application/vnd.github+json\" \-H \"Authorization: Bearer ${env.CREDENTIAL_PSW}\" \-H \"X-GitHub-Api-Version: 2022-11-28\" \${comments_url} \-d \'{\"body\": \"UT test failure for commit ${sha}\"}\')"""}success {sh """(curl -L -X POST \-H \"Accept: application/vnd.github+json\" \-H \"Authorization: Bearer ${env.CREDENTIAL_PSW}\" \-H \"X-GitHub-Api-Version: 2022-11-28\" \${comments_url} \-d \'{\"body\": \"UT test success for commit ${sha}\"}\')"""}}}}
}

解释一下这个程序。在Agent模块里面定义了一个运行Jenkins Agent的Pod,其中container除了默认的agent container之外,还包括一个maven container,在test这个stage里面,将运行这个maven container的mvn test命令来执行UT测试。

在triggers模块中,定义了GenericTrigger从webhook的回调API中获取body的数据,把其中需要的数据赋值到变量,给后续的stage使用。

在environment模块中,定义了一个名为CREDENTIAL的全局变量,通过credentials helper函数来获取Jenkins保存的凭证,这里的CREDENTIAL_ID是在Jenkins System里面定义的全局变量。注意这里必须要加上双引号,使得Groovy可以预先用Jenkins变量的值来替代这个变量,如果用单引号则不行。

在Stages模块中,定义了两个Stage,这两个操作都是当PR新建或已有PR上发生新的commit时才执行。第一个Stage执行从Github仓库checkout的操作。第二个Stage是执行maven测试,在Post里面定义了测试成功或失败,需要给PR加上相应的comment。这里都使用了Github API来进行操作,我们需要预先把Github用户的access token保存到Jenkins的credentials中。

PR review approve自动触发打包的pipeline

创建一个package_pipeline.groovy的文件,当收到Webhook回调时,判断如果是approve的事件,那么将自动执行合并代码分支到主分支的操作,然后拉取主分支的代码进行package,并进行Docker构建,然后把镜像推送到相应的registry。

待补充

部署镜像的pipeline

采用Gitops的方式来部署。

待补充

设置Pipeline

回到Jenkins的控制台,新建一个webdemo_ut的Job,选择Pipeline类型,然后在Github项目里面填入https://github.com/gzroy/webdemo.git,在构建触发器里面选择Generic Webhook Trigger,Token也要填上,这个Token需要和Github配置webhook的token一致。定义Pipeline里面选择Pipeline script from SCM,填入CICD项目的地址和Script文件的路径,Branch to build里面输入*/*,然后保存即可。

之后我们在https://github.com/gzroy/webdemo.git这个项目上可以执行新建分支,然后改动代码,提交之后创建一个PR,可以看到Jenkins将自动触发一个任务,进行测试后把结果回写到PR的comments中。

新建一个webdemo_package的job,配置和上面类似,只是pipeline script选择package_pipeline.groovy文件。当我们Approve PR review之后,可以看到Jenkins将自动触发package任务,生成镜像并推送到registry。

总结

以上就是设置一个自动触发Jenkins任务的CICD流程。

相关文章:

在Google Kubernetes集群创建分布式Jenkins(二)

上一篇博客在Google Kubernetes集群创建分布式Jenkins(一)-CSDN博客我介绍了如何在GCP的K8S集群上部署一个分布式的Jenkins,并实现了一个简单的Pipeline的运行。 在实际的开发中,我们通常都会按照以下的CICD流程来设置Pipeline 在我司的实际实践中&…...

GEE:GEE中调用 Math.js 教程

作者:CSDN @ _养乐多_ Math.js 是一个强大的 JavaScript 数学库,它提供了大量用于数学计算的函数和工具。这个库可用于解决各种数学问题,从基本的算术运算到高级数学和线性代数等领域。本文将介绍在 Google Earth Engine(GEE)云平台中调用 Math.js 第三方库做一些事情的方…...

迅为龙芯3A5000主板,支持PCIE 3.0、USB 3.0和 SATA 3.0显示接口2 路、HDMI 和1路 VGA,可直连显示器

性能强 采用全国产龙芯3A5000处理器,基于龙芯自主指令系统 (LoongArch)的LA464微结构,并进一步提升频率,降低功耗,优化性能。 桥片 桥片采用龙芯 7A2000,支持PCIE 3.0、USB 3.0和 SATA 3.0显示接口2 路、HDMI 和1路 …...

Opencv for unity 下载

GitHub - EnoxSoftware/VideoPlayerWithOpenCVForUnityExample: This example shows how to convert VideoPlayer texture to OpenCV Mat using AsyncGPUReadback. OpenCV for Unity | Integration | Unity Asset Store...

独立IP主机怎么样?对网站有什么影响

对于现在企业来说,搭建网站是必不可少的,而大部分企业网站都会选择使用虚拟主机搭建,且使用的也是共享IP的这样会 有许多的弊端,所以部分站长会选择独立IP搭建。那么到底独立IP主机怎么样呢?使用独立IP主机搭建对网站有…...

Gerrit lfs安装及配置

Gerrit版本:3.1.4 lfs下载:Zuul Gerrit CI界面已经没有3.1.4对应版本的lfs.jar了,需要从上面的页面下载。 一、安装配置lfs 将上面下载的lfs.jar放到$GERRIT_SITE/plugins目录。 修改配置文件:$GERRIT_SITE/etc/gerrit.config …...

基于表面电势的AlGaN/GaN MODFET紧凑模型

标题:A Surface-Potential-Based Compact Model for AlGaN/GaN MODFETs 来源:IEEE TRANSACTIONS ON ELECTRON DEVICES(11年) 摘要 - 本文首次构建了基于表面势(SP)的AlGaN/GaN调制掺杂场效应晶体管&#…...

c语言中的fread

#include <stdio.h> //函数的定义&#xff1a; //size_t fread(void *ptr,size_t nmemb,FILE *stream); //函数的说明&#xff1a; //fread函数从stream所标示的文件中读取数据&#xff0c;一块是size个字节&#xff0c;共nmemb块&#xff0c;存放到ptr指向的内存里 …...

Unity游戏开发基础组件

Unity2D 相机调整&#xff1a;Projection设置为Orthographic。也就是正交模式&#xff0c;忽视距离。 资源&#xff1a; Sprite&#xff1a;一种游戏资源&#xff0c;在2D游戏中表示角色场景的图片资源 SpriteSheet&#xff1a;切割一张图片为多个Sprite 在Sprite Editor中可以…...

股票四倍杠杆什么意思?

股票四倍杠杆是指投资者通过借款或使用金融衍生品&#xff0c;以增加其投资股票的能力&#xff0c;达到放大投资回报的目的。具体来说&#xff0c;投资者可以通过向券商或银行等金融机构借入资金&#xff0c;或者使用融资融券等金融衍生品&#xff0c;以增加其购买股票的资本&a…...

【hcie-cloud】【2】华为云Stack解决方案介绍、缩略语整理 【下】

文章目录 华为文档获取方式、云计算发展背景、坚实基座华为云Stack&#xff0c;政企只能升级首选智能数据湖仓一体&#xff0c;让业务洞见更准&#xff0c;价值兑现更快MRS&#xff1a;一个架构可构建三种数据湖&#xff0c;业务场景更丰富离线数据湖&#xff1a;提供云原生、湖…...

多无人机在线路径规划的新算法

南京航空航天大学自动化学院使用NOKOV度量动作捕捉系统获取多架无人机的精确位置信息&#xff0c;实现多架无人机协同实时路径规划。 研究背景 近年来&#xff0c;无人机越来越多地应用于执行战场侦察、目标识别、跟踪打击等任务。 由多架无人机协同执行任务&#xff0c;通过…...

什么是运营商精准大数据?又有什么作用?

大数据&#xff08;big data&#xff09;&#xff0c;指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合&#xff0c;是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产。 精准大数据&#xff0c;是一种…...

Adobe Photoshop 2020给证件照换底

1.导入图片 2.用魔法棒点击图片 3.点选择&#xff0c;反选 4.选择&#xff0c;选择并遮住 5.用画笔修饰证件照边缘 6. 7.更换要换的底的颜色 8.新建图层 9.使用快捷键altdelete键填充颜色。 10.移动图层&#xff0c;完成换底。...

传来喜讯,优维又获奖了!!!

优维科技作为国内DevOps领域的行业领先企业&#xff0c;从诞生之日起&#xff0c;就一直致力于为中国企业提供一流的数字化运维服务&#xff0c;不断深耕核心技术&#xff0c;向客户提供专业强大的产品与服务。多年来&#xff0c;不仅获得了大量客户认可&#xff0c;更是屡次获…...

河南开放大学与电大搜题微信公众号:携手共进,助力学习之路

作为河南省内颇具影响力和声誉的高等教育机构之一&#xff0c;河南开放大学一直致力于提供优质的教育资源和灵活的学习方式&#xff0c;以满足广大学习者的需求。而在这个追求知识的时代&#xff0c;学习者们尤其需要一个便捷、高效的工具来辅助学习。电大搜题微信公众号应运而…...

【3D 图像分割】基于 Pytorch 的 VNet 3D 图像分割5(训练篇)

在本系列的开篇,就对整个项目训练所需要的所有模块都进行了一个简要的介绍,尤其是针对训练中需要引入的各个结构,进行一个串联操作。 而在之前的数据构建篇和网络模型篇中,都对其中的每一个组块进行了分别的验证,预先在未开始训练前,检验其中的正确性,避免到训练时候,…...

【开题报告】基于微信小程序的校园订餐平台的设计与实现

1.选题背景 基于微信小程序的校园订餐平台选题背景可以从以下几个方面展开阐述&#xff1a; &#xff08;1&#xff09;校园订餐现状&#xff1a;介绍当前大学校园内学生和教职工的就餐情况&#xff0c;包括饭堂就餐、外卖订餐等方式&#xff0c;以及存在的问题&#xff0c;如…...

C++ vector 动态数组的指定元素删除

文本旨在对 C 的容器 vector 进行肤浅的分析。 文章目录 Ⅰ、vector 的指定元素删除代码结果与分析 Ⅱ、vector 在新增元素后再删除指定元素代码结果与分析 Ⅲ、vector 在特定条件下新增元素代码结果与分析 参考文献 Ⅰ、vector 的指定元素删除 代码 #include <iostream&g…...

Python机器学习算法入门教程(第四部分)

接着Python机器学习算法入门教程&#xff08;第三部分&#xff09;&#xff0c;继续展开描述。 十九、信息熵是什么 通过前两节的学习&#xff0c;我们对于决策树算法有了大体的认识&#xff0c;本节我们将从数学角度解析如何选择合适的“特征做为判别条件”&#xff0c;这里…...

解决Linux蓝牙音频连接疑难杂症:BlueZ 5.50与PulseAudio 12.2常见报错分析与修复指南

Linux蓝牙音频深度排障指南&#xff1a;从协议栈原理到实战修复 当你满心欢喜地戴上蓝牙耳机&#xff0c;准备在Linux系统上享受音乐时&#xff0c;却发现设备明明显示已连接却死活不出声——这种挫败感我太熟悉了。作为经历过数十种蓝牙音频故障的老兵&#xff0c;我将在本文分…...

【企业级低代码落地白皮书】:基于VSCode的12类业务组件自动化配置标准(附Gartner认证配置模板)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;VSCode低代码插件的核心架构与企业适配原则 VSCode低代码插件并非传统IDE扩展的简单功能叠加&#xff0c;而是以“可组合式前端抽象层 声明式后端契约”为双核驱动的轻量级集成架构。其核心由三部分构…...

用友U8 ERP系统管理员必备:5个数据库清理锁定的SQL脚本(附详细操作步骤)

用友U8 ERP系统数据库锁定的深度解析与实战解决方案 作为企业核心业务支撑平台&#xff0c;用友U8 ERP系统在长期运行过程中难免会遇到各种数据锁定问题。这些锁定不仅影响日常业务流程&#xff0c;还可能造成关键操作中断&#xff0c;给企业运营带来不便。本文将深入剖析U8系统…...

哔咔漫画下载器:高性能多线程下载引擎深度解析

哔咔漫画下载器&#xff1a;高性能多线程下载引擎深度解析 【免费下载链接】picacomic-downloader 哔咔漫画 picacomic pica漫画 bika漫画 PicACG 多线程下载器&#xff0c;带图形界面 带收藏夹&#xff0c;已打包exe 下载速度飞快 项目地址: https://gitcode.com/gh_mirrors…...

从背板到风扇:拆解一台3U VPX加固机箱,聊聊军工级硬件的设计细节

从背板到风扇&#xff1a;拆解一台3U VPX加固机箱&#xff0c;聊聊军工级硬件的设计细节 军工级硬件设备的设计往往隐藏着普通消费电子产品难以企及的工程智慧。当我们拆开一台符合VITA46/65规范的3U VPX加固机箱&#xff0c;看到的不仅是金属外壳和电路板&#xff0c;更是一套…...

从比亚迪宋L到北京魔方:拆解国内已上市CMS车型,聊聊用户体验与真实痛点

从比亚迪宋L到北京魔方&#xff1a;拆解国内已上市CMS车型的真实用户体验 当北京魔方成为国内首款搭载CMS电子后视镜的量产车型时&#xff0c;汽车科技论坛里炸开了锅。一位ID为"极客老司机"的用户上传了夜间暴雨中行驶的视频——传统后视镜几乎失效的场景下&#xf…...

Neofetch配置文件深度解析:从英文到全中文,再到只显示你关心的系统指标

Neofetch配置文件深度解析&#xff1a;从英文到全中文&#xff0c;再到只显示你关心的系统指标 在终端里敲下neofetch命令后&#xff0c;系统信息以ASCII艺术形式优雅呈现的场景&#xff0c;已经成为技术爱好者们的某种仪式感。但当你第20次看到相同的显卡型号和内存占用率时&a…...

RK3399Pro外设不够用?手把手教你用XR21V1414IM48扩展USB串口(附完整驱动编译与测试代码)

RK3399Pro串口扩展实战&#xff1a;XR21V1414IM48芯片全流程开发指南 当你在RK3399Pro开发板上调试多个传感器或工业设备时&#xff0c;原生串口资源捉襟见肘的场景一定不陌生。上周我的团队在智能仓储机器人项目中就遇到了这个问题——需要同时连接激光雷达、机械臂控制器和PL…...

记录生活&学习Day15深度强化学习第十六集:Advantage Actor-Critic(A2C)

生活我让Y把我拉黑了&#xff0c;我们应该结束了&#xff0c;心里好难受&#xff0c;觉得很可惜&#xff0c;不知道怎么办...五一我想去找L但是她已经拒绝我三次了&#xff0c;那就不去了吧...我现在不知道怎么办了&#xff0c;什么也做不下去。...

C 盘突然爆满?一次彻底排查与迁移实战:从仅剩 12GB 到释放到 46GB

前言很多人都有一个误区&#xff1a; “软件安装到了 D 盘&#xff0c;C 盘就不会继续变大。”我之前也是这么认为的。 结果实际使用一段时间后&#xff0c;C 盘空间还是一路被吃掉&#xff0c;最后只剩下 12GB 左右&#xff0c;已经开始明显影响系统流畅度和开发环境使用。这次…...