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

相关推荐
sun00770036 分钟前
ubuntu dpkg 删除安装包
运维·服务器·ubuntu
吃肉不能购2 小时前
Label-studio-ml-backend 和YOLOV8 YOLO11自动化标注,目标检测,实例分割,图像分类,关键点估计,视频跟踪
运维·yolo·自动化
学Linux的语莫2 小时前
Ansible使用简介和基础使用
linux·运维·服务器·nginx·云计算·ansible
qq_312920113 小时前
docker 部署 kvm 图形化管理工具 WebVirtMgr
运维·docker·容器
学Linux的语莫3 小时前
搭建服务器VPN,Linux客户端连接WireGuard,Windows客户端连接WireGuard
linux·运维·服务器
黑牛先生3 小时前
【Linux】进程-PCB
linux·运维·服务器
Karoku0663 小时前
【企业级分布式系统】ELK优化
运维·服务器·数据库·elk·elasticsearch
安迁岚4 小时前
【SQL Server】华中农业大学空间数据库实验报告 实验三 数据操作
运维·服务器·数据库·sql·mysql
打码人的日常分享5 小时前
商用密码应用安全性评估,密评整体方案,密评管理测评要求和指南,运维文档,软件项目安全设计相关文档合集(Word原件)
运维·安全·web安全·系统安全·规格说明书