0


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:阶段内的每一步,可执行命令

测试

第一步:新建一个项目

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

第二步:编辑流水线

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

这里有两种方式

  1. 直接将代码内嵌到里面,如下:在这里写完后,保存,便直接提交上去在这里插入图片描述
  2. 从远程代码托管平台,去拉取Jenkinsfile文件,如下:在这里插入图片描述在这里插入图片描述 下面,便先去使用第一种方式去敲代码,直接将内容写到ui界面上面,在右侧可以去选择一些用例,选择完后,框内会自动出现例子,这里面包含了之前所说的必备的几个语法在这里插入图片描述 说明:
pipeline:整条流水线

agent:指定执行器

stages:所有阶段

stage:某一阶段,可有多个

steps:阶段内的每一步,可执行命令
//可以在pipeline的上面去配置一些其他内容:如一些额外的常量的定义
pipeline {//指定执行器,在执行当前流水线得到时候,指定在那一台机器上执行//下面的配置意思是将当前pipeline的执行交给Jenkins去分配
    agent any
    //所有阶段
    stages {//某一阶段,可有多个stage('Hello'){//阶段内的每一步,可执行命令
            steps {
                echo 'HelloWorld'
            }}}}

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

pipeline {
    agent any
    
    stages {stage('拉取代码'){
            steps {
                echo '拉取代码完成'}}stage('执行构建'){
            steps {
                echo '执行构建完成'}}}}

在这里插入图片描述
先将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. 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)

好处

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

坏处

  • 读写对编程要求比较高
  • 比声明式流水线代码更复杂
标签: jenkins 运维 ui

本文转载自: https://blog.csdn.net/yyuggjggg/article/details/126826240
版权归原作者 ?abc! 所有, 如有侵权,请联系我们删除。

“Jenkins(6)流水线(pipeline)、Jenkinsfile设置、多分支构建及简单总结”的评论:

还没有评论