jenkins流水线常规配置教程!
Jenkins流水线是在工作中实现CI/CD常用的工具。以下是一些我在工作和学习中总结出来常用的一些流水线配置:变量需要加双引号括起来 "${main}"
一 引用无账号的凭据
使用变量方式引用,这种方式只适合只由密码,没有用户名的凭证。例如:token。
pipeline {agent anytools {maven 'maven-3.9.6'}environment {// 将凭据定义成变量K8spass = credentials('k8s-service-passwd')}stages {stage('source') {steps {//使用变量就可以了echo"${K8spass}"}}}
}
二 用户名和密码的凭据
此处实例是登陆harbor仓库的。
-
withCredentials
引用凭证,可将凭证中的密码和账号分开定义,后面登陆时候分别引用。
-
credentialsId
凭证的ID。
steps {withCredentials([usernamePassword(credentialsId: 'harbor-password', \passwordVariable: 'harborUserPassword', usernameVariable: 'harborUserName')]) {sh "echo ${harborUserPassword} | docker login -u ${harborUserName} --password-stdin XXXXXsh "docker image push harbor.ly01.com/registy/helloword:${BUILD_NUMBER} }}
三 git的使用
git branch: 'main', credentialsId: 'gitee-password-credential', url: 'https://gitee.com/XXXXX.git'
四 发布时暂停下载等待用户确认
pipeline {agent anystages {stage('Hello') {steps {input "是否确认发布?"}}}
}
效果图:
五 条件式判断
when一般写在stage里。当when判断符合条件才会执行stage里其他的内容。
//tag为v1.0则符合条件
when { tag "v1.0" }//not为反向判单
when { not { branch 'master' } }//allOf:当所有条件都满足时符合判断条件
when { allOf {branch 'master';environment name:'tag',valume:'v1.0'} }//anyOf:只要符合其中一个条件就符合,或关系
when { anyOf {branch 'master';branch 'staging'} }
六 实现webhook自动触发
需要gitlab ,generic webhook trigger插件。
下面实例表示push和merge时候会触发:
secretTocken:可自定义的token。
最后定义gitlab的webhook即可。
配置完要执行一遍,然后就会看到流水线里会自动配置了webhook的配置内容(和UI配置的内容一样)。
pipeline {agent anytriggers {gitlab(triggerOnPush: true,triggerOnMergeRequest: true,branchFilterType: 'All',addVoteOnMergeRequest: true,secretToken: 'XXXXXXXXXXXXXXXXXXXXXXXX')}stages {stage('Hello') {steps {input"是否确认发布?"}}}
}triggers {GenericTrigger(genericVariables: [[key: 'ref', value: '$.ref']],token: 'xxxxxxxx',causeString:'Triggered on ${ref}',printContributedVariables: true,printPostContent: true)}
后面只需要将Token存放到gitlab中即可完成webhook.
gitlab配置的URL:
http://jenkins.ly01.com/generic-webhook-trigger/invoke?token=↑
七 分布式构建
需要事先准备好环境:
//根据标签指定在哪个服务器上执行。可在pipeline中指定,也可在stage下添加
agent { label 'linux-jnlp-agent' }//指定不同的构建方式
agent any|none|label{}|docker{}|kubernetes{}
7.1 docker分布式
需要安装docker-pipeline和docker:
agent {docker {image 'eclipse-temurin:17-jre-alpine'label 'master'}
}
7.2 kubenetes分布式
需要安装kubenetes。并添加了clouds的k8s环境:
pipeline {agent {kubernetes {//指定配置的pod模板名称inheritFrom 'kube-agent'}}stages {stage('test') {steps {//固定格式写如container('jnlp')container('jnlp') {sh 'java -version'}}}
7.3 多容器分布式构建
在jenkins的k8s中添加多个pod模板。然后在流水线中引用容器列表的名称即可。
pipeline {agent {kubernetes {inheritFrom 'kube-maven'}}stages {stage('test') {steps {container('jnlp') {sh'java -version'}}}stage('test maven') {steps {//名称为容器列表的自定义名称container('maven') {sh'mvn -version'}}}}
}
7.4 实现pod的配置持久化
因为pod在构建完成后就会被销毁。maven等配置每次都要重新拉取类库。所以需要将这些配置持久化。
这里采用pv-pvc的方式。
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc-maven-cache
namespace: jenkins
spec:
accessModes:- ReadWriteMany
resources:requests:storage: 10Gi
storageClassName: nfs-csi
在jenkins中配置pvc的挂载:
八 构建完成后的通知操作
注:需要安装钉钉插件和企业微信插件,全局的钉钉配置请看图形化。
post{success{qyWechatNotification failNotify: true, webhookUrl: 'https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxxxxx'}failure{qyWechatNotification failNotify: true, webhookUrl: 'https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxxxxx'}}post {always {dingtalk(robot: 'dingtalk',type: 'TEXT',text: ["Status of pipeline: ${currentBuild.fullDisplayName}","${env.BUILD_URL} has result ${currentBuild.result}."])}}post {always|failure|success|unstable|aborted|... {}
}
相关文章:

jenkins流水线常规配置教程!
Jenkins流水线是在工作中实现CI/CD常用的工具。以下是一些我在工作和学习中总结出来常用的一些流水线配置:变量需要加双引号括起来 "${main}" 一 引用无账号的凭据 使用变量方式引用,这种方式只适合只由密码,没有用户名的凭证。例…...
Java中序列化和反序列化的理解
基本概念 序列化(Serialization)是将对象的状态信息转换为可以存储或传输的形式的过程,而反序列化(Deserialization)则是将这种形式重新转换为对象的过程。 核心作用 持久化存储:将对象状态保存到文件或数据库中 网络传输:在网络间传递对象…...

基于OpenCV的SIFT特征和FLANN匹配器的指纹认证
文章目录 引言一、概述二、代码解析1. 图像显示函数2. 核心认证函数2.1 创建SIFT特征提取器2.2 检测关键点和计算描述符(源图像)2.3 检测关键点和计算描述符(模板图像)2.4 创建FLANN匹配器2.5 使用K近邻匹配 3. 匹配点筛选4. 认证…...
零基础学Java——第十一章:实战项目 - 桌面应用开发(JavaFX入门)
第十一章:实战项目 - 桌面应用开发(JavaFX入门) 欢迎来到我们实战项目的桌面应用开发部分!在前面的章节中,我们可能已经接触了Swing。现在,我们将目光投向JavaFX,一个更现代、功能更丰富的用于…...
Milvus 视角看主流嵌入式模型(Embeddings)
嵌入是一种机器学习概念,用于将数据映射到高维空间,其中语义相似的数据被紧密排列在一起。嵌入模型通常是 BERT 或其他 Transformer 系列的深度神经网络,它能够有效地用一系列数字(称为向量)来表示文本、图像和其他数据…...

leetcode:58. 最后一个单词的长度(python3解法)
难度:简单 给你一个字符串 s,由若干单词组成,单词前后用一些空格字符隔开。返回字符串中 最后一个 单词的长度。 单词 是指仅由字母组成、不包含任何空格字符的最大子字符串。 示例 1: 输入:s "Hello World"…...

虹科应用 | 探索PCAN卡与医疗机器人的革命性结合
随着医疗技术的不断进步,医疗机器人在提高手术精度、减少感染风险以及提升患者护理质量方面发挥着越来越重要的作用。医疗机器人的精确操作依赖于稳定且高效的数据通信系统,虹科提供的PCAN四通道mini PCIe转CAN FD卡,正是为了满足这一需求而设…...

entity线段材质设置
在cesium中,我们可以改变其entity线段材质,这里以直线为例. 首先我们先创建一条直线 const redLine viewer.entities.add({polyline: {positions: Cesium.Cartesian3.fromDegreesArray([-75,35,-125,35,]),width: 5,material:material, 保存后可看到在地图上创建了一条线段…...

[STM32] 5-1 时钟树(上)
文章目录 前言5-1 时钟树(上)时钟树的基本介绍时钟树的基本结构大树和小树频率运算简介计数器和分频STM32内部结构树的结构于关键节点SYSCLK(System Clock) 系统时钟 72M maxHCLK(AHB Clock) AHB时钟 36M maxPLCK(APB1 Clock) APB1时钟 36M maxPLCK2(APB…...

【Linux网络与网络编程】12.NAT技术内网穿透代理服务
1. NAT技术 之前我们说到过 IPv4 协议中IP 地址数量不充足的问题可以使用 NAT 技术来解决。还提到过本地主机向公网中的一个服务器发起了一个网络请求,服务器是怎么将应答返回到该本地主机呢?(如何进行内网转发?) 这就…...
【HTTPS基础概念与原理】TLS握手过程详解
以下是 TLS握手过程的详细拆解,涵盖客户端与服务器之间的关键交互步骤,包括ClientHello、ServerHello、证书验证、密钥交换等核心阶段,并对比TLS 1.2与TLS 1.3的差异: 一、TLS握手的核心目标 协商协议版本:确定双方支…...

从辅助到协作:GitHub Copilot的进化之路
如果说现代程序员的标配工具除了VS Code、Stack Overflow之外,还有谁能入选,那一定是GitHub Copilot。从2021年首次亮相,到如今深度集成进开发者日常流程,这个“AI编程助手”已经不只是写几行自动补全代码的小帮手了,而…...

Linux运行时的参数、命令、网络、磁盘参数和日志监控
一、监控 1. free 功能:用于查看系统内存使用情况,包括物理内存总量、已用内存、空闲内存、缓冲区(buffer)和缓存(cache)占用,以及交换内存(swap)的使用与剩余情况。常…...

鸿蒙页面布局入门
本文以仿猫眼电影M站首页布局为案例,展示ArkUI在实际开发中的应用。内容包括案例效果及相关知识点,深入解析布局框架以及头部、脚部、内容区域的构建思路与代码实现,最后提供完整代码和教程资源,助力你强化实践能力。 1. 案例效果…...
VTK|类似CloudCompare的比例尺实现2-vtk实现
文章目录 实现类头文件实现类源文件调用逻辑关键问题缩放限制问题投影模式项目git链接实现类头文件 以下是对你提供的 ScaleBarController.h 头文件添加详细注释后的版本,帮助你更清晰地理解每个成员和方法的用途,尤其是在 VTK 中的作用: #ifndef SCALEBARCONTROLLER_H #de…...

阿里巴巴开源移动端多模态LLM工具——MNN
MNN 是一个高效且轻量级的深度学习框架。它支持深度学习模型的推理和训练,并在设备端的推理和训练方面具有行业领先的性能。目前,MNN 已集成到阿里巴巴集团的 30 多个应用中,如淘宝、天猫、优酷、钉钉、闲鱼等,覆盖了直播、短视频…...

【漫话机器学习系列】256.用 k-NN 填补缺失值
用 k-NN 填补缺失值:原理、实现与应用 在实际的数据科学项目中,我们经常会遇到数据缺失(Missing Values)的问题。缺失值如果处理不当,不仅会影响模型训练,还可能导致最终结果偏差。 今天,我们…...
React组件(一):生命周期
文章目录 组件的生命周期生命周期的阶段1、组件创建阶段2、组件运行阶段3、组件销毁阶段 组件生命周期的执行顺序 组件的生命周期 在组件创建、到加载到页面上运行、以及组件被销毁的过程中,总是伴随着各种各样的事件,这些在组件特定时期,触…...

金格iWebOffice控件在新版谷歌Chrome中不能加载了怎么办?
金格iWebOffice控件是由江西金格网络科技有限责任公司开发的中间件软件,主要用于在浏览器中直接编辑Word、Excel、PowerPoint等Office文档,曾经是一款优秀国产的WebOffice插件。 由于2022年Chrome等浏览器取消支持PPAPI接口,导致这款金格iWe…...

实验6分类汇总
设计性实验 (1)查询每门课程的平均分,包括课程号和平均分。 SELECT Cno AS 课程号, AVG(Degree) AS 平均分 FROM Score065 GROUP BY Cno;(2)查询每门课程的平均分,包括课程号、课程名和平均分。 SELECT c.Cno AS 课程号, c.Cname AS 课程名, AVG(sc.Degree) AS 平均分 FROM …...

如何通过交流沟通实现闭环思考模式不断实现自身强效赋能-250517
感谢一直以来和我交流沟通的朋友们。 闭环思考 文字部分(25-05-04)这一天是青年节,在这一天与青年朋友交流这个是事先规划好的: “可以猜一猜,博士会被撤销吗?导师会被处理吗?千万不要回复,放心里,过段时间看结果,看看自己预估社会能力如何。 观察社会新闻,可以用…...

Python 3.11详细安装步骤(包含安装包)Python 3.11详细图文安装教程
文章目录 前言Python 3.11介绍Python 3.11安装包下载Python 3.11安装步骤 前言 作为当前最热门的编程语言之一,Python 3.11 不仅拥有简洁优雅的语法,还在性能上实现了飞跃,代码运行速度提升显著。无论是初入编程的小白,还是经验丰…...
[深度解析] 服务器内存(RAM)演进之路(2025):DDR5 vs HBM vs CXL 内存技术与选型指南
更多服务器知识,尽在hostol.com 嘿,各位服务器“发烧友”和技术决策者们!咱们在聊服务器配置的时候,CPU(大脑)、硬盘(仓库)、带宽(道路)这些“大件儿”总是备…...
C语言输入函数对比解析
目录 C语言输入函数全家福(和它们的秘密)fgetsgetsscanfgetcharfscanf函数对比表灵魂总结 哈哈,看来你正在和C语言的输入函数们玩“大家来找茬”!放心,我会用最接地气的方式给你讲明白,保证比看《甄嬛传》还…...
【Java-EE进阶】SpringBoot针对某个IP限流问题
目录 简介 1. 使用Guava的RateLimiter实现限流 添加Guava依赖 实现RateLimiter限流逻辑 限流管理类 控制器中应用限流逻辑 2. 使用计数器实现限流 限流管理类 控制器中应用限流逻辑 简介 针对某个IP进行限流以防止恶意点击是一种常见的反爬虫和防止DoS的措施。限流策…...

一个指令,让任意 AI 快速生成思维导图
大家好,我是安仔,一个每天都在压榨 AI 的躺平打工人。 今天分享一个 AI 办公小技巧,让你用一个指令让 AI 生成思维导图。 DeepSeek、Kimi、豆包都可以哈 ~ KimiXMind 安仔经常用 XMind 来绘制思维导图,但是 AI 是没…...
随言随语(十二):盖章
给自己的机器学习生涯做个总结盖个章,讲述下如何跟机器学习擦肩而过的,鉴于当前深度学习和大模型已经走出来的路及理论知识的入门难度,可能以后跟机器学习前沿科技就再没有交集了; 最近也看了马占凯的《ChatGPT:人类新…...

FPGA图像处理(六)------ 图像腐蚀and图像膨胀
默认迭代次数为1,只进行一次腐蚀、膨胀 一、图像腐蚀 1.相关定义 2.图像腐蚀效果图 3.fpga实现 彩色图像灰度化,灰度图像二值化,图像缓存生成滤波模块(3*3),图像腐蚀算法 timescale 1ns / 1ps // // Des…...
Spring三级缓存的作用与原理详解
在Spring框架中,Bean的创建过程涉及到了三级缓存机制。这个机制主要是为了提高单例模式下bean实例化和依赖注入的效率。本文将深入探讨Spring中的三级缓存,以及其在bean生命周期中的重要作用。 首先,让我们理解什么是三级缓存。Spring中的三…...

LVDS系列12:Xilinx Ultrascale系可编程输入延迟(二)
本节讲解Ultrascale IDELAYE3的参数; IDELAYE3参数: REFCLK_FREQUENCY:如果使用COUNT模式,保持300MHz的默认值即可; 如果使用TIME模式,则该值与IDELAYCTRL参考时钟要匹配; DELAY_SRC&#…...