首页 > 其他分享 >2、Pipeline语法及使用自定义工具的Maven工程

2、Pipeline语法及使用自定义工具的Maven工程

时间:2023-04-21 22:01:21浏览次数:37  
标签:Pipeline 自定义 pipeline 指定 Maven steps stages 运行 stage

Pipeline语法

声明式pipeline的结构
 pipeline的定义有一个明确的、必须遵循的结构,它由一些directive(指令)和section(配置段)组成,每一个section又可包含其它的section、directive和step(执行步骤),以及一些condition(执行条件)的定义;
   ◼ Section:用于将那些在某个时间点需要一同运行的条目(item)组织在一起
      ◆ agent section:指定负责运行代码的节点
      ◆ stages section:组织一到多个stage
      ◆ steps section:组织一至多个DSL格式的步骤;
      ◆ post section:在stage或整个pipeline的尾部封装一些需要被执行的步骤或者检验条件
   ◼ Directive(指令):负责完成特定功能的语句或代码块,如environment(环境变量)、tools(引用全局工具)、triggers(触发器)、input(与人交互的参数)和when(定义执行条件)等;
   ◼ Steps:steps本身就是一个标识特定section的名称,其内部可以使用任何合法的
DSL语句,例如git、sh、bat和echo等;
下图中的实线部分,为必选的配置参数
pipeline {
  agent any
  stages {
    stage(‘<stage_name>’) {
      steps { … }
    }
  }
}

2、Pipeline语法及使用自定义工具的Maven工程_Pipeline语法

Pipeline支持的指令
 Jenkins Pipeline支持指令主要有如下这些
   ◼ environment:设定环境变量,可用于stage或pipeline代码块中;支持credentials()函数,用于通过标识符访问预定义的凭证;
   ◼ tools:指定需要在agent上下载并配置的工具,例如git、maven、jdk等,这些工具可经由PATH环境变量指定的位置访问到;可用于stage或pipeline中;
   ◼ parameters:用户在触发pipeline时应该提供的参数列表;仅可用于pipeline级别;
   ◼ options:仅可用在pipeline级别来配置pipeline自身的选项,支持的参数可由pipeline自身提供,也可由其它插件(例如timestamps)提供;
      ◆ 例如“retry(2)”允许在pipeline失败时重试两次;
   ◼ triggers:用于指定负责自动启动pipeline的触发器,对于集成了Github或Gitlab等自带触发机制的系统场景来说,triggers并非必须的指令;仅可用于pipeline级别;
   ◼ libraries:当前pipeline可以导入的共享库,该共享库内部的代码则可被该pipeline调用;
   ◼ stage:负责在stages配置段中封装steps配置段,以及其它可用于stage中的指令;
   ◼ input:stage中的专用指令,用于暂停pipeline并提示用户输入内容后继续;
   ◼ when:stage中的专用指令,用于设定该stage的运行条件;
Section: agent(在整个流水下的最前或stage的最前定义)
 agent用于指明使用哪一个节点去执行pipeline或stage中的代码;
   ◼ 在pipeline代码块的顶部,必须要有一个agent来指定“默认”的执行节点
   ◼ 而一个stage的顶部也可以有一个agent的定义,用来指定负责运行该stage中的代码的节点
 agent可接受多种形式的参数
   ◼ any:任何可用节点
   ◼ none:用于pipeline顶端时表示不定义默认的agent,这就需要为每个stage单独指定
   ◼ label { label "<label>" }:具有指定的标签的节点均为可用节点
   ◼ node { label "<label>" }:与label相似,但可以指定额外的参数customWorkspace(自定义的工作空间)
   ◼ docker:在指定的容器中运行pipeline或stage代码,该容器动态创建并运行于预配置的可运行容器的node上,或能够匹配到指定label的node上;可用参数如下
      ◆ image、label、args、rgistryUrl和registryCredentialsId;
   ◼ dockerfile:功能上类似于上面docker参数,但容器镜像通过指定的docker进行构建;该参数要求Jenkinsfile必须从Multibranch Pipeline或者Pipeline from SCM中加载;可用参数如下
      ◆ filename、dir、label、additionalBuildArgs、args、registryUrl和registryCredentialsId;
   ◼ kubernetes:于Kubernetes集群上指定的Pod中运行stage或pipeline代码,该参数同样要求Jenkinsfile必须从Multibranch Pipeline或者Pipeline from SCM中加载;
      ◆ 需要在kubernetes参数中指定Pod模板;
 详情请参考: https://www.jenkins.io/doc/book/pipeline/syntax/
Section: post(在每一个的stage之后或整个流水线的最后定义)
 post section在stage或pipeline的尾部定义一些step,并根据其所在stage或pipeline的完成情况来判定是否
运行这些step;
 post section支持的condition如下
   ◼ always:总是运行
   ◼ changed:其所处的stage或pipeline同前一次运行具有不同状态时,才运行该post
   ◼ fixed:stage或pipeline本次运行成功,但前一次为failed或unstable时,才运行该post
   ◼ regression:stage或pipeline前一次运行成功,但本次为failure、unstable或aborted时,才运行该post
   ◼ aborted:stage或pipeline的运行状态为aborted时,才运行该post;在Web UI中灰色显示
   ◼ failure: stage或pipeline的运行状态为failed时,才运行该post
   ◼ success:stage或pipeline的运行状态为success时,才运行该post
   ◼ unstable:因测试失败或代码冲突导致stage或pipeline的运行状态为unstable时,才运行该post;在Web UI中以黄色显示
   ◼ unsuccessful:stage或pipeline的运行不成功时,才运行该post
   ◼ cleanup:在其它所有的post的条件均被评估后(无论stage或pipeline的状态为何)才运行该post
Section: stages和steps
stages
 stages:封装了用于定义pipeline主体和逻辑的所有stage的定义,它包含一个或多个stage指令, 
◼ stages负责描述pipeline中绝大部分的实际工作(work)
◼ 事实上,stages中至少需要包含一个stage指令来定义CD过程的每个离散部分,例如构建、测试和部署等
 steps:负责在stage中定义一到多个DSL语句,这些语句负责完成该stage中特定的功能;但能够同其它
的语句分隔开,如environment等


pipeline {
  agent any
  stages {
    stage('Example’) {
      // stage中必须要包含steps;
       steps { // step中至少应该有一个DSL语句;
          echo 'Hello World'
       }
    }
  }
}

2、Pipeline语法及使用自定义工具的Maven工程_Pipeline语法_02

steps(在流水线中真正执行具体任务的关键内容)
 Pipeline的基本结构决定了pipeline的整体流程,但真正“做事”的还是其内部一个个具体的step,因而
steps是pipeline中最核心的组成部分;
   ◼ 除了script,几乎所有的step在pipeline中都是不可拆分的原子操作;
   ◼ pipeline内置了大量的step,具体请参考https://www.jenkins.io/doc/pipeline/steps;
   ◼ 除此之外,有相当一部分插件可直接当作step来用;
 script{}步骤负责将脚本引入到steps{}配置段中,但它非为必要的步骤,且复杂的脚本应该单独组织为
Shared Libraries,并由Pipeline导入后使用
pipeline内置的常用step
 文件/目录相关
   ◼ deleteDir:删除当前目录;
   ◼ dir("/path/to/dir"):切换到指定目录;
   ◼ fileExists ("/path/to/dir") :判断文件是否存在;
   ◼ isUnix:判断是否为类Unix系统;
   ◼ pwd:打印当前目录;
   ◼ writeFile:将内容写入指定的文件中,支持如下几个参数
      ◆ file:文件路径,支持相对路径和绝对路径;
      ◆ text:要写入的内容;
      ◆ encoding:目标文件的编码,空值为系统默认的编码;支持base64编码格式;可选参数;
   ◼ readFile:读取文件的内容;支持如下几个参数;
      ◆ file:文件路径,支持相对路径和绝对路径;
      ◆ encoding:读取文件内容时使用的编码格式;可选参数;

 消息或控制
   ◼ echo("message"):打印指定的消息;
   ◼ error("message"):主动报错,并中止当前pipeline;
   ◼ retry(count){}:重复执行count次在{}中定义的代码块;
   ◼ sleep:让pipeline休眠一段时间,支持如下参数;
      ◆ time:整数值,休眠时长;
      ◆ unit:时间单位,支持NANOSECONDS、MICROSECONDS、MILLISECONDS、SECONDS、MINUTES、HOURS和DAYS,可选参数;
   ◼ timeout:代码块的超时时长,支持如下参数;
      ◆ time:整数值,休眠时长;
      ◆ unit:时间单位,支持NANOSECONDS、MICROSECONDS、MILLISECONDS、SECONDS、MINUTES、HOURS
和DAYS,可选参数;
      ◆ activity:布尔类型,值为true时,表示在该代码块不再有日志活动时才算真正超时;可选参数;
   ◼ waitUntil:等待指定的条件满足时执行定义的代码块;
      ◆ initialRecurrencePeriod:初始的重试周期,即测试条件是否满足的重试周期,默认为250ms;可选参数;
      ◆ quiet:是否禁止将每次的条件测试都记入日志,默认为false,即记入日志;可选参数;
      
 发送通知
   ◼ mail:向指定邮箱发送邮件;
      ◆ subject:邮件标题;
      ◆ body:邮件正文;
      ◆ from (optional):发件人地址列表,逗号分隔;
      ◆ cc (optional) :CC email地址列表,逗号分隔;
      ◆ bcc (optional):BCC email地址列表,逗号分隔;
      ◆ charset (optional):编码格式;
      ◆ mimeType (optional):Email正文的MIME类型,默认为text/plain;
      ◆ replyTo (optional):回件地址,默认为Jenkins设置的全局配置中的邮箱地址;
Pipeline的常用步骤
 Node和Process相关
   ◼ bat:Windows的批处理脚本;
   ◼ powershell:运行指定的PowerShell脚本,支持Microsoft PowerShell 3+;
   ◼ pwsh:PowerShell Core Script
   ◼ node:在指定的节点上运行后续的脚本;
   ◼ sh:运行shell脚本,支持的参数如下
      ◆ script{}:脚本代码块,支持指定脚本解释器,例如“#!/usr/bin/perl,否则将使用系统默认的解释器,且使用了-xe选项”;
      ◆ encoding (optional):脚本执行后输出的日志信息的编码格式,未定义时使用系统默认编码格式;
      ◆ label (optional):显示在Web UI中的详细信息;
      ◆ returnStdout (optional):布尔型值,true表示任务的标准输出将作为step的返回值,而不是打印到日志中;若有错误,依然会记入日志;
      ◆ returnStatus (optional):正常情况了命令执行失败会返回非零状态码,设定该参数值为true时,表示将返回该step的结果,而非状态码;
   ◼ ws:分配工作空间;
Stages和Stage
 显然,states是pipeline中最重的section,Jenkins会按照stages中
定义的顺序自下而后执行各个stage;

 stage内部还能再嵌套一个stages{}或一个parallel{}代码块,而
后在这些代码块内部再嵌套stage,以指定stage的运行顺序;
   ◼ stage内部嵌套stages{},用于指定以顺序(串行)方式依次运行该stages{}内部的各stage;
   ◼ 而stage内部嵌套的parallel{},用于指定以并行方式运行该parallel{}内部的各stage;

2、Pipeline语法及使用自定义工具的Maven工程_Pipeline语法_03


 需要注意以下几点
   ◼ stage内部仅能定义steps、stages、parallel或matrix四者其中之一,且多层嵌套只能用在最后一个stage中;
   ◼ 对于本身已经嵌套在parallel或matrix内部的stage来说,不支持在其内部再使用parallel或matrix;但仍能使用agent、tools和when等其它指令,甚至是stages{}配置段以顺序运行stage;

2、Pipeline语法及使用自定义工具的Maven工程_Pipeline语法_04

使用自定义工具的Maven工程
 调用名为“maven-3.8.7”全局构建工具
◼ 构建工具程序默认安装在${JENKINS_HOME}/tools/目录下
◼ “
maven-3.8.7”就位于该目录下的hudson.tasks.Maven_MavenInstallation/maven-3.8.7/子目录中;
一:在jenkins上全局工具配置上安装maven和JGit

2、Pipeline语法及使用自定义工具的Maven工程_使用自定义工具的Maven工程_05

2、Pipeline语法及使用自定义工具的Maven工程_使用自定义工具的Maven工程_06

二:把以下代码粘贴到pipeline-job-01中
pipeline {
    agent any
    tools {
        maven 'maven-3.8.7'
    }
    stages {
        stage('Source') {
            steps {
                git branch: 'main', url: 'http://gitlab.mengfanchao.com/root/spring-boot-helloWorld.git'
            }
        }
        stage('Build') {
            steps {
                sh 'mvn -B -DskipTests clean package'
            }
        }
        stage('Test') {
            steps {
                sh 'mvn test'
            }
        }
    }
}

2、Pipeline语法及使用自定义工具的Maven工程_使用自定义工具的Maven工程_07

立即构建

2、Pipeline语法及使用自定义工具的Maven工程_Pipeline语法_08

2、Pipeline语法及使用自定义工具的Maven工程_使用自定义工具的Maven工程_09

标签:Pipeline,自定义,pipeline,指定,Maven,steps,stages,运行,stage
From: https://blog.51cto.com/mfc001/6214238

相关文章

  • maven项目文件资源导出配置
    配置原因maven项目会自动导出resource目录下的资源配置文件,但有时项目中不仅仅会把所有资源配置文件放在resources中,这时maven不会把其他目录下的资源导出到target目录中去,导致资源配置文件读取失败,项目报错出现异常,此时需要在pom.xml文件中进行配置。 <!--在build中配......
  • ruoyi框架自定义导出的Excel文件名
      https://www.cnblogs.com/an-drew/p/ruoyi-custom-excel.html#!comments这是ruoyi界面的导出按钮,点击导出后 默认导出的Excel文件名是: Unix时间戳+Controller传入的sheetName+.xlsx(对应下图中的文件名:1602402277993+info+.xlsx)  但是我想要的自定义E......
  • 2.自定义@Excel注解实现数据Excel形式导入导出
    https://zzpc.net/content/206150.html前言这几天在学习如何使用自定义注解实现Excel格式数据导入导出,参考的还是若依框架里面的代码,由于是初学,所以照猫画虎呗,但是难受的是需要复制并根据自己项目修改作者自定义的工具类以及导入这些工具类的依赖包。由于吃了这个苦,我决定把......
  • 1、Pipeline Job的简单构建与代码片断生成器
    PipelineJob脚本式语法和声明式语法Jenkins2.x支持两种pipeline语法:脚本式语法和声明式语法脚本式流水线://脚本式流水线:node用于脚本式流水线,从技术层面上来说,//它是一个步骤,代表可以用于流水线中执行活动的资源node('node01'){stages{stage('Build'){steps......
  • Spring Boot中 自定义注解
    SpringBoot中自定义注解定义一个注解创建一个Java注解,可以使用@interface关键字来定义,例如:less@Target(ElementType.METHOD)@Retention(RetentionPolicy.RUNTIME)public@interfaceMyAnnotation{Stringvalue()default"";}这个注解称为MyAnnotation,并且它具......
  • 【汇智学堂】微服务-SpringBoot环境搭建之一maven下载安装
    一、下载maven3.6.2http://maven.apache.org/download.cgi下载完成后,解压到某个目录。本人目录如下。(C:\Users\leilei\Desktop\apache-maven-3.6.2-bin\apache-maven-3.6.2)二、配置环境变量系统环境变量里,添加MAVEN_HOME(或M2_HOME),其值为C:\Users\leilei\Desktop\apache-maven......
  • maven
    1.maven下载与安装maven下载页面:https://maven.apache.org/download.cgi或者你也可以选择之前的版本:然后里面选择自己对应的版本下载即可:指定本地仓库:本地仓库默认值:用户家目录/.m2/repository。如果想指定其他目录配置方式如下:<!--localRepository|Thepathtoth......
  • phpStorm自定义快捷键,输出代码块,模板
    在开发过程中经常需要打印数据调试,var_dump()或print_r都没办法直观的查看数据,我一般用如下代码打印数据,但是每次手动输入又麻烦,所以设置一个快捷键就能输出一下代码,岂不是一劳永逸:1.进入设置对话框:File->Setting2.接下自定义快捷键:按一下步骤操作完,点击"ok"键![在这......
  • tableViewCell 自定义圆角
     在一个多cell的Tab了View中设置第一个和最后一个cell的圆角其实还是贝塞尔去画给cell加一个view -(void)tableView:(UITableView*)tableViewwillDisplayCell:(UITableViewCell*)cellforRowAtIndexPath:(NSIndexPath*)indexPath{  if(indexPath.row==0&&......
  • Spring 自定义属性编辑器
    装Spring自定义属性编辑器 SpringDI注入的时候可以把普通属性注入进来,但是像Date类型的就无法被识别。这时可以通过Spring的属性编辑器把配置文件中的字符串转化成相应的对象进行注入。Spring有自带的属性编辑器,我们也可以写自定义的属性编辑器 自定义属性编辑器:继承java.bean......