Jenkins-Pipeline基本使用

这篇具有很好参考价值的文章主要介绍了Jenkins-Pipeline基本使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Jenkins-Pipeline

使用Groovy语法

Pipeline 是Jenkins 2.X核心特性,帮助Jenkins实现从CI到CD与DevOps的转变

Pipeline 简而言之,就是一套运行于Jenkins上的工作流框架,将原本独立
运行于单个或者多个节点的任务连接起来,实现单个任务难以完成的复杂流
程编排与可视化

支持语法:

1、声明式(仅在2.5版本后支持)

特点:

1.最外层必须由pipline{ //do something }来进行包裹

2.不需要分号作为分隔符,每个语句必须在一行内

3.不能直接使用groovy语句(例如循环判断等),需要被script {}包裹

2、脚本式

特点:

1.最外层使用node{}进行包裹

2.可直接使用groovy语句

声明式核心概念

基本流程:

1.pipeline :声明其内容为一个声明式的pipeline脚本,位于整个pipeline最外层,包裹整个pipeline

2.agent:执行节点(job运行的slave或者master节点),any表示任意节点

3.stages:阶段集合,包裹所有的阶段(例如:打包,部署等各个阶段)

4.stage:阶段,被stages包裹,一个stages可以有多个stage,每个stage表示pipeline中的一个流程

5.steps:步骤,为每个阶段的最小执行单元,被stage包裹**(必须项,即stage下必须存在steps)**

6.post:执行构建后的操作,根据构建结果来执行对应的操作

步骤拆分:

1、pipeline (声明式头头,最高)

作用域:应用于全局最外层,表明该脚本为声明式pipeline

是否必须:必须

参数:无

2、agent(规定谁来执行,以什么方式执行)

作用域:可用在全局与stage内

是否必须:是,

参数:any,none, label, node,docker,dockerfile

any

​ 代表任意节点均可执行,pipeline下的agent参数为必须项

pipeline{
    agent any  
    stages {
        stage('First'){
            steps {
                echo "test"
            }
        }
    }
}

none

​ 当参数为none时,每个stage必须表明执行该步骤的agent

pipeline{
    agent none  
    stages {
        stage('First'){
            agent any
            steps {
                echo "test"
            }
        }
    }
}

label

​ 当参数为label时,label后的标签表示运行在指定机器上,label值由Jenkins配置进行控制(节点列表–管理节点)

pipeline{
    agent {
        label 'test01'
    }  
    // agent {
    //     node {
    //         label 'test01'
    //         customWorkspace 'xxx'   // 工作路径
    //     }
    // }  // 该写法与上面完全一致,多了更多的参数选项
    stages {
        stage('First'){
            steps {
                echo "test"
            }
        }
    }
}

docker

​ 当agent为docker时,当Pipeline执行时,Jenkins将自动启动指定的容器并在中

执行预定义的步骤,步骤执行完成后pipeline会自动删除对应的容器。

​ 并且docker参数可使用args来为容器启动传入变量等

pipeline {
    agent none
    stages {
        stage('Back-end') { // 该步骤将使用maven:3.8.1-adoptopenjdk-11容器执行下方steps
            agent {
                docker { image 'maven:3.8.1-adoptopenjdk-11' }
            }
            steps {
                sh 'mvn --version'
            }
        }
        stage('Front-end') {
            agent {
                docker { 
                    image 'node:16.13.1-alpine' 
                    args  '-e TEST=123'  // 等同于docker run -e TEST=123
                    reuseNode true  // 可能为不会删除临时容器,并在同一节点启动该容器。
                }
            }
            steps {
                sh 'node --version'
            }
        }
    }
}

dockerfile

​ 使用一个Dockerfile创建一个docker容器用于运行流水线,默认为:

agent { 
  dockerfile true 
}

如果项目的Dockerfile存放在子目录下需通过dir参数声明,如果Dockerfile名字

是其他自定义名则需通过filename参数声明,除此之外还可以通过

additionalBuildArgs来设置docker build参数,使用registryUrl来设置docker仓库,

使用registryCredentialsId从jenkins获取docker仓库的账号密码。

agent {
    // Equivalent to "docker build -f Dockerfile.build --build-arg version=1.0.2 ./build/
    dockerfile {
        filename 'Dockerfile.build'
        dir 'build'
        label 'my-defined-label'
        additionalBuildArgs  '--build-arg version=1.0.2'
        args '-v /tmp:/tmp'
        registryUrl 'https://myregistry.com/'
        registryCredentialsId 'myPredefinedCredentialsInJenkins'
    }
}

kubernetes

在kubernetes集群中的一个pod内执行pipeline流水线,pod模版将定义在

kubernetes{}模块中。如果需要在pod中安装kaniko则可在yaml参数中声明。

3、stages(声明接下来要正式开始pipeline了!)

pipeline中作为集合声明存在,告诉你下面要按照stage的配置执行步骤了。内含一个或多个stage

4、stage(步骤)

构建阶段模块。定义构建阶段要做的事情,每个pipeline流水线至少包含一个stage。一个stage里有且只有一个step

5、steps(具体要干啥)

一个steps中可包含一个或多个命令

通常情况下,直接使用命令即可:

stages {
	stage('Test') {
		steps {
			echo "test"
		}
	}
}

若要使用Groovy语法进行脚本式pipeline的编写,则必须使用script进行包裹:

stages {
    stage('Test') {
        steps {
            script {
                sh "echo 'test'"
            }
        }
    }
}
6、environment (设置能够被调用的环境变量)

​ 指定一个 键-值对序列,该序列将被定义为所有步骤的环境变量,或者是特定于阶段的步骤, 这取决于environment 指令在流水线内的位置

顶层流水线块中使用的 environment 指令将适用于流水线中的所有步骤

pipeline {
    agent any
    environment {  // 该变量在整个流水线中均可使用
        key1 = 'Test1'
    }
    stages {
        agent any
        stage('Test') {
            steps {
                echo key1
            }
        }
    }
}

一个 具体的stage 中定义的 environment 指令只会将给定的环境变量应用于 stage 中的步骤

pipeline {
    agent any
    stages {
        agent any
        stage('Test') {
        	environment {
                key2 = 'Test2'
            }
            steps {
                echo key2
            }
        }
    }
}          

还支持通过credentials()获取预设的账号密码

支持的credential类型包括:

Secret Text 该环境变量的值将会被设置为Secret Text的内容

Secret File 该环境变量的值将会被设置为临时创建的文件路径。

Username and password 该环境变量的值将会被设置为username:password, 并且还会自动创建两个环境变量:MYVARNAME_USRMYVARNAME_PSW

SSH with Private Key 该环境变量的值将会被设置为临时创建的ssh key文件路径,并且还会自动创建两个环境变量:MYVARNAME_USRMYVARNAME_PSW

7、options(配置参数)

分为两种:全局options(声明在最外层,作用于整个流水线)、局部options(声明在具体的stage里,只在该stage里生效)

局部options参数

skipDefaultCheckout 跳过从源代码控制中检出代码的默认情况

**timeout ** 设定pipeline执行超时时间,time表示具体值,unit表示时间单位

**retry ** 指定失败重试次数

**timestamps ** 日志里都会打印执行时间(需配合Timestamper插件)

stage('test') {
    options {
        skipDefaultCheckout()
    }
}
-------------------------------------------------------
stage('test') {
    options {
        timeout(time:'1',unit:'HOURS')  //超时时间一小时
    }
}
-------------------------------------------------------
stage('test') {
    options {
        retry(5)
    }
}
-------------------------------------------------------
stage('test') {
    options {
        timestamps()
    }
}

全局options参数

buildDiscarder pipeline 保持构建的最大个数

disableConcurrentBuilds 不允许并行构建

newContainerPerStage 与docker或dockerfile代理一起使用,表示每个stage都将在同一个节点里启动新容器运行而不是在同一个容器中运行

quietPeriod pipeline延时启动时间

pipeline {
	agent any
    options {
        buildDiscarder(logRotator(numToKeepStr: '5'))
        // 保留最大构建数
    }
}
8、parameters(触发构建时的参数)

parameters声明当构建触发时用户要输入的所有参数,steps指令将通过params对象获取这些参数

// git仓库拉取,需要配合Git Parameter插件使用
parameters {
    gitParameter(branch: '', branchFilter: 'origin/(.*)', 
                 defaultValue: 'feature/4.1.1',                            description: '发布选项: 请选择GIT分支', 
                 name: 'git_branch', 
                 quickFilterEnabled: false, 
                 selectedValue: 'NONE', 
                 sortMode: 'NONE', 
                 tagFilter: '*', 
                 type: 'PT_BRANCH')
}
--------------------------------------------------------
// 复选框,需要搭配Extended Choice Parameter插件使用    
parameters {
    extendedChoice(name: 'project_names', 
                   type: 'PT_CHECKBOX', 
                   description: '请勾选所要发布的子模块', 
                   quoteValue: false, 
                   saveJSONParameterToFile: false,
                   value: 'backend-job',
                   visibleItemCount: 1,
                   multiSelectDelimiter: ',',  // 分隔符
                   defaultValue: 'backend-job')
}
-------------------------------------------------------
// 下拉框,默认即可使用    
parameters {
    choice(choices:['192.168.0.184'],
           description: '必选项: 选择发布节点',
           name:'SSH_IP')
}
--------------------------------------------------------
// 输入字符串类型参数,默认即可使用    
parameters {
    string(name:'SSH_USER',
           defaultValue: 'root', 
           description: '必选项: 输入远程用户')
}
--------------------------------------------------------
// 密码形式输入,不安全,默认即可使用    
parameters {
    password(name:'PASSWORD', 
             defaultValue:'Rx@12345678', 
             description: '必选项: 输入远程密码')
}
--------------------------------------------------------
// 以文本形式输入参数,默认即可使用 
parameters {
    text(name: 'TEXT', 
         defaultValue: 'TEXT TXT', 
         description: '请输入默认文本')
}
--------------------------------------------------------
// 以布尔值形式输入参数,默认即可使用 
parameters {
    booleanParam(name: 'TOGGLE', 
                 defaultValue: true, 
                 description: 'Toggle this value')
}
9、when & IF & for (流程控制)
when

when仅能在stage端配置,用于判断当前stage是否执行。when可包含一条或多条条件判断,多条判断时需全部为true才可继续(默认情况下)。正常情况下when判断时在agentinputoptions命令之后才执行的,但是可以通过beforeAgentbeforeInputbeforeOptions参数来设置提前执行。

常用条件:

branch : 当正在构建的分支与给出的分支模式匹配时执行阶段

**environment :**当指定的环境变量设置为给定值时执行阶段

**allOf:**当所有嵌套条件都为真时,执行stage,必须至少包含一个条件

**anyOf:**当至少一个嵌套条件为真时执行舞台,必须至少包含一个条件

表达式 expression ,当表达式为true时继续执行

equals expected:字符串判断,当实际值等于期望值时为true。

// branch
stages {
    stage('Test') {
        when {
            branch pattern: "release-\\d+", comparator: "REGEXP"  // 当分支为release-***时,执行steps,REGEXP表示使用正则匹配
        }
        steps {
            echo "123"
        }
    }
}
---------------------------------------------------------
// environment
pipeline {
    agent any
    environment {
        TXT = 'Test'
    }
    stage {
        stages('测试') {
            when {
                environment name: 'TXT'
                value: 'Test'  // 当环境变量TXT等于Test时执行接下来的steps
            }
            steps {
                echo "测试。。。"
            } 
        }
    }
}
---------------------------------------------------------
// allOf
stage{
    stages('测试') {
        when {
            allOf {
                branch 'master'
            	environment name: 'TXT'
            	value: 'Test'    
                // 只有当分支为master且变量TXT=Test都满足时才执行
            } 
        }
        steps {
            echo '测试......'
        }
    }
}
---------------------------------------------------------
// anyOf
stage{
    stages('测试') {
        when {
            anyOf {
                branch 'master'
            	environment name: 'TXT'
            	value: 'Test'    // 当分支为master或变量TXT=Test满足其中之一时就会执行
            }
        }
        steps {
            echo '测试......'
        }
    }
}
---------------------------------------------------------
// equals expected
pipeline {
    agent any
    stages {
        stage('初始化') {
            steps {
              script {
                //定义变量
                PASSWORD = 'ada'
              }
            }
        }
        stage('部署') {
            when {
              //当密码匹配的时候执行, 顺序不能反
              equals expected: 'ada',
              actual: PASSWORD
            }
            steps {
                sh 'echo 部署 stage ...'
            }
        }
    }
}
if

stepsscript(声明式pipeline里使用groovy语法必备)里使用

pipeline {
    agent any 
    environment {
      OFF_FLAG = 'YES'
    }
    stages {
        stage('Init') { 
            steps { 
              script {
                BUILD_FLAG = true
              }
            }
        }
        stage('Build') { 
            steps { 
              script {
                if ( BUILD_FLAG ) {   // 当表达式为true时执行
                    sh 'echo Build stage ...' 
                }
              }
            }
        }
        
        stage('Test'){
            steps {
              script {
                if ( OFF_FLAG == 'YES' ) {  // 当环境变量匹配时执行
                  sh 'echo Test stage ...' 
                }
              }
            }
        }
    }
}
for

通常用于循环读取parameters参数中的值

pipeline {
	agent any
    parameters {
        extendedChoice(name: 'SSH_IP', 
                       type: 'PT_CHECKBOX', 
                       description: '选择发布节点', 
                       quoteValue: false, 
                       saveJSONParameterToFile: false, 
                       value: '172.16.0.242, 172.16.0.243', 
                       visibleItemCount: 2, 
                       multiSelectDelimiter: ',',
                       defaultValue: '172.16.0.242, 172.16.0.243')
    }
    stages {
        stage('测试'){
            steps {
                script {
                    for (value in SSH_IP.tokenize(',')) {  // 循环遍历SSH_IP参数,分隔符为,
                        echo value
                        sh "echo $value" // 等同echo value,上面为普通写法,下面为groovy语法写法
                    }
                }
            }
        }
    }
}
10、post(结束后要干啥)

定义在整个pipeline流水线或某个stage执行完之后运行,分为两种情况:

定义在最外层(pipeline下一级),表示整个pipeline执行完之后运行;

定义在具体stage中,表示在该stage结束后执行

常用post执行参数:

always 不管pipeline或stage的执行结果状态,总会执行的steps

changed 只有在pipeline或stage的执行结果状态与前一次执行相比发生改变时执行

fixed 当前pipeline或stage执行成功且它的前一次执行结果是failure或unstable时执行

regression 当前pipeline或stage执行结果是failure, unstable或aborted且它的前一次执行成功时执行

aborted 当前pipeline或stage执行结果是aborted(人工停止pipeline)时执行

failure 当前pipeline或stage执行结果是失败时执行

success 当前pipeline或stage执行结果是成功时执行

unstable 当前pipeline或stage执行结果是unstable时执行

unsuccessful 当前pipeline或stage执行结果不是成功时执行

cleanup 在其他所有的post场景脚本都处理完之后执行,不管当前pipeline或stage执行结果是什么文章来源地址https://www.toymoban.com/news/detail-421153.html

到了这里,关于Jenkins-Pipeline基本使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • jenkins pipeline使用Git Parameter

    在 Jenkins Pipeline 中使用 Git Parameter 可以方便地从 Git 仓库中选择分支或标签进行构建。Git Parameter 是 Jenkins 的插件之一,可以在 Jenkins 构建参数中提供一个 Git 版本选择器。 要在 Jenkins Pipeline 中使用 Git Parameter,首先需要安装 Git Parameter 插件。安装完成后,可以在 Jenkins 中创建

    2024年02月16日
    浏览(36)
  • 使用Gitlab管理Jenkins Pipeline流水线

    1、首先需要将已经调试好的Jenkins pipeline文件上传到git库中,推荐以 Jenkinsfile 命名 放至git库根目录 上传完成后 在git库中可以查看到 如下图所示: 2、配置Jenkins任务 完成后pipeline脚本会存放在git库上面进行管理编辑了,当我们构建此任务时会从git库中获取pipeline流水线进行执

    2024年02月12日
    浏览(42)
  • Jenkins中使用pipeline进行git拉取和推送

    点击 Pipeline Syntax 选择 git:Git 或 checkout:xxxxxx ,然后选择下方 -none- 处已经添加的用户名跟密码,若未添加,则使用下方 Add 进行添加 在下方使用 Generate Pipeline Script 进行语法生成,如下: 生成的格式为: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx 即为我们需要的用户字符串 pipeline的使用案

    2024年02月16日
    浏览(27)
  • (十四)devops持续集成开发——jenkins流水线使用pipeline方式发布项目

    本节内容我们使用另外一种方式pipeline实现项目的流水线部署发布,Jenkins Pipeline是一种允许以代码方式定义持续集成和持续交付流水线的工具。通过Jenkins Pipeline,可以将整个项目的构建、测试和部署过程以脚本的形式写入Jenkinsfile中,实现对整个流程的可视化管理和控制。在

    2024年02月21日
    浏览(48)
  • jenkins pipeline(脚本式)

    Groovy中的变量可以通过两种方式定义 - 使用数据类型(包括byte、short、int、long、float、double、char、Boolean和String )的本地语法,或者使用def 注意:使用数据类型的本地语法后期不能更改成其他类型 Goovy中的变量作用域 绑定域:脚本内的全局作用域,相当于该脚本对象

    2024年02月08日
    浏览(44)
  • jenkins pipeline项目

    回到目录 将练习jenkins使用pipeline项目,结合k8s发布一个简单的springboot项目 前提:jenkins的环境和k8s环境都已经安装完成,提前准备了gitlab和一个简单的springboot项目 创建一个流水线项目  流水线中选择git,并选择gitlab的test项目,拉取分支为main  后端代码整体结构如下  jenk

    2024年02月14日
    浏览(34)
  • Jenkins之pipeline

    Pipeline Pipeline: Stage View Plugin demo 开始实践 拉取git仓库代码 通过SonarQube做质量检测 通过Docker制作自定义镜像 将自定义镜像推送到Harbor 通过Publish Over SSH通知目标服务器 Jenkinsfile

    2024年01月16日
    浏览(34)
  • Jenkins ——pipeline入门教程

    一、什么是pipeline 什么是Pipeline?简单来说,就是一套运行于Jenkins上的工作流框架,将原本独立运行于单个或者多个节点的任务连接起来,实现单个任务难以完成的复杂发布流程(实用场景:将多个Jenkins构建任务轻松集成)。   简而言之,就是一套工作流框架,将原本独

    2024年02月09日
    浏览(33)
  • jenkins Pipeline接入mysql

    jenkin pipeline进化过程如下: Jenkins Pipeline 脚本优化实践:从繁琐到简洁 Jenkins Pipeline脚本优化:为Kubernetes应用部署增加状态检测 使用Jenkins和单个模板部署多个Kubernetes组件。有一些需要动态设置的配置不想在jenkins中配置,想将这些变量存储在mysql 这种数据库中,通过动态修改

    2024年04月15日
    浏览(28)
  • 【Jenkins】pipeline流水线

    流水线既能作为任务的本身,也能作为jenkinsfile,使用流水线可以让我们的任务从ui手动操作,转换为代码化,像docker的dockerfile一样,从shell命令到配置文件,更适合大型项目,可以让团队其他开发者同事参与进来,同时也可以编辑开发jenkinswebui不能完成的复杂的构建逻辑,作

    2024年02月09日
    浏览(56)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包