jenkins流水线(pipline)实例

1、pipline 语法介绍

bash 复制代码
声明式的pipeline语法格式
1. 所有的声明都必须包含在pipeline{}中
2. 块只能有节段,指令,步骤或者赋值语句组成
3. 阶段:agent,stages,post,steps
4. 指令:environment,options,parameters,triggers,stage,input,tool,when

2、阶段

bash 复制代码
agent: 该指令用于指定构建代理的配置。agent any 表示在任何可用的构建代理上执行流水线。可以使用其他选项如 agent none(不在任何代理上执行)、agent {label 'label-name'}(在具有特定标签的代理上执行)等。
# jenkins 添加节点 

stages: stages 指令用于定义流水线中的阶段。阶段是流水线的主要分组单元,用于将构建过程分解为不同的步骤。每个阶段可以包含一个或多个步骤。

steps: steps 指令用于定义流水线中某个阶段的步骤。步骤是构建过程中的具体操作,可以是 shell 脚本、构建命令、插件调用等。

post: post 指令用于定义在所有阶段完成后执行的操作。可以使用不同的条件来指定执行操作的时机,如 always(无论构建结果如何始终执行)、success(仅在构建成功时执行)等。在 post 指令内部,可以定义多个操作,如发送电子邮件通知、触发其他构建等。

3、指令

bash 复制代码
environment: environment 指令用于定义流水线中的环境变量。可以在流水线的任何阶段或步骤中使用这些环境变量。它们可以用于存储和传递配置信息、凭据、版本号等。

options: options 指令用于定义全局选项和配置。可以使用不同的选项来控制流水线的行为,如超时设置、并行执行、跳过失败的阶段等。

parameters: parameters 指令用于定义流水线的参数。参数可以用于接收用户输入,从而自定义构建过程。可以定义不同类型的参数,如字符串、布尔值、选择列表等。

triggers: triggers 指令用于定义触发流水线执行的条件或事件。可以使用不同的触发器来实现自动触发流水线,如定时触发、代码推送触发、其他流水线完成触发等。

stage: stage 指令用于定义流水线中的阶段。阶段是流水线的主要分组单元,用于将构建过程分解为不同的步骤。每个阶段可以包含一个或多个步骤。

input: input 指令用于在流水线的执行过程中暂停并等待用户输入。可以定义一个或多个输入步骤,以便用户提供必要的确认或参数输入,然后流水线继续执行。

tool: tool 指令用于在流水线中配置和使用工具。可以指定使用特定版本的构建工具、测试工具等。

when: when 指令用于根据条件来控制流水线中某个步骤或阶段的执行。可以使用不同的条件表达式来判断是否执行特定的步骤或阶段,如构建参数的值、环境变量的状态等。

4、示例

bash 复制代码
# 以下示例结合了部分常用的指令及阶段

pipeline {
    agent any
    
    options {
        timeout(time: 1, unit: 'HOURS')
        disableConcurrentBuilds()
    }
    
    parameters {
        string(name: 'TARGET_ENV', defaultValue: 'dev', description: 'Target environment for deployment')
        booleanParam(name: 'RUN_TESTS', defaultValue: true, description: 'Run tests during the build')
    }
    
    triggers {
        cron('0 0 * * *') // 每天午夜触发
        upstream(upstreamProjects: 'my-other-pipeline', threshold: hudson.model.Result.SUCCESS)
    }
    
    stages {
        stage('Checkout') {
            steps {
                git branch: 'main', credentialsId: 'my-git-credentials', url: 'https://github.com/my-repo.git'
            }
        }
        
        stage('Build') {
            steps {
                sh 'mvn clean package'
            }
        }
        
        stage('Test') {
            when {
                expression { params.RUN_TESTS == true }
            }
            steps {
                sh 'mvn test'
            }
        }
        
        stage('Deploy') {
            when {
                environment name: 'TARGET_ENV', value: 'prod'
            }
            steps {
                sh 'deploy-to-prod.sh'
            }
        }
    }
    
    post {
        always {
            emailext (
                subject: 'Jenkins Pipeline - Build Status',
                body: '''
                	构建完成
                ''',
                to: 'my-email@example.com',
                attachLog: true
            ) 
        }
    }
}

#使用 agent any 指定在任何可用的代理上运行流水线。
#使用 options 指令设置了超时时间和禁用并发构建。
#使用 parameters 指令定义了两个参数,用于接收目标环境和是否运行测试的用户输入。
#使用 triggers 指令设置了每天午夜触发和上游流水线成功触发的条件。
#使用 stages 指令定义了几个阶段,包括代码检出、构建、测试和部署。
#使用 when 指令在测试和部署阶段根据条件进行了控制。
#使用 post 指令定义了 always 块,在流水线执行结束后发送电子邮件通知构建状态,并附带构建日志。

注意:

pipeline:代表整条流水线,包含整条流水线的逻辑

agent:指定流水线的执行器 (在节点上)和工作区

stages:封装了用于定义流水线主体和逻辑的所有单个阶段定义

至少包含一个stage

stage:代表流水线的阶段,每个阶段都必须有名称

5、实战演练

**准备:**以下服务器防火墙与selinux均需关闭

192.168.58.140 部署gitlab 详细参照:http://t.csdnimg.cn/Sb1uz

192.168.58.153 部署Jenkins 详细参照:http://t.csdnimg.cn/HxYPt

192.168.58.156 安装好nginx tomcat 详细参照:http://t.csdnimg.cn/CmLUg

以下操作在jenkins页面进行

1.新建流水线任务

简单文本完成后,开始构建,并查看是否步骤是否成功。

2.拉取代码进行测试

在gitlab项目端获取仓库源 :git@192.168.58.140:root/easy-springmvc-maven.git

在jenkins页面端的pipeline中进行如下操作:

将复制的脚本粘贴至相应位置,应用保存。

构建并查看相应的执行信息

继续添加步骤测试是否构建成功

3.测试:能不能从错误的地方开始重新执行

将NO.3步改错,保存并构建

将错误的地方改正确,保存但不开始构建

若没有Blue Ocean,则需要下列步骤安装下载,有此软件则跳过此步。

打开 Blue Ocean

点击未运行成功的那条记录

重新启动两次失败,说明不可以以此种方式重启,则选择重新构建。

构建成功。

代码总结:

bash 复制代码
pipeline {
    agent any
    stages {
        stage('NO.1') {
            steps {
               echo "你好 世界"
            }
        }
        stage("NO.2"){
            steps {
                echo "I want you to make her happy ^_^"
            }
        }
        stage("NO.3"){
            steps {
                git credentialsId: '1f5adfa6-af28-4f62-8785-38d2774c3196', url: 'git@192.168.58.140:root/easy-springmvc-maven.git'
            }
        }
        stage("NO.4"){
            steps {
                echo "World peace, Our hope !!!"
            }
        }
    }
}
4.打包代码的流水线

准备:

从gitlab上拉一个java的小项目

jdk用的11版本的(/usr/local/java11)

maven用的3.8.5(/usr/local/maven/bin/mvn)

第一步:拉取代码

还是在配置页面,点击流水线语法,选择git,然后拉取一个java的小项目、

填好url,认证凭据,分支后点击生成流水线脚本,复制一下,填入pipeline脚本中

bash 复制代码
stage('NO.1 :拉取代码') {
            steps {
               git credentialsId: '1f5adfa6-af28-4f62-8785-38d2774c3196', url: 'git@192.168.58.140:root/easy-springmvc-maven.git'
            }
        }

第二步:打包后端代码

bash 复制代码
stage("NO.2 : 打包代码"){
            steps {
                sh "/usr/local/maven/bin/mvn package"
            }
        }

第三步:后端代码上线

获取tomcat页面ip

在流水线语法中生成流水线脚本,并复制粘贴到指定位置

bash 复制代码
stage("NO.3 :上传项目"){
            steps {
                deploy adapters: [tomcat8(credentialsId: 'cecf8ea2-e03d-4a07-a041-7763e8ca1cb9', path: '', url: 'http://192.168.58.156:8080/')], contextPath: null, war: 'target/easy-springmvc-maven.war'
            }
        }

保存并开始构建。

代码如下

bash 复制代码
pipeline {
    agent any
    stages {
        stage('NO.1 :拉取代码') {
            steps {
               git credentialsId: '1f5adfa6-af28-4f62-8785-38d2774c3196', url: 'git@192.168.58.140:root/easy-springmvc-maven.git'
            }
        }
        stage("NO.2 : 打包代码"){
            steps {
                sh "/usr/local/maven/bin/mvn package"
            }
        }
        stage("NO.3 : 上传项目"){
            steps {
                deploy adapters: [tomcat8(credentialsId: 'cecf8ea2-e03d-4a07-a041-7763e8ca1cb9', path: '', url: 'http://192.168.58.156:8080/')], contextPath: null, war: 'target/easy-springmvc-maven.war'
            }
        }
    }
}

至此, pipeline语法以及相关的使用详解完毕。

相关推荐
荣--1 天前
一键部署不是为了省时间 —— 它是把"买来的 PaaS"变成"自己的平台"的拐点
运维·zabbix·工程化·一键部署·平台化·边界设计
江华森1 天前
动手实战学 Docker — 从零到集群编排完全指南
运维
Avan_菜菜2 天前
FRP 内网穿透完整实战:从 HTTP 映射到 HTTPS 自签代理
运维·nginx·https
SelectDB3 天前
Litefuse 开源并推出单进程轻量模式,25 秒就能跑起来的 Agent 可观测与评估平台
运维·后端·自动化运维
XIAOHEZIcode4 天前
Linux系统鼠标偏移常见原因以及修复方案
linux·运维·游戏
用户0328472220705 天前
如何搭建本地yum源(上)
运维
大树888 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠8 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质8 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
Inhand陈工8 天前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信