

Jenkins实践——创建Pipeline的两种方式
source link: http://mp.weixin.qq.com/s?__biz=MzUxMTcwOTM4Mg%3D%3D&%3Bmid=2247486963&%3Bidx=1&%3Bsn=a2401f186b1d4a808389ba695b3aaef0
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

点击蓝字关注我们
近期使用Jenkins帮业务团队搭建过一次Pipline,并将测试流程加入到了Pipline中,将搭建过程的做了简单记录。考虑到项目的保密性,该文章仅演示搭建步骤和工具使用,文中的代码均为伪代码
JenkinsPipeline简介与安装
1
了解Jenkins的人相信对pipeline都有所耳闻,pipeline是Jenkins2.0推出的一套Groovy DSL语法,将原本独立运行于多个Job或者多个节点的任务统一使用代码的形式进行管理和维护。
2
推荐使用docker镜像的方式安装Jenkinspipeline,因为Jenkins是用java编写的,需要安装java环境,配置环境变量等这些操作,有时候可能还会遇到jdk版本不兼容的问题。为了不让繁琐的安装过程浇灭我们的学习热忱,还是推荐用docker镜像的方式部署,安装步骤非常简单:
1
拉取JenkinsOcean镜像
docker pull jenkinsci/blueocean
2
创建挂载目录
mkdir /var/jenkins_home
3
启动Jenkins
docker run -d -p 8888:8080 -p 50000:50000 -v jenkins:/var/jenkins_home –v /etc/localtime:/etc/localtime --name jenkinsci-blueocean -d jenkinsci/blueocean
如果你是使用以上步骤安装Jenkins,登录之后在页面的左侧导航栏就能看到如下所示的图标:
如果你已经安装了Jenkins普通版本,可以在 【Manage Jenkins】 —— 【ManagePlugins】 中搜索BlueOcean安装,安装完之后同样在主界面做侧导航栏可以看到上图中的图标。
安装完成,我们就开始进入主题,使用两种不同的方式创建Pipeline。

经典模式下创建Pipeline
创建pipeline一共两种方式,第一种方式我们称之为传统方式,是使用Jenkins经典界面,通过自己编写PipelineScript来组织流水步骤的。下面用图示的方式简单介绍一下这种方式。
1.登录Jenkins,点击左侧的新建,创建新的构建任务。
2.跳转到如下界面,输入自己的任务名称和描述信息之后,选择“流水线”选项并点击下方的确定按钮即创建了一个Pipeline任务。
3.跳转到Pipeline的设置页面,我们可以看到有四个tab,我们会针对每一个tab做详细介绍。
General
General是Pipeline的一些基本配置。名称,描述和一些基本设置。
以下简单介绍几个常用设置。其余没有介绍的设置项,大家可以参考Jenkins的官方文档或者帮助文档。
①.GitHub 项目
该pipeline的源代码托管在Github中,选中此选项,可以添加github中的项目地址
②.Preserve stashes from completed builds
想保留最近几次历史构建就可以勾选此项并填入想要保留的构建次数。每次构建都需要占不少的空间,因此不建议大量保存构建历史。
③.丢弃旧的构建
我这里设置了丢弃构建,仅保留最近一周的构建历史,不限定构建次数。
构建触发器
构建触发器很好理解,就是pipeline构建的触发条件。以下简单介绍一下各个触发条件。这些触发条件可以根据项目需要选择多个,组合使用。
我的代码托管在gitlab中,我希望在代码有更新时自动触发构建,所以选择了“轮询SCM”。
高级项目选项
这个是给项目设置一个展示名称,没有特殊作用,不需要过多关注。
流水线
这一部分是Pipeline的主要部分,在这一步我们将开始定义流水线
定义流水线使用的是Groovy脚本,保存脚本有两种方式,第一种是直接写在Jenkins工程中,另一种是存放在代码仓库项目目录下的Jenkinsfile中,实际项目中大多选择将脚本存放在项目目录中,但这仅限于项目数量不多的情况下使用。如果项目过多,Jenkinsfile散落在各个项目中,也会不便维护,这时候可以创建目录集中保存Jenkinsfile,便于查找和维护。
选择定义流水线的方式
我使用的是【PipelinescriptfromSCM】,只添加了代码仓库地址和令牌信息,其余保持默认。
当然,在你考虑用这种方式创建流水线之前,你必须已经设计好的流水线的步骤,并且写好了可靠的Jenkinsfile。
Pipeline支持两种语法,一种是Declarative Pipeline(在Pipeline 2.5中引入)和Scripted Pipeline。Declarative Pipeline对用户来说,语法更严格,有固定的组织结构,更容易生成代码段,使其成为用户更理想的选择。Scripted pipeline更加灵活,因为Groovy本身只能对结构和语法进行限制,对于更复杂的pipeline来说,用户可以根据自己的业务进行灵活的实现和扩展。由于篇幅有限所以在此只介绍使用最为广泛的Declarative Pipeline。
在写Jenkinsfile之前我们先来熟悉一些名词。
● Agent: 在Jenkins集群中,一个agent相当于一个slave机器,接收并执行master机器分派的任务。
● Stage: Pipeline中的不同阶段,例如:“构建”,“测试”和“部署”。
● Step: 步骤,Step是最基本的操作单元,小到创建一个目录,大到构建一个Docker镜像,由各类Jenkins Plugin提供。
下面是我编写的一个由 【编译】 —— 【编译Docker镜像】 —— 【部署】 —— 【测试】 这几个阶段组成的一条流水线。不熟悉PipelineScript的同学,可以先熟悉一下语法,语法不是文章关注的重点。
pipeline {
agent any //agent 必须放在pipeline的顶层定义或stage中可选定义,放在stage中就是不同阶段使用
stages { //Pipeline 的主体部分,声明不同阶段,比如 构建,部署,测试
stage('Build') { //编译阶段
steps {
sh 'pwd'
git(url: 'https://xxx.xxx.xxx.xxx/xxxxxxxx/xxxxxxx', poll: true, credentialsId: '0000000-0000-0000-0000-000000000000') //拉取代码
echo '使用你的编译工具进行编译' //编译
archiveArtifacts(artifacts: 'testProject', onlyIfSuccessful: true) //编译制品归档
}
}
stage('Docker Build') //编译docker 镜像文件
agent any
steps {
unstash 'test'
sh "docker login"
sh "docker build"
sh "docker push "
sh "docker rmi"
}
}
stage('Deploy') { //部署阶段
agent { //在stage中特别声明agent,该stage就在声明的agent中去执行
docker {
image 'image_name'
}
}
steps { //执行步骤
sh "mkdir -p ~/.kube"
echo '添加部署步骤完成部署 '
echo '启动服务'
}
stage('Test') { //测试阶段
steps {
echo '测试阶段'
git(url: 'https://xxx.xxx.xxx.xxx/xxxxxxxx/xxxxxxx', poll: true, credentialsId: '0000000-0000-0000-0000-000000000000')
echo '执行测试用例'
}
}
}
environment { //环境变量,在satge中使用${variable name}来调用
image_name = 'testProject'
project_path = '../testProject'
K8S_CONFIG = credentials('jenkins-k8s-config')
GIT_TAG = sh(returnStdout: true,script: 'git describe --tags --always').trim()
}
}
值得注意的是,执行Pipeline的过程中会有一些中间产物,如apk包、docker镜像文件,这些统一叫做制品。 制品会被保存在JenkinsWorkplace中,如果要使用制品,需要添加【制品归档】的步骤,这样就可以通过页面下载制品。
如此便可定义一条Pipeline,经典模式下创建Pipeline是使用最为广泛的一种方式。但是这种方式使用起来有一定门槛,那就是你必须熟悉PipelineScript的语法规则。那如果你说我是一个新手,并没有语言基础,是不是就不能自己创建Pipeline了?当然不是,下面要介绍的第二种方式,就不需要你手写代码了,Jenkins会自动帮你生成。

使用BlueOcean插件,创建pIpeline
还记得文章开头安装的BlueOcean插件吗?这个插件提供了一个可视化的界面,可以通过交互式的方式创建Pipeline,大大降低了使用门槛。下面我们就来体验一下吧!
在Jenkins主页,点击“打开BlueOcean”就可以进入如下界面
点击‘创建新的流水线’就跳转到了创建页面
选择代码仓库,填入地址和令牌,创建一条流水线。
创建完之后,添加阶段,并根据你的需要添加不同的步骤。
可视化创建Pipeline比较“傻瓜式”,操作起来非常简单,这里就不再详细介绍,有兴趣的小伙伴可以自己实操一下练一练。
需要注意的是,使用BlueOcean创建Pipeline会自动生成一个Jenkinsfile文件,最后会保存在代码仓库的项目目录下面。里面生成的步骤跟我们上面手写的Jenkinsfile一样。每次修改流水线工作流程并提交修改会修改一次Jenkinsfile,并在代码仓库中生成一条修改记录。
以上就是创建Pipeline的两种方式,各位小伙伴可根据自己项目的需要选择不同发方式。在项目数量比较少的情况下,可以使用BlueOcean来创建。如果项目很多或者Pipeline结构比较复杂,使用这种方法就会非常慢,而且Jenkinsfile散落在各个项目目录中,维护起来不方便,这时候更推荐使用经典模式自己写Jenkinsfile的方式创建和维护。
Recommend
-
64
一、背景 在日常开发中,我们经常会有发布需求,而且还会遇到各种环境,比如:线上环境(Online),模拟环境(Staging),开发环境(Dev)等。最简单的就是手动构建、上传服务器,但这种方式太过于繁琐,使用持续集成可以完美...
-
72
环境测试部署主机IP:192.168.1.1Jenkins主机IP:192.168.1.2Harbor主机IP:192.168.1.3Gitlab主机IP:192.168.0.10系统信息:系统:CentOS7.5内核:4.18.7-1.el7.elrepo.x86_64Docker版本:18.09docker-compose版本:1.23.1所有主机的Docker安装方式wget-O/etc/y
-
6
创建后台任务的两种代码模式 后台任务是每个App都需要的一些行为,毕竟主线程是大爷,拖不起,伤不起,脏活累活都只能在不见天日的后台去做。 最简单的后台任务,可以说是直接开一个线程就可以了,或者说来个Service,再开个线程。但这些并不...
-
5
本文预计阅读时间 6 分钟 系列汇总 这是一个系列文章,大大小小到今天惊然发现竟然已经累计二十篇了,也就不得不做一个小汇总。回想当初写第一篇文章的时候,就已经决心事无巨细,一应认真的走下来,回头遮望,看着皇皇这么多文...
-
5
Jenkins Pipeline 插件对于 Jenkins 用户来说可以让用户能够改变游戏规则。基于 Groovy 中的领域特定语言(DSL),Pipeline 插件使 Pipelines 可以有脚本来定义,并且提供了非常强大的方法来开发复杂的、多步 DevOps Pipeline 。本文记录了编写 Je...
-
16
Jenkins的pipeline实践之GitSCM参数配置项详解 我定义的通用的拉取代码片段如下: checkout( [$class: 'GitSCM', doGenerateSubmoduleConfigurations: false, submoduleCfg: [], extensions: [[$cl...
-
3
请注意,本文编写于 372 天前,最后修改于 289 天前,其中某些信息可能已经过时。 如果对反向代理不明觉厉的话,可以看一下我之前写过的Nginx笔记Nginx...
-
8
《IntelliJ IDEA 插件开发》第一节:两种方式创建插件工程持续坚持原创输出,点击蓝字关注我吧 作者:小傅哥博客:https://bugstack.cn ❝ 沉淀、分享、成长,让自己和他人都能有所收获!😜
-
4
在 K8s 中,创建资源有两种方式: 直接使用 kubectl run 命令创建 使用 kubectl create/apply 命令从 YAML 文件创建 在本...
-
11
一.系统环境 服务器版本 docker软件版本 CPU架构 CentOS Linux release 7.4.1708 (Core) Docker version 20.10.12 x86_64
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK