jenkins声明式流水线语法详解

news2024/9/24 17:32:15

最基本的语法包含

  • pipeline:所有有效的声明式流水线必须包含在一个 pipeline 块中
  • stages:包含一系列一个或多个stage指令
  • stage:stage包含在stages中进行,比如某个阶段
  • steps:在阶段中具体得执行操作,一个或多个步骤

agent

指定了整个流水线特定的机器,比如多台slave节点,可以被定义在pipeline块顶层也可以根据stage层定义使用
(jenkins提供比较常用的流水线语法生成,输入对应的参数会自动生产)
在这里插入图片描述

  • any:在任意可用代理上执行流水线阶段。agent any
  • label:在配置标签得jenkins环境中可用代理上执行。agent {label ‘my slave’}
  • node:agent { node { label ‘labelName’ } } 和 agent { label ‘labelName’ } 一样, 但是 node 允许额外的选项 (比如 customWorkspace )

pipeline定义:

pipeline {
    agent {
        label 'test1'
    }

    stages {
        stage('Hello') {
            steps {
                echo 'Hello World'
            }
        }
    }
}

stage阶段定义:

pipeline {
    agent any

    stages {
        stage('Hello') {
            agent {
                label 'test1'
            }
            steps {
                echo 'Hello World'
            }
        }
    }
}

post

post部分定义一个或多个steps,这些阶段根据流水线完成情况而运行

  • always:无论流水线完成状态如何,都继续运行
  • changed:当前流水线完成状态与之前不同时,运行该步骤
  • failure:当前流水线完成状态失败时,运行该步骤
  • success:当前流水线完成状态成功时,运行该步骤
  • unstable:当前流水线完成状态不稳定时,运行该步骤
  • aborted:当前流水线完成状态中断时,运行该步骤
pipeline {
    agent any

    stages {
        stage('Hello') {
            steps {
                echo 'Hello World'
                //echox 'hello world' (失败时)
            }
        }
    }
    post {
        always {
            echo "无论如何都运行"
        }
        failure {
            echo "失败后运行"
        }
        success {
            echo "执行成功后运行"
        }
        aborted {
            echo "异常中断运行"
        }
    }
}

模拟不同状态
always + success
在这里插入图片描述
always + aborted
在这里插入图片描述
always + failure
在这里插入图片描述

stages

包含一个或多个stage指令,至少包含一个

stage

一个stage标识一个阶段

steps

定义一些列一个或多个步骤操作

pipeline {
    agent any

    stages {
        stage('Hello') {
            steps {
                echo 'Hello World'
                sh 'date'
                sh 'pwd'
            }
        }
    }
}

environment

定义为所有步骤的环境变量,全局变量/局部变量取决于environment在流水线的那个位置

示例

pipeline {
    agent any
    environment {
        CC = '全局变量'
    }

    stages {
        stage('Hello') {
            environment {
                VV = '局部变量'
            }
            steps {
                echo "this is ${CC}"
                echo "this is ${VV}"
            }
        }
    }
}

结果
在这里插入图片描述

options

允许从流水线内部配置特定的选项,比如timestamps

  • disableConcurrentBuilds:禁止并发构建
  • skipStagesAfterUnstable:构建状态不稳定时,跳过
  • timeout:运行超时时间
  • retry:失败时,重新构建的次数
  • timestamps:控制台时间输出
  • ansiColor:日志输出中启用ANSI颜色代码的支持

示例

pipeline {
    agent any
    options {
        ansiColor('xterm')
        disableConcurrentBuilds()
        retry(3)
        timeout(time: 30, unit: 'SECONDS')
        timestamps()
        skipStagesAfterUnstable()
    }

    stages {
        stage('Hello') {
            steps {
                echo "hello world"
                echo "\033[32mThis text is green\033[0m"
            }
        }
    }
}

结果
在这里插入图片描述

parameters

提供用户在触发流水线时应该提供的参数列表,参数化构建

  • string:字符串类型参数
  • booleanParam:布尔参数
  • choice:从预定义选项列表中选择
  • password:密码参数

示例

pipeline {
    agent any
    parameters {
        string (defaultValue: 'master', description: '主分支区分', name: 'BRANCH_NAME')
        choice (choices: ['dev', 'prod', 'pre'], description: '环境区分', name: 'ENVIRONMENT')
    }

    stages {
        stage('Example') {
            steps {
                checkout scmGit(branches: [[name: '${BRANCH_NAME}']], extensions: [], userRemoteConfigs: [[credentialsId: 'ae008f10-597f-4332-b2f7-790c9b01074e', url: 'https://gitee.com/liujiangxu/dubbo-demo-web.git']])
            }
        }
        stage('deploy') {
            steps {
                script {
                    echo "Deploying to ${ENVIRONMENT} environment"
                }
            }
        }    
    }
}

结果
在这里插入图片描述
在这里插入图片描述

triggers

定义流水线被重新触发的自动化方式

  • cron:执行间隔,类似任务计划
  • pollSCM:在设置间隔中,jenkins会检查新的源代码更新,如果更新,会被触发
  • upstream:其他工程构建后触发

cron示例

pipeline {
    agent any
    triggers {
        cron 'H(29-30) */4 * * * '
    }

    stages {
        stage('Example') {
            steps {
                echo 'Hello World'
            }
        }
    }
}

upstream示例

pipeline {
    agent any
    triggers {
        upstream 'ceshi-pip'
    }

    stages {
        stage('Example') {
            steps {
                echo '当ceshi-pip任务执行后,触发我自动执行'
            }
        }
    }
}

pollSCM示例

pipeline {
    agent any
    triggers {
        pollSCM '* * * * *'
    }

    stages {
        stage('checkout') {
            steps {
                checkout scmGit(branches: [[name: '*/master']], extensions: [], userRemoteConfigs: [[credentialsId: 'ae008f10-597f-4332-b2f7-790c9b01074e', url: 'https://gitee.com/liujiangxu/dubbo-demo-web.git']])
                echo "源代码已更新"
            }
        }
        stage('build') {
            steps {
                sh 'mvn clean package -DskipTests=true'
            }
        }
        stage('deploy') {
            steps {
                echo "实际部署步骤,如执行脚本部署等操作"
            }
        }
    }
}

tools

定义自动安装和放置PATH的工具一部分,根据全局工具配置选项自定义选择(例如不同业务需要不同的jdk8或者jdk11)如果 agent none 指定,则忽略该操作

  • maven:编译环境
  • jdk:java环境

示例

pipeline {
    agent any
    tools {
        jdk 'openjdk11.0.18'
        maven 'maven1'
    }

    stages {
        stage('Example') {
            steps {
                sh 'mvn --version'
                sh 'java -version'
            }
        }
    }
}

when

指令允许流水线根据给定的条件决定是否执行该阶段。when必须包含一个条件,当包含多个条件时,所有子条件必须返回true才会执行

  • branch:用于检查当前构建的分支是否与指定的分支模式匹配时执行
  • environment:用于检查环境变量是否满足给定的名称和值。如果环境变量存在且值匹配时执行
  • not:用于反转另一个条件的结果。如果内部条件不满足(即返回false)时执行
  • allOf:用于组合多个条件,只有当所有子条件都满足时(即都返回true)时执行
  • anyOf:用于组合多个条件,但与allOf不同,只要至少一个子条件满足(即返回true),就会执行

bracnch示例

pipeline {
    agent any

    stages {
        stage('build on master') {
            when {
                branch 'master'
            }
            steps {
                echo '构建为master分支时执行' //跳过执行
            } 
        }    
    }
}

environment示例

pipeline {
    agent any
    
    stages {
        stage('deploy to prod') {
            environment {
                DEPLOY_X = 'dev'
            }
            when {
                environment name: 'DEPLOY_X', value: 'prod'
            }
            steps {
                echo '当变量参数为prod环境时执行' //跳过执行
            } 
        }    
    }
}

not示例

pipeline {
    agent any
    environment {
        DEPLOY_X = "dev"
    }
    
    stages {
        stage('not build on master') {
            when {
                 not {
                    environment name: 'DEPLOY_X', value: 'prod'
                }
            }
            steps {
                echo '当变量参数不为prod环境时执行' //会执行
            } 
        }    
    }
}

allOf 示例

pipeline {
    agent any
    environment {
        DEPLOY_X = "prod"
    }
    
    stages {
        stage('not build on master') {
            when {
                allOf {
                    environment name: 'DEPLOY_X', value: 'prod'
                    not {
                        branch 'master'
                    }
                }
            }

            steps {
                echo '当环境变量等于prod 和 分支不属于master时执行(即所有条件都满足)'//会执行
            } 
        }    
    }
}

anyOf 示例

pipeline {
    agent any
    environment {
        DEPLOY_X = "prod"
    }
    
    stages {
        stage('not build on master') {
            when {
                anyOf {
                    branch 'master'
                    environment name: 'DEPLOY_X', value: 'prod'
                }
            }

            steps {
                echo '当环境变量等于prod 或者 分支属于master时执行(即所有条件满足一项即可)' //会执行
            } 
        }    
    }
}

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

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

相关文章

提升工作效率神器

这五款软件让你事半功倍 在当今快节奏的社会中,提高工作效率成为了每个人追求的目标。而在这个数字化时代,选择对的软件工具无疑是提高效率的关键。今天,我为大家推荐五款优秀的工作效率软件,帮助你在工作中事半功倍。 1、亿可达…

15个 Jenkins 面试题

Jenkins 已成为持续集成和持续部署 (CI/CD) 流程中使用最广泛的自动化服务器之一。凭借其强大的功能和广泛的插件生态系统,Jenkins 已成为全球软件开发团队的首选工具。如果您正在准备 Jenkins 面试,那么精通其概念、架构和最佳实践至关重要。 为了帮助…

1.3 MySql的用户管理

一、下载Mysql客户端 下载navicat:Navicat 中国 | 支持 MySQL、Redis、MariaDB、MongoDB、SQL Server、SQLite、Oracle 和 PostgreSQL 的数据库管理 二、安装Navicat 三、创建数据库 创建一个数据库的连接吧,因为这个界面儿是图形界面儿,所以我们创建…

深入分析MySQL事务日志-Redo Log日志

文章目录 事务日志-Redo Log2.1 Redo Log2.1.1 Redo Log与持久性2.1.2 Redo Log的工作原理2.1.3 Redo Log的落盘策略2.1.4 Redo Log的系统参数 事务日志-Redo Log 事务的隔离性是通过锁实现,而事务的原子性、和持久性则是通过事务日志实现。在MySQL中,事…

【吉林大学编译原理题库】正则表达式的书写

1. 2. 选A 3. 没啥好说的,按意思写就行: 4. 5.设字母表S{0,1},写正则表达式表示所有偶数个0和偶数个1组成的字符串。 6. 设字母表S{0,1},写正则表达式表示所有偶数个0和奇数个1组成的字符串。(提示&am…

Token usage of Content Filtered messages in Azure OpenAI Services

题意:在Azure OpenAI服务中,内容过滤消息的令牌使用 问题背景: When sending a message to a chat via GetChatCompletions as a response, I get a RequestFailedException. In the exception, I get an answer for which category content…

2-101基于matlab的频带方差端点检测

基于matlab的频带方差端点检测,噪声频谱中,各频带之间变化很平缓,语音各频带之间变化较激烈。据此特征,语音和噪声就极易区分。计算短时频带方差,实质就是计算某一帧信号的各频带能量之间的方差。这种以短时频带方差作…

揭秘MySQL主从复制:打造高可用性与数据冗余的强效引擎

作者简介:我是团团儿,是一名专注于云计算领域的专业创作者,感谢大家的关注 座右铭: 云端筑梦,数据为翼,探索无限可能,引领云计算新纪元 个人主页:团儿.-CSDN博客 目录 前言&#…

从Web2到Web3:探索下一代互联网的无限可能性

互联网经历了从Web1到Web2的重大变革,现在正迈向Web3。Web2通过社交媒体、电子商务和内容平台改变了我们的数字生活,但同时也伴随着中心化平台的垄断和用户数据被广泛控制的问题。而Web3的出现,则试图通过去中心化技术解决这些挑战&#xff0…

人到中年,最清醒的活法—沉浸式做自己

生活中,你是不是常常被这样的事情所困扰? 工作的时候,每天被千头万绪的杂事缠身,看着一堆待完成事项,和工作群里一堆的消息在轰炸你,内心顿感烦躁甚至暴怒。 经常因为领导,同事或者熟人甚至陌生…

java 洛谷题单【算法1-7】搜索

P1219 [USACO1.5] 八皇后 Checker Challenge 解题思路 回溯法 递归与回溯: 从第0行开始,为每个行尝试放置棋子的位置,检查放置是否违反约束条件。如果放置合法,则继续递归处理下一行(即下一层递归)。如果当前行无法找…

【Go语言】深入解读Go语言中的指针,助你拨开迷雾见月明

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…

浅谈提示工程之In-context learning技术

提示工程之In-context learning技术; 通过一张图片围绕下边几个方面进行简单说明 概念起因本质结构注意事项 日常总结

SQL语法学习与实战应用

第一章 引言 1.1 MySQL数据库概述 MySQL,作为一种广泛使用的关系型数据库管理系统,自其问世以来,便凭借开源、高性能及低成本等显著特点,迅速占据了广泛的市场份额。这一系统不仅支持大规模并发访问,更提供了多样化的…

【最新华为OD机试E卷-支持在线评测】绘图机器(100分)多语言题解-(Python/C/JavaScript/Java/Cpp)

🍭 大家好这里是春秋招笔试突围 ,一枚热爱算法的程序员 💻 ACM金牌🏅️团队 | 大厂实习经历 | 多年算法竞赛经历 ✨ 本系列打算持续跟新华为OD-E/D卷的多语言AC题解 🧩 大部分包含 Python / C / Javascript / Java / Cpp 多语言代码 👏 感谢大家的订阅➕ 和 喜欢�…

【ARM】MDK-当选择AC5时每次点击build都会全编译

1、 文档目标 解决MDK中选择AC5时每次点击build都会全编译 2、 问题场景 在MDK中点击build时,正常会只进行增量编译,但目前每次点击的时候都会全编译。 3、软硬件环境 1 软件版本:Keil MDK 5.38a 2 电脑环境:Window 10 4、解决…

新手操作指引:快速上手腾讯混元大模型

引言 腾讯混元大模型是一款功能强大的AI工具,适用于文本生成、图像创作和视频生成等多种应用场景。对于新手用户,快速上手并充分利用这一工具可能会有些挑战。本文将提供详细的新手操作指引,帮助您轻松开始使用腾讯混元大模型。 步骤一&…

kubernetes网络(二)之bird实现节点间BGP互联的实验

摘要 上一篇文章中我们学习了calico的原理,kubernetes中的node节点,利用 calico 的 bird 程序相互学习路由,为了加深对 bird 程序的认识,本文我们将使用bird进行实验,实验中实现了BGP FULL MESH模式让宿主相互学习到对…

个人行政复议在线预约系统开发+ssm论文源码调试讲解

第二章 开发工具及关键技术介绍 2.1 JAVA技术 Java主要采用CORBA技术和安全模型,可以在互联网应用的数据保护。它还提供了对EJB(Enterprise JavaBeans)的全面支持,java servlet API,JSP(java server pages…

Pygame中Sprite实现逃亡游戏2

在《Pygame中Sprite实现逃亡游戏1》中实现了奔跑的玩家,接下来实现显示追赶玩家的飞龙以及对面过来的飞火。 1 显示飞龙 显示飞龙的代码如图1所示。 图1 显示飞龙的代码 其中,第93行代码创建了精灵类MySprite的实例dragon;第94行代码导入飞…