Jenkins Pipeline声明式流水线

Jenkins是为了顺应以用户的需求进化为核心,采用迭代、循序渐进的方法进行软件开发,也就是敏捷开发模型

传统的瀑布模型
在这里插入图片描述
上一个的输出是下一个的输入,没有迭代与反馈,也就代表了没有回头路可以走,对于后期的更改成本巨大

敏捷模型
在这里插入图片描述
符合现在互联网思想,快交付、以人为本,用户可以参与其中,小版本迭代升级,但是相对的也带来频繁的重复打包、构建、测试、上线等等的操作,这个部分就交给了Jenkins 来完成自动化的持续集成

Jenkins常用项目类型

  • 自由风格软件项目(FreeStyle Project):基于web表单形式完成各个部分的功能
    • 优点:简单
    • 缺点:缺乏灵活性、不易配置、逻辑单一
  • 流水线项目(Pipeline Project):基于DSL领域特定语言(Groovy语言)的方式定义jenkins任务
  • 流水线分为2个种方式
    • 声明式流水线:基于DSL编写,类似于web表单的形式,有固定的结构,相对于脚本式简单很多
    • 脚本式流水线:基于DSL编程编写,更好的提供灵活性和使用混合编程结构处理逻辑流程、决策、赋值等

声明式流水线

Pipeline支持2种方式编写

  • 直接编写到jenkins表单里
  • 读取脚本文件文件内容,可以基于git拉取文件,便于统一管理(推荐)

在这里插入图片描述

script指的就是表单的方式
SCM就是读取文件

Pipeline结构

在这里插入图片描述


Jenkinsfile (Declarative Pipeline)

pipeline {
    agent any

    stages {
        stage('Build') {
            steps {
                echo 'Building..'
            }
        }
        stage('Test') {
            steps {
                echo 'Testing..'
            }
        }
        stage('Deploy') {
            steps {
                echo 'Deploying....'
            }
        }
    }
}

一个整体就是可以理解为是Jenkinsfile

指令解释

jenkins大部分都可以通过自带的工具生成代码
在这里插入图片描述

agent

整个流水线运行在哪里,代理节点或者非代理(指令和阶段都可以指定)

  • agent any :可以运行在任意的代理节点上
  • agent none :不设置节点,每个阶段自己指定
  • agent {label “label”} :选择带有标签的代理节点
  • agent {docker “image”} :基于docker运行流水线

environment(可选)

设置环境变量,在整个流水线中可以使用(指令和阶段都可以指定)

  • K = “V” :就是常规的变量 = 值 ,引用变量使用${K}
  • K = credentials(‘credentials_id’):值可以指定凭证,填写凭证ID号
environment {
        K = "V"
        K = credentials("credentials_id")
}

tools

tools指令能帮助我们自动下载并安装所指定的构建工具,并将其加入 PATH 变量中

  • tools指令默认支持3种工具:JDK、Maven、Gradle。通过安装插件,tools 指令还可以支持更多的工具
  • 同样也支持手动安装tools

agent none的情况下不会生效

tools {
  gradle  "gradle3.2"
}

options

就是web表单上的general配置,jenkins预定义项目选项的地方
在这里插入图片描述

  • buildDiscarder :保留指定数量的流水线执行结果
  • disableConcurrenBuilds :关闭并发运行项目,防止同时访问共享,或者代理节点资源紧张情况下
  • retry : 流水线失败的重试次数
  • skipDefaultCheckout :跳过隐含的checkout scm全局源检查
    在这里插入图片描述
  • timeout :执行项目超时时间
  • timestamps : 添加时间戳到控制台输出中
  • skipStagesAfterUnstable :如果流水线中的一个阶段设置了不稳定状态,系统就不会处理剩余的阶段

关于语法,可以借助自带的工具或者查看详细的文档
在这里插入图片描述在这里插入图片描述

options {
  retry(3)
  buildDiscarder logRotator(artifactDaysToKeepStr: '', artifactNumToKeepStr: '', daysToKeepStr: '7', numToKeepStr: '20')
}

文档:https://www.jenkins.io/doc/book/pipeline/syntax/#options

triggers

以什么方式触发自带构建项目,不支持多分支流水线,github团队/项目等等

  • cron :就是类似crontab 配置规律的执行
  • upstream : 指定当其他项目构建完成后触发当前的流水线项目自动构建
  • poll scm : 定时扫描项目代码的改变,改变后自动触发构建
  • git hook (需要安装插件):由gitlab或者github代码发生变更后通过web hook发送请求给jenkins来触发自动构建

cron语法

同样也是5个*代表规律

  • 第一个* :小时(取值:1-60分钟)
  • 第二个* :天 (取值:1-24小时)
  • 第三个* :月(取值:1-31天)
  • 第四个* :年 (取值:1-12月)
  • 第五个* :周(取值:0-7)0和7都是表示星期日

H符号的含义

jenkins中多了一个H符号,jenkins为了避免所有的项目cron都同一时间执行带来的服务器压力,就希望通过散列算法来错开执行

  • 语法 :H(start-end)
triggers {
  cron 'H(0-10) * * * *'
}
#每10分内的某个时间里启动
triggers {
  pollSCM 'H(0-10) * * * *'
}
#每10分内的某个时间里轮询扫描SCM的变化

parameters

用户输入或者api调用的项目参数,也就是web表达的This project is parameterized
在这里插入图片描述

  • booleanParam :布偶类型,true/false参数
  • choice :选项列表
  • file :选择文件
  • passwd :用户输入密码,文本是被隐藏的
  • string :字符串
  • run :运行用户从某个任务中选定一个运行

调用方式:params.参数名

echo "xxxx = ${params.参数名}"

libraries

共享库就是代码的集合,可以被流水线调度和使用

  • 提供共享和包含公共代码的使用
  • 封装不是声明式而且不能直接在一个流水线中使用的代码

stage解释

在stages内部有一个或者多个单独的阶段,都至少包含了一个或者多个DSL步骤,还可以引入指令定义一些变量、参数,全局变量等等

stages {
        stage('Build') {
            steps {
                echo 'Building..'
            }
        }
         stage('Test') {
            steps {
                echo 'Testing..'
            }
        }
        }
  • stages :代表阶段的一个整体块
    • stage:单个阶段,格式:stage(名称),这个名称会显示在流水线流程图上
      • steps :实际要执行的DSL步骤,支持echo、git、sh、mail等等有效语句,支持条件结构(与、或、非)
      • post :可选项,同时可以在阶段和流水线中使用

在这里插入图片描述post解释

post同时可以在阶段和流水线中使用,在流水线结尾或者阶段结尾条件满足就会被执行

  • always :总是执行步骤
  • changed :当前构建状态与之前状态不同,执行步骤
  • success :当构建状态成功,执行步骤
  • failure :当构建失败,执行步骤
  • unstable :当构建状态不稳定,执行步骤
stages {
        stage('Build') {
            steps {
                echo 'Building..'
            }
        }
         stage('Test') {
            steps {
                echo 'Testing..'
            }
        }
        post {
            always {
              echo 'build stage complete'
               
            } 
          }
        }

Pipeline_syntax:https://www.jenkins.io/doc/book/pipeline/syntax/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值