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 any
    stages {
        stage('env') {
            steps {
                script {
                    println env.JOB_NAME
                    println env.BUILD_NUMBER
                    println 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_read
                    println rd_json
                    println 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_json

                    writeJSON 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_file
                    println props
                }
            }
        }
        stage('Utility Steps method---readYaml') {
            steps {
                script {
                    yaml_file = env.WORKSPACE + "/test_jenkins.yaml"
                    y = readYaml file : yaml_file
                    println 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_path

                    writeYaml 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 any
    stages{
        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 any
    environment {
        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/GB18030
                    mimeType:'text/plain',        // or text/html
                    subject: "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_ID
                    result_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 " +  status
    result_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 any
    stages{
        stage("init") {
            steps{
                script {
                    json_file = "${env.WORKSPACE}/package.json"
                    file_contents = readFile json_file
                    println file_contents
                }
            }
        }
        stage("retry and sleep") {
            steps{
                script{
                    try {
                        retry(3) {
                            println "here we are test retry fuction"
                            sleep 5
                            println 10/0
                        }
                    }catch (Exception e) {
                        println e
                    }
                }
            }
        }
    }
}

五、pipeline basic steps(timeout 、waitUntil 、withEnv 

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

pipeline{
    agent any
    stages{
        stage("init") {
            steps{
                script {
                    // 设置超时5s,默认单位是分钟
                    timeout(time: 50, unit: 'SECONDS') {
                        //initialRecurrencePeriod :设置重试之间的初始等待时间(以毫秒为单位)。
                        // 默认为 250 毫秒。每次失败都会将尝试之间的延迟减慢至最多 15 秒
                        //quiet :如果为真,则每次检查条件时该步骤都不会记录消息。默认为假。类型: boolean
                        println "是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_NUMBER

pipeline{

    agent any
    stages{
        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.mfbz.cn/a/569902.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

APP自定义身份证相机(Android +iOS)

基本上同时兼容安卓和苹果的插件都需要付费&#xff0c;这里我找了2个好用的免费插件 1.仅支持安卓&#xff1a;自定义身份证相机&#xff08;支持蒙版自定义&#xff09;&#xff0c;内置蒙版&#xff0c;照片预览&#xff0c;身份证裁剪 - DCloud 插件市场、 2.支持iOS(已测…

前端CSS基础8(盒子模型(margin、border、padding、content))

前端CSS基础8&#xff08;盒子模型&#xff08;margin、border、padding、content&#xff09;&#xff09; CSS盒子模型CSS中常用的长度单位元素的分类&#xff0c;各个元素的显示模式修改元素的显示模式&#xff08;类型&#xff09;盒子模型的组成部分盒子内容区-contentCSS…

激活虚拟环境.ps1“因为在此系统上禁止运行脚本”解决办法

激活虚拟环境.ps1“因为在此系统上禁止运行脚本”解决办法 1.问题收录 Django激活虚拟环境时遇到的&#xff0c;已解决&#xff0c;作以收录&#xff0c;希望能帮到大家 2.分析问题 核心是Powershell的安全策略&#xff0c;将XX命令视为不安全脚本&#xff0c;不允许执行&…

树莓集团有效链接政、企、校,搭建三方合作平台

树莓集团——数字生态产业链建设者&#xff0c;有效链接政、企、校&#xff0c;搭建三方合作平台。集团旗下树莓教育拥有发展数字影像培训十余年的成都王老师摄影培训学校&#xff0c;一家在数字影像教育领域中独树一帜的专业机构。树莓集团凭借其深厚的教育积淀和丰富的实践经…

单片机通讯协议

参考&#xff1a;江科大单片机教程 STM32入门教程-2023版 细致讲解 中文字幕_哔哩哔哩_bilibili IIC通讯协议SPI通信协议UARTCANUSB速度100k-400khz4Mhz-线数2 CLK,DATA4CLK,ENB,IO,OI额外设备一主多从一主多从 一般不用自己写&#xff0c;都有相应的库或官方提供相应的&#…

Mysql用语句创建表/插入列【示例】

一、 创建表 COMMENT表示字段或列的注释 -- 新建student表 CREATE TABLE student (id BIGINT NOT NULL COMMENT 学生id, enroll_date DATE NOT NULL COMMENT 注册时间, NAME VARCHAR(18) DEFAULT NOT NULL COMMENT 学生姓名, deal_flag TINYINT(1) DEFAULT 0 NOT NULL COMM…

linux开发板开机启动向日葵

硬件&#xff1a;orangepi 5 pro 操作系统&#xff1a;ubuntu 20.4 lts 安装向日葵 根据我的实测&#xff0c;arm架构的ubuntu系统只能安装向日葵提供的麒麟系统的那个版本&#xff0c;具体安装方式官网下载页面有 允许任意用户连接到 X11 使用root用户登录后打开终端输入一下…

数据分析学习资源(未完)

1、PDF 数据分析自学攻略 增长黑客&#xff08;AARRR&#xff09; 量化思维

Centos7升级编译器

Centos7默认编译器版本&#xff1a; gcc5.1之前的编译器&#xff0c;默认是C98标准的&#xff0c;若是编译一些支持C高版本的软件时&#xff0c;难免会出现问题。例如&#xff1a;编译最新版jsoncpp&#xff0c;会有如下问题&#xff1a;&#xff08;原因是&#xff1a;std在C9…

从阿里云迁移Redis到AWS的规划和前期准备

在将Redis实例从阿里云迁移到AWS之前,需要进行全面的规划和前期准备。以下九河云提供一些重要的步骤和注意事项: 1. 评估Redis使用情况 首先,您需要评估当前Redis实例的使用情况,包括实例规格、内存使用量、吞吐量、访问模式等。这将有助于选择合适的AWS Redis产品和实例类型…

代码随想录算法训练营day40

题目&#xff1a;343. 整数拆分、96.不同的二叉搜索树 参考链接&#xff1a;代码随想录 343. 整数拆分 思路&#xff1a;五部曲来走。dp数组&#xff0c;dp[i]用于记录拆i得到的最大乘积和&#xff0c;我们要求的也就是dp[n]&#xff1b;递推公式&#xff0c;我们想拆分i&am…

薄板样条插值TPS原理以及torch和opencv实现

薄板样条插值TPS原理以及torch和opencv实现 1、薄板样条插值TPS原理概述原理以及公式推导2、torch实现3、opencv实现1、薄板样条插值TPS原理 概述 薄板样条(Thin Plate Spline),简称TPS,是一种插值方法,可找到通过所有给定点的“最小弯曲”光滑曲面。因为它一般都是基于…

Echarts水球图的配置项,掌握后极其简单。

Echarts水球图&#xff08;Liquid Fill Gauge&#xff09;是 Echarts 中的一种数据可视化图表类型&#xff0c;用于展示一种类似水球的效果&#xff0c;可以直观地显示一个数值相对于总量的比例。水球图通常用于展示进度、完成率、占比等数据&#xff0c;具有直观、美观的特点&…

Win linux 下配置adb fastboot

一、Win配置adb & fastboot 环境变量 主机&#xff1a;Win10&#xff0c;除了adb fastboot需要设置变量之外&#xff0c;驱动直接安装即可 win下adb fastboot 下载地址&#xff1a;https://download.csdn.net/download/u012627628/89215420 win下qcom设备驱动下载地址&a…

反向海淘代购系统是什么?如何为国外的人代购中国电商平台的商品?

随着全球化的深入发展&#xff0c;跨境购物已成为越来越多人的日常选择。然而&#xff0c;传统意义上的“海淘”主要是指中国消费者从国外电商平台购买商品。近年来&#xff0c;随着中国电商市场的蓬勃发展&#xff0c;越来越多的海外消费者也开始对中国商品产生浓厚兴趣&#…

Memecoin再迎爆发:是本轮牛市大反弹的开始吗?

在加密货币市场上&#xff0c;Memecoin再度掀起了一波热潮&#xff0c;引发了人们对于本轮牛市是否即将到来的猜测和期待。近期&#xff0c;诸如BONK、PEPE和POPCAT等Memecoin的价格出现了显著的上涨&#xff0c;涨幅之大令人瞠目。这一现象引发了广泛的讨论&#xff0c;人们开…

C++之入门

文章目录 1、前言2、C的关键字2.1C语言32关键字2.2C关键字(63个) 3、命名空间4、输入输出(cout、cin)4、缺省参数5、函数重载6 引用6.1 引用的定义6.2 引用的特性6.3引用的使用场景6.4 实际例子6.5、总结 7、内联函数8、auto关键字9、nullptr关键字 1、前言 C语言是结构化和模…

恶意软件狩猎新途径:使用.NET元数据分析跟踪恶意软件

本文由Blaze于2024年3月25日发表于其个人博客网站上。 就在不久前&#xff0c;我们意外发现了一个PureCrypter样本&#xff0c;而PureCrypter则是一款适用于各种类型恶意软件&#xff08;例如Agent Tesla和RedLine&#xff09;的加载器和混淆处理工具。深入分析之后&#xff0c…

BDC报错信息查看

1.在事务代码st22的报错信息中下载本地文件 2.打开本地文件查看报错信息 3.在事务代码se91中输入对应消息类和消息编号 4.查看报错信息&#xff0c;根据报错信息取解决问题

GaussDB数据库SQL系列-聚合函数

背景 在这篇文章中&#xff0c;我们将深入探讨GaussDB数据库中聚合函数的使用和优化。聚合函数是数据库查询中非常重要的工具&#xff0c;它们可以对一组值执行计算并返回单个值。例如&#xff0c;聚合函数可以用来计算平均值、总和、最大值和最小值。 这些功能在数据分析和报…