1987WEB视界-分享互联网热门产品和行业

您现在的位置是:首页 > WEB开发 > 正文

WEB开发

jenkins学习之pipeline

1987web2023-10-06WEB开发122
一、背景

一、背景

1.想法

jenkins1.x主要是实现的持续集成过程,集成各个插件,但是终究需要人为手工的操作,如果job太复杂,人为容易出错。于是jenkins2.x开始流行pipeline的写法,以代码的方式来进行job的构建。正如社会潮流总是从人工到自动化的过程,在之前那篇文章中提及,要做一个devops的小工具,从java代码实现上来说,对于我还是比较复杂,代码实现部分还在钻研中。本篇文章只是讲讲jenkins中pipeline怎么写!


二、pipeline基本语法介绍

学习一种编程语言(groovy)最开始的步骤总是学习它的语法,知晓它的规则。但是对于pipeline来说,暂时还不需要深入去学习groovy,下面简单的为大家介绍下pipeline的一些主要的基本知识:

agent:该部分指定整个Pipeline或特定阶段将在Jenkins环境中执行的位置,具体取决于该agent 部分的放置位置。该部分必须在pipeline块内的顶层定义 ,也可以使用在stage级。

stage:表示这个Pipeline的某一个执行阶段(使用stage使得逻辑变得更加简单明了)

steps: 包含一个或者多个在stage块中执行的step序列(在这里执行操作:运行maven或者部署等等)

environment:指定键值对,可用于step中,主要是为常量或者变量赋值,根据所在的位置来决定其作用范围(类似于java中全局和局部的概念)

options:允许执行pipeline内置的专用选项,也可以使用由插件提供的

parameters:提供触发pipeline时的参数列表

trigger:定义了触发pipeline的方式(jenkins1.x中的pollscm定时构建)

tools:自动安装工具,注意这里使用的一定是在jenkins全局配置中已经定义好了的

when:可以用来执行一些代码逻辑

post:可以根据pipeline的状态来执行一些操作

以上是属于个人理解,具体以官方文档为准。下面再来详细说说里面比较重要的agent,其他的部分请大家自行google或者百度,相对来说比较简单。我的理解是:agent是一个机器总代理,它其中的参数都是为了指定一些可以使用的机器

agent的一些参数如下:

any : 在任何可用的机器上执行pipeline

none : 当在pipeline顶层使用none时,每个stage需要指定相应的agent,比方说:

pipeline{agentnone//没有指定agentstages{stage(checkout code){steps{shecho "checkout code"}}}}

以上代码会报下面这串错误,原因就是没有指定agent应用的节点:

label:在指定的机器上运行pipeline或者stage,比方说

agent{ label slave1}  //指定slave1的节点机器运行该stage或者pipeline

这个设置的作用:在大规模集群中,CI机器往往是相同的配置,而此时你的项目又需要一些额外的配置,这个时候这个设置可以很好的完成这个功能

docker:定义这个参数后,指定pipeline或stage时会动态的接收一个指定节点的docker的镜像,并且还可以接受一个args的参数用于执行docker run 的参数。比方说你的项目要在A环境中做测试,在B环境中做预发验证,在C环境做灰度发布(这里只是简单的打个比方,实际中不是这样的,只是为了说明此时需要在不同的环境中做不同的事情),这个时候涉及到多个环境,常规做法可以是直接指定几个不同的slave的从节点,但是如果我此时想做测试并且只有一台机器,那我可以在这台机器上做几个docker镜像,分别用于不同的构建过程.比方说:

agent{
    docker{
        image mydocker  //指定docker的镜像名称
        label slave1    //指定在哪个机器上执行docker镜像
        args  -v /tmp:/tmp //运行时传入docker run的参数
    }
}

以上命令是在slave1的从节点机器上用mydocker的镜像生成一个容器,并传入-v /tmp:/tmp的参数

以上是我想分享给大家的基本知识,可能其中理解不对,也请大牛出来指正.

这个网站也推荐给大家:Jenkins持续集成 - 管道详解,如若作者认为我放在这里不合适,请联系我删除.同时也推荐大家浏览一下官方文档:


三、pipeline实际应用(小实例)

实例1.用pipeline实现:从代码库中拉取最新的代码,然后做pmd检测,如果此次构建成功的话输出hello!success!;如果失败的话输出failed!Please check pipeline code!并发送邮件到指定的地址上。按照以下流程做测试:

a.本地构建一个maven项目并上传到github上(最近github贼慢,之后考虑在自己服务器上搭建gerrit作为代码存放地址来演示)

***注意项目上传时一些不需要的文件及时使用.gitignore给忽略掉,要在git add 之前写好.gitignore文件,避免文件被track后忽略不了***

以上表示文件上传成功.

b.写好pipeline并运行,最后核查结果

***部分脚本可以使用jenkins中的Pipeline Syntax来生成,比如拉取代码的***

下面开始演示失败时候的场景,此时没配置mvn的环境,但是执行mvn命令,按照预计中的报错了:

下面开始演示正确的构建结果并附pipeline的代码:

pipeline{
    agent any
    tools{
        maven maven3 //maven3必须是已经在jenkins上配置的工具
    }
    stages{
        stage(checkout code){
            steps{
                git credentialsId: 2c7a38c6-f536-4e93-bf3c-2ff4563fae8e, url: https://github.com/XXX/pipeline_script_test.git
            }
        }
        stage(mvn test){
            steps{
                sh "mvn -B -f ${env.workspace}/pom.xml pmd:pmd"
            }
        }
    }
    post{
        always{   //always表示不管怎么样都做下面的操作
            pmd canComputeNew: false, defaultEncoding: , healthy: , pattern: , unHealthy: 
        }
        failure{ 
            step([
                $class: Mailer,
                notifyEveryUnstableBuild: true,
                recipients: "738402018@qq.com",
                sendToIndividuals: true
            ])
            echo "failed!Please check pipeline code!"
        }
        success{
            echo "hello!success!"}
    }
}

构建结果如下:

实例2:


以上就是一些关于jenkins的pipeline的简单介绍,关于实例,之后会陆续更新上来。

如果对文章有疑问或者哪里不懂的请联系我,在力所能及的范围内帮助解答;如果文章有错误,也欢迎指出。

微信号:kakaicoco

devops系列002——jenkins-pipeline介绍

至于安装jenkins这里就不多说了,如果熟悉docker的话一条命令就解决了。

  • 下一篇

    今天想恶补jenkins的小伙伴注意啦!

    文末有福利,免费自取哦~

    最近看到别人的 jenkins,有我没见过、看不懂但是又好酷好靓的样纸。

    大概长以下这样:

    还有长以下这样的:

    经过一顿搜索 ……原来它就是 我不认识它,它也不认识我的jenkins pipeline

    本着好奇心和对知识的求知欲,在网上各种资料一顿乱啃,大概明白了是咋么一回事。

    接下来,就从小白开始,一步步完成它。主要分为以下几步:

    • 在 jenkins 上安装 pipeline 插件

    • 创建一个 pipeline 类型的任务

    • 配置 pipeline 脚本。

    pipeline 插件安装

    1. 在 magage jenkins -> 插件管理 -> avaliable 中,搜索 pipeline,选择并安装。

    2. 在 magage jenkins -> 插件管理 -> avaliable 中,pipeline stage view,选择并安装。

    3. 安装完成,可以在 New Item 里,看到 pipeline 选项。

    创建 pipeline

    环境准备就绪 ,嘿哈,可以开始创建流水线了。

    在 jenkins 界面,点击 New Item 新建一个任务,选择流水线,就进入下面这个图了。

    然后就懵逼了……pipeline 要写脚本 ?

    原来,pipeline 是基本 groovy 脚本的。

    那,完蛋了。我只会 python,不会 groovy。难不成我要先学一学 groovy,才能写的出来?

    翻了翻 groovy,这玩意跟 Java 有关。我太难了,pipeline 太难了!

    幸好,在官网当中,提供了其它的方式。

    一文带你解读—骚气的jenkinspipeline玩法