jenkins流水线学习(工具)

Jenkins特意为了更好使用pipeline,开发了一些工具类,方便我们更好地在step中处理各种需求。

一、Pipeline Utility Steps

Pipeline Utility Steps
这是个插件,需要在jenkins插件管理安装。参考来源:Jenkins高级篇之Pipeline方法篇-Pipeline Utility Steps-2-方法readJSON和writeJSON_pipeline readjson-CSDN博客

1、findFiles    (需要在项目下要有log文件)

2、readJSON   (方法有两种参数,分别是文件路径和字符串;示例是文件路径;datas = readJSON text : json_string)

3、writeJSON   (file入参是文件路径,json可以是readJSON的结果,也可以是转换为json的字符串;示例是writeJSON的方式)

4、readProperties (读取properties文件,得到是一个map对象)

5、readYaml    (读取yaml文件,得到是一个map对象;有2种参数,同上面的readJson;   datas = readYaml text : yaml_string)

6、writeYaml    (入参是readYaml的结果,也可以是一个map)

pipeline {agent anystages {stage('env') {steps {script {println env.JOB_NAMEprintln env.BUILD_NUMBERprintln env.WORKSPACE}}}stage('Utility Steps method---findFiles') {steps {script {files = findFiles(glob: '**/*.log')println files[0].name}}}stage('Utility Steps method---readJSON') {steps {script {file_path_read = env.WORKSPACE + "/package.json"rd_json = readJSON file : file_path_readprintln rd_jsonprintln rd_json.name}}}stage('Utility Steps method---writeJSON') {steps {script {file_path_write = env.WORKSPACE + "/test_jenkins.json"input_json =  env.WORKSPACE + "/package.json"input = readJSON file : input_jsonwriteJSON file: file_path_write, json: input}}}stage('Utility Steps method---readProperties') {steps {script {properties_file = env.WORKSPACE + "/test_jenkins.properties"props = readProperties interpolate: true, file: properties_fileprintln props}}}stage('Utility Steps method---readYaml') {steps {script {yaml_file = env.WORKSPACE + "/test_jenkins.yaml"y = readYaml file : yaml_fileprintln y}}}stage('Utility Steps method---writeYaml') {steps {script {yaml_path = env.WORKSPACE + "/test_jenkins_write.yaml"input_path = env.WORKSPACE + "/test_jenkins.yaml"input_map = readYaml file : input_pathwriteYaml file: yaml_path , data: input_map}}}}
}

二、pipeline basic steps


这是一个最基础的pipeline组件,这个也是一个独立的插件,在安装pipeline的时候默认会自动安装
官网:Pipeline: Basic Steps

1、deleteDir()
  这个是默认递归删除WORKSPACE下的文件和文件夹
  使用场景:做完了每一个stage里面的事情,我们需要在post{...}里面写一些clean up操作
2、dir()
  这个方法是改变当前的工作目录
3、error()
  遇到这个方法,该stage和后面的stage都会显示失败
4、fileExists
  判断一个文件是否存在,返回值是布尔类型
5、isUnix()
  判断当前运行的Jenkins node环境是不是linux环境
6、pwd()
  linux是pwd,windows上是dir。所以这个插件就干脆支持一个方法,统称为pwd()

pipeline{agent anystages{stage("dir") {steps{// 如果没有这个目录,会自动创建这个目录dir("${env.WORKSPACE}/testdata"){sh "pwd"}}}stage("fileExists") {steps{script {json_file = "${env.WORKSPACE}/test_jenkins.log"if(fileExists(json_file) == true) {echo("log file is exists")}else {error("here haven't find log file")}}}}stage("isUnix") {steps{script {if(isUnix() == true) {echo("this jenkins job running on a linux-like system")}else {error("the jenkins job running on a windows system")}}}}stage("pwd()") {steps{script {sh("pwd")println "==========="println pwd()}}}}post {always {script {//写相关清除/恢复环境等操作代码//deleteDir()println "结束"}}}
}

三、pipeline basic steps(邮件)

pipeline{agent anyenvironment {to_email = "yin921125@qq.com"to_email_address_list = "yin921125@qq.com,yin921125@163.com"}stages{stage("发邮件demo 1") {steps{script {mail to: to_email,subject: "Running Pipeline: ${currentBuild.fullDisplayName}",body: "Something is wrong with ${env.BUILD_URL}"}}}stage("发邮件demo 2") {steps{script {mail to: to_email,cc: 'xxxxx@qq.com',            // 抄送charset:'UTF-8',            // or GBK/GB18030mimeType:'text/plain',        // or text/htmlsubject: "Running Pipeline: ${currentBuild.fullDisplayName}",body: "Something is wrong with ${env.BUILD_URL}, just for test send mail via pipeline code"}}}stage("发邮件demo 3") {steps{script {subject = "Jenkins Job : " + env.JOB_NAME + "/" + env.BUILD_IDresult_url = env.BUILD_URL + "console"text = """<!DOCTYPE html><html><head><meta charset="utf-8"><title></title></head><body><div><h1>Summary</h1><div><h2>Jenkins Build</h2><ul><li>Job URL : <a href='${env.BUILD_URL}'>${env.BUILD_URL}</a></li><li>Build Result URL : <a href='${result_url}'>${result_url}</a></li></ul></div><div><h2>GIT Branch</h2><ul><li>这是一个测试分支</li></ul></div></div></body></html>"""mail body: text, subject: subject,  mimeType: 'text/html', to: to_email_address_list}}}}post{always{script {module_test = load env.WORKSPACE + "/test_groovy.groovy"}}failure {script {module_test.send_email_results("Failed","Master",to_email_address_list)}}success {script {module_test.send_email_results("Success","Master",to_email_address_list)}}}
}

上面引用的test_groovy.groovy如下

def send_email_results(status,GITBranch,to_email_address_list) {subject = "Jenkins Job : " + env.JOB_NAME + "/" + env.BUILD_ID + " has " +  statusresult_url = env.BUILD_URL + "console"text = """<!DOCTYPE html><html><head><meta charset="utf-8"><title></title></head><body><div><h1>Summary</h1><div><h2>Jenkins Build</h2><ul><li>Job URL : <a href='${env.BUILD_URL}'>${env.BUILD_URL}</a></li><li>Build Result URL : <a href='${result_url}'>${result_url}</a></li></ul></div><div><h2>GIT Branch</h2><ul><li>这是测试引用其他groovy文件的邮件${GITBranch}</li></ul></div></div></body></html>"""mail body: text, subject: subject,  mimeType: 'text/html', to: to_email_address_list
}return this

 四、pipeline basic steps(readFile、retry、sleep)

1、readFile,读取文件内容(两个参数,第一个是file的path,第二个是encoding,默认是根据你当前平台的编码)
  如果不知道文件是什么格式(格式例如txt,log,json,properties,config,yaml),则推荐用readFile
  如果拿来读一个图片或者音频视频文件,读取二进制文件会采用Base64转码的字符串输出。
2、retry和sleep
  retry只能在出现异常的地方才能使用,否则只跑一遍就结束
  retry(3)这个3是一个整数,表示尝试的次数,sleep中的2表示2秒,注意这单位是秒

pipeline{agent anystages{stage("init") {steps{script {json_file = "${env.WORKSPACE}/package.json"file_contents = readFile json_fileprintln file_contents}}}stage("retry and sleep") {steps{script{try {retry(3) {println "here we are test retry fuction"sleep 5println 10/0}}catch (Exception e) {println e}}}}}
}

五、pipeline basic steps(timeout 、waitUntil 、withEnv 

1、timeout (超时则aborted)
2、waitUntil (直到返回true才跳出,否则一直重试)
3、withEnv (添加环境变量)

pipeline{agent anystages{stage("init") {steps{script {// 设置超时5s,默认单位是分钟timeout(time: 50, unit: 'SECONDS') {//initialRecurrencePeriod :设置重试之间的初始等待时间(以毫秒为单位)。// 默认为 250 毫秒。每次失败都会将尝试之间的延迟减慢至最多 15 秒//quiet :如果为真,则每次检查条件时该步骤都不会记录消息。默认为假。类型: booleanprintln "是unix系统吗" + isUnix()waitUntil(initialRecurrencePeriod: 1000,quiet: true){script {isUnix()}}}}}}stage("env") {steps{script {withEnv(['java_home=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.181-3.b13.el6_10.i386/jre']) {sh("$java_home/bin/java -version")println "test with withEnv feature"}}}}}
}

 六、pipeline basic steps(writeFile

println env.JOB_NAME
println env.BUILD_NUMBERpipeline{agent anystages{stage("writeFile demo") {steps{script {write_file_path = "${env.WORKSPACE}/test_jenkins.txt"file_contents = "Hello Anthony!! 这是一个测试例子"// 写文件writeFile file: write_file_path, text: file_contents, encoding: "UTF-8"// 读文件fileContents = readFile file: write_file_path, encoding: "UTF-8"println fileContents}}}}
}

参考:jenkins流水线学习二(工具) - whitewall - 博客园 (cnblogs.com) 

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

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

相关文章

解线性方程组——(Gauss-Seidel)高斯-赛德尔迭代法 | 北太天元

一、Gauss-Seidel迭代法 n 3 n3 n3时 A ( a 11 a 12 a 13 a 21 a 22 a 23 a 31 a 32 a 33 ) , b ( b 1 b 2 b 3 ) , A\begin{pmatrix} a_{11} & a_{12} &a_{13}\\ a_{21} & a_{22} &a_{23}\\ a_{31} & a_{32} &a_{33}\\ \end{pmatrix} ,\quad b\be…

缓存神器-JetCache

序言 今天和大家聊聊阿里的一款缓存神器 JetCache。 一、缓存在开发实践中的问题 1.1 缓存方案的可扩展性问题 谈及缓存&#xff0c;其实有许多方案可供选择。例如&#xff1a;Guava Cache、Caffine、Encache、Redis 等。 这些缓存技术都能满足我们的需求&#xff0c;但现…

《从零开始的Java世界》10File类与IO流

《从零开始的Java世界》系列主要讲解Javase部分&#xff0c;从最简单的程序设计到面向对象编程&#xff0c;再到异常处理、常用API的使用&#xff0c;最后到注解、反射&#xff0c;涵盖Java基础所需的所有知识点。学习者应该从学会如何使用&#xff0c;到知道其实现原理全方位式…

LAMP(Linux+Apache+MySQL+PHP)环境介绍、配置、搭建

LAMP(LinuxApacheMySQLPHP)环境介绍、配置、搭建 LAMP介绍 LAMP是由Linux&#xff0c; Apache&#xff0c; MySQL&#xff0c; PHP组成的&#xff0c;即把Apache、MySQL以及PHP安装在Linux系统上&#xff0c;组成一个环境来运行PHP的脚本语言。Apache是最常用的Web服务软件&a…

纸箱码垛机:从传统到智能,科技如何助力产业升级

随着科技的飞速发展&#xff0c;传统工业领域正经历着一场重要的变革。作为物流行业重要一环的纸箱码垛机&#xff0c;其从传统到智能的转型升级&#xff0c;不仅提高了生产效率&#xff0c;还大幅降低了人工成本&#xff0c;为产业升级提供了强大助力。星派将探讨纸箱码垛机的…

【Unity】UnityEvent(一)

​UnityEvent----高效管理游戏事件的利器 在游戏开发中&#xff0c;事件系统是实现各种功能的关键组成部分。它允许我们将不同对象之间的交互解耦&#xff0c;使得代码更加模块化和易于维护。而UnityEvent作为Unity引擎提供的一种强大的事件系统工具&#xff0c;为开发者提供了…

CPDA|0到1突破:构建高效数据分析体系的秘密武器

在现今信息爆炸的时代&#xff0c;数据已经渗透到了我们生活的方方面面&#xff0c;成为了决策、创新和竞争优势的关键。因此&#xff0c;构建一套高效的数据分析体系&#xff0c;对于企业和个人而言&#xff0c;都是至关重要的。那么&#xff0c;如何在众多的数据海洋中脱颖而…

分类神经网络1:VGGNet模型复现

目录 分类网络的常见形式 VGG网络架构 VGG网络部分实现代码 分类网络的常见形式 常见的分类网络通常由特征提取部分和分类部分组成。 特征提取部分实质就是各种神经网络&#xff0c;如VGG、ResNet、DenseNet、MobileNet等。其负责捕获数据的有用信息&#xff0c;一般是通过…

5分钟——测试搭建的springboot接口(二)

5分钟——测试搭建的springboot接口&#xff08;二&#xff09; 1. 查看数据库字段2. 测试getAll接口3. 测试add接口4. 测试update接口5. 测试deleteById接口 1. 查看数据库字段 2. 测试getAll接口 3. 测试add接口 4. 测试update接口 5. 测试deleteById接口

Java删除文件夹及文件夹下所有子目录及文件

代码 import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths;/** * 删除文件夹及文件夹下所有子目录及文件 */ public void deleteFolder() { // 路径 Path directory Paths.get("/your/delete/path"); try (Stream<Pa…

Docker 开启远程安全访问

说明 如果你的服务器是公网IP&#xff0c;并且开放了docker的远程访问&#xff0c;如果没有进行保护是非常危险的&#xff0c;任何人都可以向你的docker中推送镜像、运行实例。我曾开放过阿里云服务器中docker的远程访问权限&#xff0c;在没有开启保护的状态下&#xff0c;几…

通过标准网格点计算等值线

本资源提供了通过输入标准网格点数据计算等值线的接口&#xff0c;接口通过Qt实现&#xff0c;调整部分数据类型后也可转为C代码。 接口使用也比较简单&#xff0c;将本资源的源码添加到工程中&#xff0c;然后调用GetContourlinesByGridPoints_new()函数即可得到等值线。该函数…

C#多线程之(Thread)详解与示例

文章目录 一、线程的基本概念二、C#中创建和启动线程的方法三、线程的生命周期四、线程的状态转换五、线程之间的通信机制六、线程安全的编程实践使用 ConcurrentBag 进行线程安全的数据收集 总结 本文将深入探讨C#多线程编程的核心概念&#xff0c;包括线程的基本概念、创建和…

人工智能技术概述_3.机器学习

1.机器学习定义 广义上来说&#xff0c;机器学习指专门研究计算机怎么模拟或实现人类的学习行为以获取新的知识或技能的学科&#xff0c;使计算机重新组织已有的组织结构并不断改善自身的性能。更加精确地说&#xff0c;一个机器学习的程序就是可以从经验数据E中对任务T进行学习…

LInux常用命令总结(三):用户管理命令与用户组管理命令

1. 用户管理命令 useradd&#xff1a;添加新用户 用法&#xff1a; useradd 用户名 &#xff08;功能描述&#xff1a;添加新用户&#xff09; ​useradd -g 组名 用户名 &#xff08;功能描述&#xff1a;添加新用户到某个组&#xff09;举例&#xff1a;useradd user1 passw…

用 LMDeploy 高效部署 Llama-3-8B,1.8倍vLLM推理效率

节前&#xff0c;我们星球组织了一场算法岗技术&面试讨论会&#xff0c;邀请了一些互联网大厂朋友、参加社招和校招面试的同学&#xff0c;针对算法岗技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备、面试常考点分享等热门话题进行了深入的讨论。 汇总…

Springboot 整合 Quartz框架做定时任务

在Spring Boot中整合Quartz&#xff0c;可以实现定时任务调度的功能 1、首先&#xff0c;在pom.xml文件中添加Quartz和Spring Boot Starter Quartz的依赖&#xff1a; <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-bo…

做外贸而已,千万不要太老实了!

朋友们&#xff0c;跟你们分享个秘密&#xff0c;做外贸&#xff0c;别太实诚了&#xff01;我知道很多新人小伙伴刚入行那会儿&#xff0c;几个月都开不了张单子。原因&#xff0c;就是太老实了&#xff01; 1客户说价格高 新手可能会直说&#xff1a;“亲&#xff0c;我们的…

一些好听且有心意的英文全名Burwood新南威尔士州伯伍德喝酒上脸就是乙醛中毒1. 康奈尔大学官宣恢复标化要求2. 香港城市大学(东莞)正式设立!

目录 一些好听且有心意的英文全名 Burwood新南威尔士州伯伍德 喝酒上脸就是乙醛中毒 1. 康奈尔大学官宣恢复标化要求 2. 香港城市大学&#xff08;东莞&#xff09;正式设立&#xff01; 一些好听且有心意的英文全名 在选择好听且有意义的英文全名时&#xff0c;我们可…

pandas保存dict字段再读取成DataFrame

背景&#xff1a; pandas DataFrame中有字段是dict类型&#xff0c;使用to_excel方法直接保存下次读取出来&#xff0c;dict字段会变成字符串&#xff0c;无法识别&#xff1b; 目标&#xff1a;保存dict字段&#xff0c;下次读出来还是dict 方法一&#xff1a;使用json.dum…