pipeline开发笔记
pipeline开发笔记
- jenkins常用插件
- Build Authorization Token Root
- 配置GitLab的webhooks(钩子)
- 配置构建触发器--示例
- piblish over ssh
- Blue Ocean
- Workspace Cleanup Plugin
- Git插件
- Pipeline
- Localization: Chinese (Simplified) --中文显示
- Build Environment Plugin 显示构建过程中的变量
- Role-based Authorization Strategy
- Pipeline Stage View
- ThinBackup 备份插件
- vscode常用pipeline插件
- GroovyLint
- Jenkins Pipeline Linter Connector
- pipeline语法
- Parameters参数列表
- 多行shell锁定工作目录
- 改变工作目录
- Options
- post后置条件
- pipeline框架
- pipeline模块
- dockerfile模块
jenkins常用插件
Build Authorization Token Root
参考链接:https://blog.csdn.net/weixin_45310323/article/details/130237311
使用拥有 读取权限
的 匿名用户
访问,配置 钩子链接(webhook)
时需要用到, 如果不使用,每次访问链接都需要提供认证!
该插件的作用是即使匿名用户
看不到Jenkins,也可以访问构建和相关的REST构建触发器
。用法是在网络钩子链接中输入:
# JENKINS_SITE 为Jenkins站点地址
# JOB_NAME 为任务名称
# SECRET 为触发远程构建的身份验证令牌值
http://${JENKINS_SITE}/buildByToken/build?job=${JOB_NAME}&token=${SECRET}
配置GitLab的webhooks(钩子)
选择仓库
> 设置
> webhooks
OK! 完成了 当提交代码到gitlab
后会自动构建任务
配置构建触发器–示例
针对 JAR-1任务
添加token(令牌)
如下图:
添加完成后浏览器调用地址:http://${Jenkins_URL}
/buildByToken/build?job=JAR-1
&token=666666
,调用成功后在Jenkins页面可以观察到是否自动构建此任务了
piblish over ssh
可以实现不同节点之间传递文件,比如A节点将代码编译打包好,然后通过ssh发送到目标节点上,配置相应的命令完成项目的部署,目标节点无需是是一个slave,只要A节点能够通过ssh连接到B节点即可。
Blue Ocean
简化Jenkins显示
Workspace Cleanup Plugin
清理工作空间
Git插件
当前版本:4.12.1
插件地址:https://plugins.jenkins.io/git/
作用:该插件为Jenkins项目提供了基本的git操作。它可以轮询、提取、签出、分支、列表、合并、标记和推送存储库。
我们其实安装该插件,就可以实现Git项目的代码拉取了。
这个是最基本核心的插件。后面Git client,Git server Plugin, GitHub plugin ,GitLab Plugin都是针对具体功能需求,减少操作步骤而封装的各种专用场景下的插件。
Pipeline
插件地址:https://plugins.jenkins.io/workflow-aggregator/
作用:该插件给Jenkins提供Pipeline功能。这个插件和它依赖的其他插件,整体组成了Jenkins 2.0的Pipeline功能。
例如:
Pipeline Graph Analysis Plugin : 提供 REST API的pipeline访问和管理功能。
Pipeline: API:定义管道API的插件。
Pipeline: Basic Steps:添加管道步骤“build”以触发其他作业的生成。
Pipeline: Declarative:一个顽固的声明性的管道。
Localization: Chinese (Simplified) --中文显示
插件地址:https://plugins.jenkins.io/localization-zh-cn/
作用:该插件为Jenkins 提供了简体中文语言包。
我们Jenkins中的各种配置项,有些是中文有些是英文,那就是这个插件包在生效。它对部分功能实现了翻译,部分功能没有翻译造成的。我们如果想使用纯英文版本可以关闭该插件。
Build Environment Plugin 显示构建过程中的变量
当前版本:1.7
插件地址:https://plugins.jenkins.io/build-environment
作用:这个插件显示了关于构建环境的信息,并提供了比较两个构建环境的选项。它可以将我们整个构建过程中的全局变量全部展示出来。相较于Environment Injector Plugin 插件,它能够显示更多的变量。
我们如果在使用Groovy脚本的时候,不知道有哪些全局属性。或者我们构造过程中用的很多插件,但是不知道那些插件有没有暴露一些全局参数。都可以用这个接口进行测试和清理。
同时它还能将参数数据进行一个记录。跟随每次构建的输出结果进行展示
Role-based Authorization Strategy
插件地址: https://plugins.jenkins.io/role-strategy
推荐理由:
Enables user authorization using a Role-Based strategy. Roles can be defined globally or for particular jobs or nodes selected by regular expressions.
使用基于角色的策略启用用户授权。可以全局定义角色,也可以为正则表达式选择的特定作业或节点定义角色。
Pipeline Stage View
插件地址:【https://plugins.jenkins.io/pipeline-stage-view/](https://plugins.jenkins.io/pipeline-stage-view/)
Pipeline 各阶段可视化插件。
ThinBackup 备份插件
插件官网: https://plugins.jenkins.io/thinBackup
vscode常用pipeline插件
GroovyLint
groovy语法检查工具
Jenkins Pipeline Linter Connector
pipeline语法检查工具
pipeline语法
5个必备的组成部分
关键字 | 解释 |
---|---|
pipeline | 定义一个流水线 |
agent | 指定执行器 |
stages | 阶段集 |
stage | 阶段 |
steps | 步骤 |
Parameters参数列表
Parameters
提供了一个用户在触发流水线时应该提供的参数列表,这些用户指定参数的值可以通过 params
对象提供给流水线的 step(步骤)。只能定义在 pipeline
顶层。
目前支持的参数类型如下:
string
:字符串类型的参数。text
:文本型参数,一般用于定义多行文本内容的变量。booleanParam
:布尔型参数。choice
:选择型参数,一般用于给定几个可选的值,然后选择其中一个进行赋值。password
:密码型变量,一般用于定义敏感型变量,在 Jenkins 控制台会输出为*
。
插件 Parameters:
imageTag
:镜像 tag,需要安装Image Tag Parameter
插件后使用gitParameter
:获取 git 仓库分支,需要Git Parameter
插件后使用
示例:
pipeline {agent anyparameters {//执行构建时需要手动配置字符串类型参数,之后赋值给变量string(name: 'DEPLOY_ENV', defaultValue: 'staging', description: '1')//执行构建时需要提供文本参数,之后赋值给变量text(name: 'DEPLOY_TEXT', defaultValue: 'One\nTwo\nThree\n', description: '2')//布尔型参数booleanParam(name: 'DEBUG_BUILD', defaultValue: true, description: '3')//选择形式列表参数choice(name: 'CHOICES', choices: ['one', 'two', 'three'], description: '4')//密码类型参数,会进行加密password(name: 'PASSWORD', defaultValue: 'SECRET', description: 'A secret password')//获取镜像名称与tagimageTag(name: 'DOCKER_IMAGE', description: '', image: 'kubernetes/kubectl', filter: '.*', defaultTag: '', registry: 'https://192.168.10.15', credentialId: 'harbor-account', tagOrder: 'NATURAL')//获取git仓库分支列表,必须有git引用gitParameter(branch: '', branchFilter: 'origin/(.*)', defaultValue: '', description: 'Branch for build and deploy', name: 'BRANCH', quickFilterEnabled: false, selectedValue: 'NONE', sortMode: 'NONE', tagFilter: '*', type: 'PT_BRANCH')}stages {stage('env1') {steps {sh 'env'}}stage('git') {steps {//使用gitParameter,必须有这个git branch: "$BRANCH", credentialsId: 'gitlab-key', url: 'git@192.168.10.14:root/env.git'}}}
}
多行shell锁定工作目录
单行sh,cd到目录后,执行完这行shell会自动回到默认目录
;
用多行shell 解决,多行shell内,都在cd到的目录。
stage("执行构建") {steps {sh """cd demo_dirmvn clean package"""}echo "构建完成"
}
改变工作目录
pipeline的默认工作目录是${Workspace}
, 可以通过dir()
来改变这个步骤的工作目录
。
// 拉取代码阶段stage('Checkout') {steps {dir("${CODE_DIR}") {// 使用git插件从指定的仓库拉取代码,分支为params.BRANCH参数指定的值git branch: params.BRANCH, url: 'https://github.com/your/repo.git'}}}
Options
参考:https://www.cnblogs.com/jingzh/p/16900430.html#12-%E5%A3%B0%E6%98%8E%E5%BC%8F%E6%B5%81%E6%B0%B4%E7%BA%BF%E7%AE%80%E4%BB%8B
Jenkins流水线支持很多内置指令,比如 retry 可以对失败的步骤进行重复执行 n 次,可以根据不同的指令实现不同的效果。
比较常用的指令如下:
参数 | 解释 |
---|---|
buildDiscarder | 保留多少个流水线的构建记录 |
disableConcurrentBuilds | 禁止流水线并行执行,防止并行流水线同时访问共享资源导致流水线失败。 |
disableResume | 如果控制器重启,禁止流水线自动恢复。 |
newContainerPerStage | agent 为 docker 或 dockerfile 时,每个阶段将在同一个节点的新容器中运行,而不是所有的阶段都在同一个容器中运行。 |
quietPeriod | 流水线静默期,也就是触发流水线后等待一会在执行。 |
retry | 流水线失败后重试次数。 |
timeout | 设置流水线的超时时间,超过流水线时间,job 会自动终止。如果不加unit 参数默认为 1 分。 |
timestamps | 为控制台输出时间戳。 |
options {//保留三个历史构建版本--效果如下图所示buildDiscarder(logRotator(numToKeepStr: '3'))//注意手动触发的构建不生效quietPeriod(10)//流水线失败后重试次数retry(3)//超时时间1小时,如果不加unit参数默认为1分timeout(time: 1, unit: 'HOURS')//所有输出每行都会打印时间戳timestamps()}
post后置条件
Post 一般用于流水线结束后的进一步处理,比如错误通知等。Post 可以针对流水线不同的结果做出不同的处理,就像开发程序的错误处理,比如 Python 语言的 try catch。
Post 可以定义在 Pipeline 或 stage 中,目前支持以下条件
参数 | 解释 |
---|---|
always | 无论 Pipeline 或 stage 的完成状态如何,都允许运行该 post 中定义的指令; |
changed | 只有当前 Pipeline 或 stage 的完成状态与它之前的运行不同时,才允许在该 post 部分运行该步骤; |
fixed | 当本次 Pipeline 或 stage 成功,且上一次构建是失败或不稳定时,允许运行该 post 中定义的指令; |
regression | 当本次 Pipeline 或 stage 的状态为失败、不稳定或终止,且上一次构建的 状态为成功时,允许运行该 post 中定义的指令; |
failure | 只有当前 Pipeline 或 stage 的完成状态为失败(failure),才允许在 post 部分运行该步骤,通常这时在 Web 界面中显示为红色 |
success | 当前状态为成功(success),执行 post 步骤,通常在 Web 界面中显示为蓝色 或绿色 |
unstable | 当前状态为不稳定(unstable),执行 post 步骤,通常由于测试失败或代码 违规等造成,在 Web 界面中显示为黄色 |
aborted | 当前状态为终止(aborted),执行该 post 步骤,通常由于流水线被手动终止触发,这时在 Web 界面中显示为灰色; |
unsuccessful | 当前状态不是 success 时,执行该 post 步骤; |
cleanup | 无论 pipeline 或 stage 的完成状态如何,都允许运行该 post 中定义的指令。和 always 的区别在于,cleanup 会在其它执行之后执行。 |
pipeline框架
/* groovylint-disable CompileStatic */
pipeline {// 指定构建代理,这里使用任意可用的节点/* groovylint-disable-next-line TrailingWhitespace */agent any// 定义了 Pipeline 的一些全局选项options {//超时时间1小时,如果不加unit参数默认为1分timeout(time: 1, unit: 'HOURS')//所有输出每行都会打印时间戳timestamps()//保留三个历史构建版本buildDiscarder(logRotator(numToKeepStr: '3'))//注意手动触发的构建不生效quietPeriod(10)//流水线失败后重试次数retry(3)}parameters {string(name: 'BRANCH', defaultValue: 'main', description: '分支名称') // 定义一个字符串类型的参数,用于指定要构建的分支,默认值为mainbooleanParam(name: 'BUILD_TYPE', defaultValue: false, description: '是否构建') // 定义一个布尔类型的参数,用于控制是否执行构建阶段,默认值为false/* groovylint-disable-next-line LineLength */choice(name: 'ENVIRONMENT', choices: ['dev', 'test', 'prod'], description: '部署环境') // 定义一个选择类型的参数,用于选择部署环境,选项包括dev、test、prod}environment {// 定义代码存放的目录CODE_DIR = '/tmp/code_local_dir'}stages {// 拉取代码阶段stage('Checkout') {steps {dir("${CODE_DIR}") {// 使用git插件从指定的仓库拉取代码,分支为params.BRANCH参数指定的值git branch: params.BRANCH, url: 'https://github.com/your/repo.git'}}}stage('Build') { // 定义一个名为Build的阶段when { // 设置阶段执行条件expression { params.BUILD_TYPE == 'true' } // 只有当BUILD_TYPE参数为true时才执行}steps {// 构建步骤,例如编译、打包等}}stage('Test') { // 定义一个名为Test的阶段steps {// 测试步骤,例如运行单元测试、集成测试等}}stage('Deploy') { // 定义一个名为Deploy的阶段when { // 设置阶段执行条件expression { params.ENVIRONMENT != '' } // 只有当ENVIRONMENT参数不为空时才执行}steps {// 部署步骤,例如部署到不同的环境}}}post { // 定义构建结束后执行的步骤always { // 无论构建成功、失败还是被中断,都会执行// 总是执行的步骤,例如清理工作、发送通知等}success { // 构建成功时执行// 成功时的步骤,例如发送成功通知}failure { // 构建失败时执行// 失败时的步骤,例如发送失败通知}}
}
pipeline模块
dockerfile模块
但是感觉很鸡肋。。。
agent {dockerfile {filename 'Dockerfile.build' //dockerfile文件名称dir 'build' //执行构建镜像的工作目录label 'role-master' //执行的node节点,标签选择additionalBuildArgs '--build-arg version=1.0.2' //构建参数}
}
相关文章:

pipeline开发笔记
pipeline开发笔记 jenkins常用插件Build Authorization Token Root配置GitLab的webhooks(钩子)配置构建触发器--示例 piblish over sshBlue OceanWorkspace Cleanup PluginGit插件PipelineLocalization: Chinese (Simplified) --中文显示Build Environment Plugin 显示构建过程…...

spark读取parquet文件
源码 parquet文件读取的入口是FileSourceScanExec,用parquet文件生成对应的RDD 非bucket文件所以走createNonBucketedReadRDD方法。 createNonBucketedReadRDD 过程: 确定文件分割参数 openCostInBytes4M 相关参数spark.sql.files.openCostInBytes4M…...

redis详细教程(1.String类型)
Redis 的 String 类型内部使用了一种叫做 SDS(Simple Dynamic String)的结构。SDS 的设计比传统的 C 语言字符串更加高效和安全,主要特点如下: 头部信息:SDS 的头部包含了一些元数据,比如字符串的长度、剩…...

用友U8接口-库存管理(7)
概括 本文的操作需要正确部署U8API主要讲述库存管理接口的使用,以产成品入库单作为说明,其他单据接口都是大同小异的!许多时候先在ERP做个单,然后仿造ERP单据参数,构造接口JSON参数是不错的做法。 获取Token访问令牌…...
Spring Boot HikariCP数据库连接池入门
1. 概述 在我们的项目中,数据库连接池基本是必不可少的组件。在目前数据库连接池的选型中,主要是 Druid ,为监控而生的数据库连接池。HikariCP ,号称性能最好的数据库连接池。 至于怎么选择,两者都非常优秀&#x…...

Docker快速上手教程:MacOS系统【安装/配置/使用/原理】全链路速通
背景 最近换了个 Macbook Air M3, 写个人项目需要用到 Docker,配置过程有一点点坎坷,还是得记录下避免重蹈覆辙。 什么。为什么是买 Air 而不是 Pro Max? 因为码农的钱也是钱啊。 这里我不会先讲原理,我认为工程的事情都是先看到现象,有了概念的轮廓,才应该去研究原理,…...

【JavaSE】认识String类,了解,进阶到熟练掌握
#1024程序员节 | 征文# 下面就让博主带领大家一起解决心中关于String类的疑问吧~~~ 1.字符串构造: 第一种和第二种(有一定的区别,在常量池上) public static void main(String[] args) { // 使用常量串构造 String s1 "h…...

vue3 vben-admin 窗口大小更改后 echarts尺寸变为 100px的问题
问题描述: 当切换切换tab 并且窗口尺寸更改时, echarts的尺寸因为父元素为 0, 自动设置为 100px 网上查找资料的结果: 1,使用vue 中的 v-if 来重新设置dom树 缺点: 频繁操作dom树结构, 极其消耗性能 优点: 自适应展示 2,设置固定宽高 缺点: 不能自适应展示, 无需消耗额外…...

Web应用框架-Django应用基础(3)-Jinja2
1.创建姓名模板 username里的数据发生改变,页面中渲染的数据发生改变,该效果称为动态数据 #hello/views:def hello_user(request):username000html <!DOCTYPE html><html lang"en"><head><meta charset"UTF-8&quo…...

js(深浅拷贝,节流防抖,this指向,改变this指向的方法)
一、深浅拷贝 1.基本数据类型和引用数据类型的区别: 1. 基本数据类型的变量存储的是值 引用数据类型的变量存储的是地址值 2. 基本数据类型的变量存储的值在栈内存 引用数据类型的变量存储的值在堆内存 3. 基本数据类型的变量存储的是值和值之间相互不影响 引用数据…...

香橙派5(RK3588)使用npu加速yolov5推理的部署过程
香橙派5使用npu加速yolov5推理的部署过程 硬件环境 部署过程 模型训练(x86主机) 在带nvidia显卡(最好)的主机上进行yolo的配置与训练, 获取最终的best.pt模型文件, 详见另一篇文档 模型转换(x86主机) 下载airockchip提供的yolov5(从pt到onnx) 一定要下这个版本的yolov5, …...

基于MWORKS的蓝桥杯「智能装备数字化建模大赛」正式发布,首期培训本周六开启
为强化装备数字化人才培养,推动装备数字化技术快速发展,第十六届蓝桥杯全国软件和信息技术专业人才大赛设置专项赛暨智能装备数字化建模大赛,使用MWORKS作为参赛软件。关于参赛软件授权、技术支持与培训、教材与案例开发支持、成果转化培训及…...

021、深入解析前端请求拦截器
目录 深入解析前端请求拦截器: 1. 引言 2. 核心实现与基础概念 2.1 基础拦截器实现 2.2 响应拦截器配置 3. 实际应用场景 3.1 完整的用户认证系统 3.2 文件上传系统 3.3 API请求缓存系统 3.4 请求重试机制 3.5 国际化处理 4. 性能优化实践 4.1 请求合并…...
windows中的tracert命令
在 Windows 操作系统中,tracert(全称 Trace Route)是一个用于确定 IP 数据包到达目标主机所经过的路径的命令行工具。它通过发送具有不同生存时间(TTL)的 ICMP(Internet Control Message Protocolÿ…...

【玩儿】Java 数字炸弹小游戏(控制台版)+ IO 数据存储
Java 数字炸弹小游戏(控制台版) IO 数据存储 数字炸弹小游戏概述功能实现实体类User.java 玩家信息实体类GameRecode.java 游戏记录实体类 自定义异常AccountLockedException.java 账号锁定异常PasswordErrorException.java 密码错误异常UnknowAccountEx…...
今日头条躺赚流量:自动化新闻爬取和改写脚本
构建一个自动化的新闻爬取和改写系统,实现热点新闻的自动整理和发布,需要分为以下几个模块:新闻爬取、信息解析与抽取、内容改写、自动发布。以下是每个模块的详细实现步骤和代码示例: 1. 新闻爬取模块 目标:从新闻网…...
日常实习与暑期实习详解
日常实习与暑期实习详解 问了下正在实习的同学,发现天要塌了–才知道日常实习是没有笔试的 1. 实习的定义 1.1 日常实习 日常实习是企业长期招聘的实习岗位,通常没有时间限制。企业会在需要时进行招聘,招聘对象包括在校大学生和大一、大二的…...

Git的原理和使用(六)
本文主要讲解企业级开发模型 1. 引入 交付软件的流程:开发->测试->发布上线 上面三个过程可以详细划分为一下过程:规划、编码、构建、测试、发 布、部署和维护 最初,程序⽐较简单,⼯作量不⼤,程序员⼀个⼈可以完…...

Elasticsearch 中的高效按位匹配
作者:来自 Elastic Alexander Marquardt 探索在 Elasticsearch 中编码和匹配二进制数据的六种方法,包括术语编码(我喜欢的方法)、布尔编码、稀疏位位置编码、具有精确匹配的整数编码、具有脚本按位匹配的整数编码以及使用 ESQL 进…...
LSTM,全称长短期记忆网络(Long Short-Term Memory),是一种特殊的循环神经网络(RNN)结构
关于lstm超参数设置,每个参数都有合适的范围,超过这个范围则lstm训练不再有效,loss不变,acc也不变 LSTM,全称长短期记忆网络(Long Short-Term Memory),是一种特殊的循环神经网络&am…...
rknn优化教程(二)
文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK,开始写第二篇的内容了。这篇博客主要能写一下: 如何给一些三方库按照xmake方式进行封装,供调用如何按…...

相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了: 这一篇我们开始讲: 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下: 一、场景操作步骤 操作步…...

C++使用 new 来创建动态数组
问题: 不能使用变量定义数组大小 原因: 这是因为数组在内存中是连续存储的,编译器需要在编译阶段就确定数组的大小,以便正确地分配内存空间。如果允许使用变量来定义数组的大小,那么编译器就无法在编译时确定数组的大…...
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...

Linux部署私有文件管理系统MinIO
最近需要用到一个文件管理服务,但是又不想花钱,所以就想着自己搭建一个,刚好我们用的一个开源框架已经集成了MinIO,所以就选了这个 我这边对文件服务性能要求不是太高,单机版就可以 安装非常简单,几个命令就…...

《Docker》架构
文章目录 架构模式单机架构应用数据分离架构应用服务器集群架构读写分离/主从分离架构冷热分离架构垂直分库架构微服务架构容器编排架构什么是容器,docker,镜像,k8s 架构模式 单机架构 单机架构其实就是应用服务器和单机服务器都部署在同一…...
python读取SQLite表个并生成pdf文件
代码用于创建含50列的SQLite数据库并插入500行随机浮点数据,随后读取数据,通过ReportLab生成横向PDF表格,包含格式化(两位小数)及表头、网格线等美观样式。 # 导入所需库 import sqlite3 # 用于操作…...

简约商务通用宣传年终总结12套PPT模版分享
IOS风格企业宣传PPT模版,年终工作总结PPT模版,简约精致扁平化商务通用动画PPT模版,素雅商务PPT模版 简约商务通用宣传年终总结12套PPT模版分享:商务通用年终总结类PPT模版https://pan.quark.cn/s/ece1e252d7df...
GB/T 43887-2024 核级柔性石墨板材检测
核级柔性石墨板材是指以可膨胀石墨为原料、未经改性和增强、用于核工业的核级柔性石墨板材。 GB/T 43887-2024核级柔性石墨板材检测检测指标: 测试项目 测试标准 外观 GB/T 43887 尺寸偏差 GB/T 43887 化学成分 GB/T 43887 密度偏差 GB/T 43887 拉伸强度…...

深入理解 C++ 左值右值、std::move 与函数重载中的参数传递
在 C 编程中,左值和右值的概念以及std::move的使用,常常让开发者感到困惑。特别是在函数重载场景下,如何合理利用这些特性来优化代码性能、确保语义正确,更是一个值得深入探讨的话题。 在开始之前,先提出几个问题&…...