【Jenkins】pipeline流水线

这篇具有很好参考价值的文章主要介绍了【Jenkins】pipeline流水线。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【一】什么是pipeline?

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

pipeline就是一套运行于jenkins上的工作流程框架,将原本独立运行于单个或者多个节点的任务连接起来,实现单个任务难以完成的复杂流程编排与可视化;

Pipeline 是Jenkins 2.X 的最核心的特性,帮助Jenkins 实现从CI 到 CD 与 DevOps的转变。
Pipeline 是一组插件,让jenkins 可以实现持续交付管道的落地和实施。持续交付管道是将软件从版本控制阶段到交付给用户/客户的完整过程的自动化表现。

【二】pipeline任务

【1】安装pipeline插件

【Jenkins】pipeline流水线,jenkins,servlet,运维
【Jenkins】pipeline流水线,jenkins,servlet,运维

【2】创建pipeline任务

(1)新增任务,选择流水线

【Jenkins】pipeline流水线,jenkins,servlet,运维

(2)Pipeline定义有两种方式:

一种是Pipeline Script ,是直接把脚本内容写到脚本对话框中;
另一种是 Pipeline script from SCM (Source Control Management–源代码控制管理,即从gitlab/github/git上获得pipeline脚本–JenkisFile)

【Jenkins】pipeline流水线,jenkins,servlet,运维

【3】Pipeline Script 运行任务

一步一步来完善这个脚本

(1)版本一:初始脚本结构如下

pipeline{
    agent any
    stages{
        stage("拉取代码"){
            steps {
                echo '拉取成功'
            }
        }
        stage("执行构建"){
            steps {
                echo '构建完成'
            }
        }
        stage("发送jar包到测试服务器"){
            steps {
                echo '发送完成'
            }
        }
    }
    post{
        always{
            echo 'always say goodbay'
        }
    }
}

脚本中定义了2个阶段(stage):first和run test;post是jenkins完成构建动作之后需要做的事情。
运行任务,可以看到分为3个部分,如下图所示:
【Jenkins】pipeline流水线,jenkins,servlet,运维

(2)版本二:使用流水线语法自动生成拉取git的代码

【Jenkins】pipeline流水线,jenkins,servlet,运维

【Jenkins】pipeline流水线,jenkins,servlet,运维

【Jenkins】pipeline流水线,jenkins,servlet,运维

【Jenkins】pipeline流水线,jenkins,servlet,运维

pipeline{
    agent any
    stages{
        stage("拉取代码"){
            steps {
                git branch: 'pipeline', credentialsId: 'helloworld', url: 'http://192.168.19.8/root/hello-world.git'
                echo '拉取成功'
            }
        }
        stage("执行构建"){
            steps {
                echo '构建完成'
            }
        }
        stage("发送jar包到测试服务器"){
            steps {
                echo '发送完成'
            }
        }
    }
    post{
        always{
            echo 'always say goodbay'
        }
    }
}

(3)版本三:测试执行maven命令的代码

首先找到jenkins里配置的maven的名称
【Jenkins】pipeline流水线,jenkins,servlet,运维

pipeline{
    agent any
    tools{
    		maven "maven"
    }
    stages{
        stage("拉取代码"){
            steps {
                git branch: 'pipeline', credentialsId: 'helloworld', url: 'http://192.168.19.8/root/hello-world.git'
                echo '拉取成功'
            }
        }
        stage("执行构建"){
            steps {
                sh "mvn --version"
                echo '构建完成'
            }
        }
        stage("发送jar包到测试服务器"){
            steps {
                echo '发送完成'
            }
        }
    }
    post{
        always{
            echo 'always say goodbay'
        }
    }
}

报错了
【Jenkins】pipeline流水线,jenkins,servlet,运维
解决方案
【Jenkins】pipeline流水线,jenkins,servlet,运维点击Approve(批准)即可

再点击构建,然后查看日志,可以看到git代码拉取成功了,执行的maven命令也成功了

(4)版本四:配置maven构建项目的代码

pipeline{
    agent any
    tools{
    		maven "maven"
    }
    stages{
        stage("拉取代码"){
            steps {
                git branch: 'pipeline', credentialsId: 'helloworld', url: 'http://192.168.19.8/root/hello-world.git'
                echo '拉取成功'
            }
        }
        stage("执行构建"){
            steps {
                //sh "mvn --version"
                sh """
                cd /var/jenkins_home/workspace/helloworld_pipeline
                mvn clean package -Dmaven.test.skip=true
                """
                echo '构建完成'
            }
        }
        stage("发送jar包到测试服务器"){
            steps {
                echo '发送完成'
            }
        }
    }
    post{
        always{
            echo 'always say goodbay'
        }
    }
}

保存,然后开始构建,成功

(5)版本五:把jar包和Dockerfile发送到测试服务器上,并执行命令

(1)在项目准备好Dockerfile文件
【Jenkins】pipeline流水线,jenkins,servlet,运维

FROM java:8
ENV APP_PATH=/docker/helloworld_pipeline
WORKDIR $APP_PATH
ADD ./helloworld_pipeline-0.0.1-SNAPSHOT.jar $APP_PATH/helloworld_pipeline.jar
EXPOSE 8093
ENTRYPOINT ["java","-jar"]
CMD ["helloworld_pipeline.jar","-Dfile.encoding=GBK", "--server.port=8093"]

(2)这里要用到ssh,继续使用片段代码生成器
【Jenkins】pipeline流水线,jenkins,servlet,运维
(3)配置的内容可以直接从之前maven项目的配置里复制过来
一共分为三步
1-删除旧的jar包和Dockerfile文件
2-发送新的jar包
3-发送新的Dockerfile,并且执行构建命令

【Jenkins】pipeline流水线,jenkins,servlet,运维
最后点一下【生成流水线脚本】就可以得到自动生成的命令了,直接复制来用

完整的pipeline命令如下

pipeline{
    agent any
    tools{
    		maven "maven"
    }
    stages{
        stage("拉取代码"){
            steps {
                git branch: 'pipeline', credentialsId: 'helloworld', url: 'http://192.168.19.8/root/hello-world.git'
                echo '拉取成功'
            }
        }
        stage("执行构建"){
            steps {
                //sh "mvn --version"
                sh """
                cd /var/jenkins_home/workspace/helloworld_pipeline
                mvn clean package -Dmaven.test.skip=true
                """
                echo '构建完成'
            }
        }
        stage("发送jar包到测试服务器"){
            steps {
                sshPublisher(publishers: [sshPublisherDesc(configName: 'testserver', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: '''rm -rf helloworld_pipeline.*
docker stop helloworld_pipeline
docker rm helloworld_pipeline
docker rmi helloworld_pipeline:1.0''', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '/docker/helloworld_pipeline', remoteDirectorySDF: false, removePrefix: '', sourceFiles: ''), sshTransfer(cleanRemote: false, excludes: '', execCommand: '', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '/docker/helloworld_pipeline', remoteDirectorySDF: false, removePrefix: 'target', sourceFiles: '**/helloworld_pipeline*.jar'), sshTransfer(cleanRemote: false, excludes: '', execCommand: '''cd /root/docker/helloworld_pipeline
docker build -t helloworld_pipeline:1.0 .
docker run -d -p 8093:8093 --name helloworld_pipeline helloworld_pipeline:1.0''', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '/docker/helloworld_pipeline', remoteDirectorySDF: false, removePrefix: 'docker', sourceFiles: 'docker/Dockerfile')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
                echo 'jar包发送完成'
            }
        }
    }
    post{
        always{
            echo 'always say goodbay'
        }
    }
}

点击构建,访问链接:http://192.168.19.11:8093/hello,测试成功

【4】Pipeline script from SCM 通过代码库运行任务

将pipeline代码(Jenkinsfile)保存到代码库中,然后通过指定代码位置(脚本位置)的方式来运行pipeline任务。

(1)创建Jenkinsfile,由Groovy语言实现。一般是存放在项目根目录,随项目一起受源代码管理软件控制。

【Jenkins】pipeline流水线,jenkins,servlet,运维

Jenkinsfile :创建在根目录
脚本的第二stage 是执行pytestzwf文件下的test_json.py脚本
将项目提交到代码库。

(2)在 job(任务)中配置Pipeline script from SCM

【Jenkins】pipeline流水线,jenkins,servlet,运维
【Jenkins】pipeline流水线,jenkins,servlet,运维
运行任务,查看结果:
【Jenkins】pipeline流水线,jenkins,servlet,运维

【三】Jenkinsfile 语法学习

5个必备的组成部分
(1)pipeline:整条流水线
(2)agent:指定执行器
(3)stages:所有阶段
(4)stage:某一阶段,可有多个
(5)steps:阶段内的每一步,可执行命令

【1】Jenkinsfile 支持两种语法形式:

(1)Declarative pipeline – 在pipeline v2.5 之后引入,结构化方式,比较简单,容易上手。这种类似于我们在做自动化测试时所接触的关键字驱动模式,只要理解其定义好的关键词,按要求填充数据即可。入门容易,但是灵活性欠缺。

(2)Scripted pipeline – 基于grjoovy的语法,相较于Declarative,扩展性比较高,好封装,但是有些难度,需要一定的编程工具。

【2】Declarative pipeline 语法详解

(1)必须包含在固定格式Pipeline{} 块内,每个声明语句必须独立一行,行尾无需使用分号。
(2)块 blocks{} 只能包含章节(Sections),指令(Directves),步骤(Steps) 或 赋值语句。

【3】agent:节点

(1)必须存在,agent必须在pipeline块内的顶层定义
(2)any :可以在任意agent 上执行pipeline
(3)none :pipeline 将不分配全局agent,每个stage分配自己的agent
(4)label :指定运行节点的label
(5)node:自定义运行节点配置,指定label ,指定customWorkspace(工作空间)
(6)docker:控制目标节点上的docker运行相关内容

agent any

agent { label 'my-master'}
agent{
	node{
		label "myslave"
		customWorkspace "myworkspace"
	}
}

【4】stages :阶段集

(1)必须存在,包含顺序执行的一个或者多个stage命令
(2)在pipeline内仅能使用一次
(3)需要定义stage的名字

【5】steps :步骤

(1)必须存在
(2)steps位于stage指令块内部,包含一个或者多个step

stages{
	stage("stage name"){
		steps{
			echo "this is a step"
		}
	}
}

【6】post :构建后的操作

(1)非必须
(2)always:无论pipeline运行的完成的状态如何都会运行
(3)success:仅当当前pipeline具有 成功 状态时才运行
(4)failure: 仅当当前pipeline 具有 失败 状态时才运行

当然还有其他选项,这里不再做扩展介绍;

【7】parameters :参数

(1)非必须
(2)参数化构建的参数设置,参数类型有booleanParam、choice(选择)、file、text、string 等

parameters{
        string( name :'name',defaultValue:'beauty',description:'姓名是')
}

等同于如下设置:

【Jenkins】pipeline流水线,jenkins,servlet,运维
构建时效果如下:

【Jenkins】pipeline流水线,jenkins,servlet,运维

【8】triggers :触发器

(1)非必须
(2)定义了pipeline自动化触发的方式
(3)cron:接受一个cron风格的字符串来定义pipeline触发的常规间隔
(4)pollSCM:接受一个cron风格的字符串来定义jenkins检查SCM源更改的常规间隔;如果存在新的更改,则pipeline将被重新触发

triggers{
	cron('*/1 * * * *')
}

每隔一分钟执行一次

triggers{
	pollSCM('*/1 * * * *')
}

每隔一分钟监控SCM源,更改即触发

【Jenkins】pipeline流水线,jenkins,servlet,运维文章来源地址https://www.toymoban.com/news/detail-707571.html

到了这里,关于【Jenkins】pipeline流水线的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Jenkins】Jenkins构建后端流水线

    xxxx后端-后端cim服务测试环境-项目构建 创建人:创建者姓名 时间:创建时间 保持构建天数:2 保持最大构建个数:3 ①clean:清楚之前;package:打包 -Dmaven.test.skip=true:跳过测试;-U:强制让Maven检查所有SNAPSHOT依赖更新 这里的pom.xml文件注意: Branches to build:分支某个环境的

    2024年02月12日
    浏览(43)
  • jenkins流水线

    1、 二、 三、 四、 五、 六、  

    2024年02月05日
    浏览(45)
  • Jenkins的流水线详解

    来源:u.kubeinfo.cn/ozoxBB 什么是流水线 声明式流水线 Jenkinsfile 的使用 jenkins 有 2 种流水线分为 声明式流水线 与 脚本化流水线 ,脚本化流水线是 jenkins 旧版本使用的流水线脚本,新版本 Jenkins 推荐使用声明式流水线。文档只介绍声明流水线。 声明式流水线 在声明式流水线语

    2024年02月11日
    浏览(33)
  • Jenkins流水线怎么做?

    问CHAT:Jenkins流水线怎么做? CHAT回复:Jenkins流水线是一种创建、测试和部署应用程序的方法。以下是为Jenkins创建流水线的步骤: 1. 安装Jenkins:首先你需要在你的服务器上安装Jenkins。这个过程可能会根据你的操作系统有所不同。 2. 安装必要的插件:为了使流水线工作,你需

    2024年01月24日
    浏览(39)
  • Jenkins 流水线多阶段构建

    Jenkins流水线配置遇到 无法识别的。需要使用 自定义环境 项。 比如官网的在流水线中使用Docker Started by remote host 172.17.0.1 Obtained Jenkinsfile from git http://10.99.20.51:8082/root/java-devops-demo.git org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed: WorkflowScript: 28: Invalid agent type “

    2024年04月22日
    浏览(25)
  • Jenkins-流水线-保姆级教程

    目录 一、Jenkins 是什么? 二、安装方式 2.1 下载并运行 Jenkins  三、什么是流水线 3.1概述 3.2声明式流水线 3.3脚本化流水线 四、声明式流水线 4.1 Sections代码区域块 4.1.1Agent指令 4.1.2agent 的配置示例 4.1.3Post代码块 4.1.4.sepes代码块 五、Jenkinsfile的使用 5.1环境变量 5.1.1静态变量

    2024年02月01日
    浏览(35)
  • jenkins流水线实现xjar加固

    xjar的定义 功能特性 xjar使用 修改项目中的pom.xml,一般都是开发改 jenkins流水线配置 查看jenkins工作目录 远端服务器配置–☞需要授权的服务器 获取授权服务器信息 执行脚本 脚本内容, 1.判断镜像是否存在 2.把xjar.go解压,需要有go环境 3.制作镜像,然后把镜像制作成tar包

    2024年02月07日
    浏览(43)
  • docker中的jenkins之流水线构建

    创建两个参数,一个是宿主端口号,一个是docker中的端口号 其中 Dsonar.host.url=http://docker.for.mac.host.internal:9000’ 主要是docker中的jenkins访问docker中的sonarQube,详情可以看我另外推文:https://blog.csdn.net/weixin_48319193/article/details/132124664?spm=1001.2014.3001.5501 填写端口号 启动 sonarQube成功

    2024年02月13日
    浏览(35)
  • jenkins通过流水线进行构建jar包

    最近项目上需要进行CICD,本篇博客主要分享各种骚操作 1.下载Jenkins.war包上传到服务器上面,然后在同级目录下面创建如下脚本:

    2024年02月14日
    浏览(34)
  • jenkins扩展你的流水线(共享库)

    与任何编程环境一样,在 Jenkins 流水线中,集中化功能、共享公共代码和代码重用都是快速、有效地进行开发的基本技术。这些实践鼓励使用标准方法来调用功能,为更复杂的操作创建构建块并隐藏复杂性。它们还可以用于提供一致性以及鼓励约定优于配置以简化任务。 Je

    2023年04月08日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包