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语法以及相关的使用详解完毕。

相关推荐
Leinwin12 小时前
OpenClaw 多 Agent 协作框架的并发限制与企业化规避方案痛点直击
java·运维·数据库
2401_8653825012 小时前
信息化项目运维与运营的区别
运维·运营·信息化项目·政务信息化
漠北的哈士奇12 小时前
VMware Workstation导入ova文件时出现闪退但是没有报错信息
运维·vmware·虚拟机·闪退·ova
如意.75912 小时前
【Linux开发工具实战】Git、GDB与CGDB从入门到精通
linux·运维·git
运维小欣12 小时前
智能体选型实战指南
运维·人工智能
yy552713 小时前
Nginx 性能优化与监控
运维·nginx·性能优化
爱吃土豆的马铃薯ㅤㅤㅤㅤㅤㅤㅤㅤㅤ13 小时前
Linux 查询某进程文件所在路径 命令
linux·运维·服务器
05大叔15 小时前
网络基础知识 域名,JSON格式,AI基础
运维·服务器·网络
安当加密15 小时前
无需改 PAM!轻量级 RADIUS + ASP身份认证系统 实现 Linux 登录双因子认证
linux·运维·服务器
dashizhi201515 小时前
服务器共享禁止保存到本地磁盘、共享文件禁止另存为本地磁盘、移动硬盘等
运维·网络·stm32·安全·电脑