当前位置: 首页 > 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;这里…...

谷歌浏览器插件

项目中有时候会用到插件 sync-cookie-extension1.0.0&#xff1a;开发环境同步测试 cookie 至 localhost&#xff0c;便于本地请求服务携带 cookie 参考地址&#xff1a;https://juejin.cn/post/7139354571712757767 里面有源码下载下来&#xff0c;加在到扩展即可使用FeHelp…...

Prompt Tuning、P-Tuning、Prefix Tuning的区别

一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...

Qt Http Server模块功能及架构

Qt Http Server 是 Qt 6.0 中引入的一个新模块&#xff0c;它提供了一个轻量级的 HTTP 服务器实现&#xff0c;主要用于构建基于 HTTP 的应用程序和服务。 功能介绍&#xff1a; 主要功能 HTTP服务器功能&#xff1a; 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...

vue3+vite项目中使用.env文件环境变量方法

vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量&#xff0c;这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...

【Oracle】分区表

个人主页&#xff1a;Guiat 归属专栏&#xff1a;Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...

laravel8+vue3.0+element-plus搭建方法

创建 laravel8 项目 composer create-project --prefer-dist laravel/laravel laravel8 8.* 安装 laravel/ui composer require laravel/ui 修改 package.json 文件 "devDependencies": {"vue/compiler-sfc": "^3.0.7","axios": …...

安卓基础(aar)

重新设置java21的环境&#xff0c;临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的&#xff1a; MyApp/ ├── app/ …...

React---day11

14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store&#xff1a; 我们在使用异步的时候理应是要使用中间件的&#xff0c;但是configureStore 已经自动集成了 redux-thunk&#xff0c;注意action里面要返回函数 import { configureS…...

安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)

船舶制造装配管理现状&#xff1a;装配工作依赖人工经验&#xff0c;装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书&#xff0c;但在实际执行中&#xff0c;工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...

c# 局部函数 定义、功能与示例

C# 局部函数&#xff1a;定义、功能与示例 1. 定义与功能 局部函数&#xff08;Local Function&#xff09;是嵌套在另一个方法内部的私有方法&#xff0c;仅在包含它的方法内可见。 • 作用&#xff1a;封装仅用于当前方法的逻辑&#xff0c;避免污染类作用域&#xff0c;提升…...