• Jenkins(6)流水线(pipeline)、Jenkinsfile设置、多分支构建及简单总结


    流水线(pipeline)

    概述(Jenkinsfile)

    JJenkins的流水线(pipeline)是其最核心的内容

    在流水线中,可以创建更加灵活、更加自由的配置,同时更利于团队协作

    将web-Ui的操作都落地为代码,代码配合注释更加容易阅读

    流水线既能作为任务的本身,也能作为Jenkinsfile,其类似于dockerfile(将启动docker的所有命令,打包成一个文件)

    Jenkins的web-ui所做的操作,也可以落地到Jenkinsfile里面,与dockerfile类似去开发

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

    语法(Jenkinsfile)

    Jenkinsfile由5个必备的组成部分

    pipeline:整条流水线
    
    agent:指定执行器
    
    stages:所有阶段
    
    stage:某一阶段,可有多个
    
    steps:阶段内的每一步,可执行命令
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    测试

    第一步:新建一个项目

    在这里插入图片描述
    创建完成后,会进入下面的ui界面,我们会发现这个界面明显比之前的更加少一点
    在这里插入图片描述

    第二步:编辑流水线

    在下面的位置进行编辑,也就是Jenkinsfile的编写,类似于dockerfile,如下所示
    在这里插入图片描述

    这里有两种方式

    1. 直接将代码内嵌到里面,如下:在这里写完后,保存,便直接提交上去
      在这里插入图片描述
    2. 从远程代码托管平台,去拉取Jenkinsfile文件,如下:
      在这里插入图片描述
      在这里插入图片描述
      下面,便先去使用第一种方式去敲代码,直接将内容写到ui界面上面,在右侧可以去选择一些用例,选择完后,框内会自动出现例子,这里面包含了之前所说的必备的几个语法
      在这里插入图片描述
      说明:
    pipeline:整条流水线
    
    agent:指定执行器
    
    stages:所有阶段
    
    stage:某一阶段,可有多个
    
    steps:阶段内的每一步,可执行命令
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    //可以在pipeline的上面去配置一些其他内容:如一些额外的常量的定义
    pipeline {
    	//指定执行器,在执行当前流水线得到时候,指定在那一台机器上执行
    	//下面的配置意思是将当前pipeline的执行交给Jenkins去分配
    	agent any
    	//所有阶段
    	stages {
    		//某一阶段,可有多个
    		stage('Hello') {
    			//阶段内的每一步,可执行命令
    			steps {
    				echo 'Hello World'
    			}
    		}
    	}
    }
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    如此,按下面的先测试修改一下,测试下面的Jenkinsfile

    pipeline {
    	agent any
    	
    	stages {
    		stage('拉取代码') {
    			steps {
    				echo '拉取代码完成'
    			}
    		}
    		stage('执行构建') {
    			steps {
    				echo '执行构建完成'
    			}
    		}
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    在这里插入图片描述
    先将Groovy这个选项给取消掉,然后点击保存
    在这里插入图片描述
    如此,一个pipeline的项目就创建完成了
    在这里插入图片描述

    第三步:运行

    点击运行,如下:在主节点运行
    在这里插入图片描述

    查看视图

    进入,这个项目,会发现有有一个视图

    在这里插入图片描述

    在视图里面,可以更加清晰的去查看,下面的步骤便是之前配置的
    在这里插入图片描述

    查看输出日志

    输出的内容如下:
    在这里插入图片描述

    指定阶段运行

    最不一样的是其可以选择从指定阶段运行,如下:在这里便可以去重新执行某一个之前配置的阶段
    在这里插入图片描述

    更加漂亮的UI(Blue Ocean)

    全新的流水线控制ui,可重复执行某阶段代码
    插件中心搜索blue ocean安装即可

    只需要安装一个插件即可,其实和老的ui界面功能差不多,就是界面更加好看一点

    安装插件:
    在这里插入图片描述
    安装完后,在首页便可以进人查看界面了

    在这里插入图片描述
    进入后的界面如下:
    在这里插入图片描述
    点击具体的“mypipeline”,便会进入下面的界面

    在这里插入图片描述
    再去点击,便可以进入下面的界面,在这里可以去重新构建

    在这里插入图片描述
    在这个界面也可以去执行某一个阶段

    使用pipeline自动打包docker镜像

    Jenkinsfile配置语法

    post

    流水线完成后可执行的任务

    • always 无论流水线或者阶段的完成状态。
    • changed 只有当流水线或者阶段完成状态与之前不同时。
    • failure 只有当流水线或者阶段状态为"failure"运行。
    • success 只有当流水线或者阶段状态为"success"运行。
    • unstable 只有当流水线或者阶段状态为"unstable"运行。例如:测试失败。
    • aborted 只有当流水线或者阶段状态为"aborted "运行。例如:手动取消。

    agent

    可以指定执行节点
    label 指定运行job的节点标签
    any 不指定,由Jenkins分配

    相关脚本片段生成器

    点击下面的“流水线语法”即可进入该工具
    在这里插入图片描述

    点击后,进入下面的界面,在这个界面便可以去配置对应的片段
    在这里插入图片描述
    比如,在这里,我想去使用git,在上面的选项中,便选择上git,过后便可以与之前一样的去配置git的一些内容,最后便会去生成对应的脚本

    在这里插入图片描述

    1. 测试
      配置gitlab的地址和其分支
      在这里插入图片描述
      添加凭证,可以登陆到当前gitlab地址的账号密码
      在这里插入图片描述
      配置完后,生成后,内容如下:
      在这里插入图片描述

    第一步:拉取代码

    按之前的步骤去配置对应的git脚本,这里我便使用上面生成的片段
    在这里插入图片描述

    第二步:执行构建

    git是可以不要去配置的

    在jar包构建时,需要maven,所有这里需要引入一个maven
    查看之前安装的maven插件

    1. 进入Globalxxx
      在这里插入图片描述
      查看maven信息
      在这里插入图片描述
    2. 在Jenkinsfile上去引入maven
      在这里插入图片描述

    调用maven命令,使用三个双引号可以在这个三个双引号里面写多条命令,如下:如果直接使用sh的话,这便是另外一个命令
    在这里插入图片描述

    第三步:将jar包发送到测试服务器上

    使用插件将jar包发送到测试服务器上

    这里因为是需要使用脚本,所以还是需要去使用之前说明的片段生成器,如下:选择sshPublisherxxx
    在这里插入图片描述
    这个配置与之前的设置的是一样的

    按之前的配置完后,点击生成流水线脚本,如下:
    在这里插入图片描述

    在pipeline里面进行设置,如下
    在这里插入图片描述

    第四步:生成清理命令

    在这里插入图片描述
    在这里,还是按之前的配置这样去配置,点击生成后,便会生成对应的脚本
    在这里插入图片描述

    完整的Jenkinsfile

    pipeline {
        agent any
        tools {
            maven "maven3"
        }
        stages {
            stage("拉取代码") {
                steps {
                    git branch: 'main', credentialsId: 'gitlab', url: 'http://192.168.44.103/root/java-project.git'
                    echo '拉取成功'
                }
            }
    
            stage("执行构建") {
                steps {
                    
                    sh """ 
                    cd demo-1
                    mvn clean package
                    """
                    echo '构建完成'
                }
    
            }
            
            stage("clean test server"){
                
                steps{
                    
    				sshPublisher(
    					publishers: [
    						sshPublisherDesc(
    							configName: 'testserver', 
    							transfers: [
    								sshTransfer(
    									cleanRemote: false, 
    									excludes: '', 
    									execCommand:
    										'''
    											rm -rf *
    											docker stop demo
    											docker rm demo
    											docker rmi demo
    										''', 
    					execTimeout: 120000, 
    					flatten: false, 
    					makeEmptyDirs: false, 
    					noDefaultExcludes: false, 
    					patternSeparator: '[, ]+', 
    					remoteDirectory: '', 
    					remoteDirectorySDF: false, 
    					removePrefix: '', 
    					sourceFiles: '/root')], 
    					usePromotionTimestamp: false, 
    					useWorkspaceInPromotion: false, 
    					verbose: false)])
                }
            }
            
            stage("发送jar包到测试服务器") {
                steps {
                    
                    sshPublisher(publishers: [sshPublisherDesc(configName: 'testserver', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: '', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '/jarfile', remoteDirectorySDF: false, removePrefix: 'demo-1/target', sourceFiles: '**/demo*.jar'), sshTransfer(cleanRemote: false, excludes: '', execCommand: '''docker build -t demo .
    docker run -d -p 8080:8080 --name demo demo''', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '/', remoteDirectorySDF: false, removePrefix: 'demo-1/docker', sourceFiles: 'demo-1/docker/dockerfile')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
                    
                    
                    echo 'jar send over!'
                }
    
            }
    
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74

    运行

    运行后的结果如下:

    1. 日志
      在这里插入图片描述
    2. Jenkins的镜像
      在这里插入图片描述

    这一整个过程,可以在Blue Ocean中去观察,如下:在这里可以查看更加详细的内容
    在这里插入图片描述

    Jenkinsfile创建多分支流水线

    概述

    现在一共有两个分支:

    1. 主分支
    2. 测试分支

    Jenkins可以集成两个分支,同时去执行构建,当发现哪一个分支上的代码有变化,单独去构建某一个

    比如:今晚上在test分支上提交了代码,执行一下,跑完测试后再决定要不要合并到主分支上

    在这里插入图片描述
    都是依赖于Jenkinsfile,通过Jenkinsfile去个性化的配置

    测试

    第一步:创建流水线

    在Jenkins的Blue Ocean里面便可以直接去创建一个流水线的项目,如下:
    在这里插入图片描述
    点击后,进入下面的界面
    在这里插入图片描述
    在上面的界面,添加一个Git,出现下面的界面
    在这里插入图片描述
    在这里添加一个Git仓库
    在这里插入图片描述
    如何在这里创建一个流水线
    在这里插入图片描述

    有可能,这个ui界面创建不了Jenkinsfile,所以可能需要自己去手动创建一下

    第二步:手动创建Jenkinsfile

    点击项目名称边上的设置按钮

    在这里插入图片描述
    然后,会进入下面的界面
    在这里插入图片描述
    将账号密码配置上
    在这里插入图片描述

    第二个问题便是Jenkinsfile了,如下,其默认是会从项目的根目录上面去选择

    在这里插入图片描述
    在这里,将其放到项目的主目录下面,如下:
    在这里插入图片描述

    然后,点击保存

    最后,主界面上会出现“Scan 多分支流水线日志内容”,如下
    在这里插入图片描述
    提示,Jenkinsfile找不到
    在这里插入图片描述

    第三步:在不同的分支下创建不一样的Jenkinsfile

    所以,我们需要在项目里面新建一个Jenkinsfile,并将其提交上去
    在这里插入图片描述
    现在在main分支下,有一个Jenkinsfile,如下:
    在这里插入图片描述

    main分支下的内容如下:
    在这里插入图片描述
    master分支下的Jenkinsfile如下:
    在这里插入图片描述

    运行结果

    在这里插入图片描述

    进入Blu Ocean查看

    进入分支,便可以去查看两个分支的内容

    在这里插入图片描述

    现在便可以进入对应的分支,去执行对应的构建

    总结

    声明式流水线(ui界面)

    好处

    • 更像是在Jenkins web ui中的操作
    • 可读性比较高
    • 可以使用blue ocean自动生成
    • 支持语法检查

    坏处

    • 代码逻辑能力比脚本式弱,不能完成特别复杂的任务

    脚本式流水线(Jenkinsfile)

    好处

    • 更少的代码和弱规范要求
    • 更灵活的自定义代码操作
    • 不受约束,可以构建特别复杂的工作流和流水线

    坏处

    • 读写对编程要求比较高
    • 比声明式流水线代码更复杂
  • 相关阅读:
    GIC/ITS代码分析(13)LPI中断虚拟化之KVM中ITS设备的模拟
    如何用一个插件解决 Serverless 灰度发布难题?
    微前端是如何实现作用域隔离的?
    荧光染料CY3修饰PPS聚苯硫醚,PBA苯硼酸,PAE聚(β-氨基酯),聚缩醛,透明质酸
    MySQL数据库实现主从复制,docker实现版
    .Net Core 中使用工厂模式
    C#操作modbus
    在centos7系统中如何给docker配置代理
    Javaweb之HTML,CSS的详细解析
    江苏移动基于OceanBase稳步创新推进核心数据库分布式升级
  • 原文地址:https://blog.csdn.net/yyuggjggg/article/details/126826240