说明

再官网文档上有说明pipeline的工作流程,具体可以参考pipeline文档语法文档。 这里将pipeline的生命周期图贴出来 

我们暂时不会用到完整的流程,只摘取有用的部分,完成最小的流程即可,下面是我举的几个实际例子

一般流程

node {
dir('/home/share/node/falcon') {
stage("git") {
sh "git fetch origin"
sh "git checkout -f origin/master"
}
stage("cpm install") {
sh "cnpm install"
}
stage("build") {
sh "npm run build"
}
stage("restart server") {
sh '''
pm_result=`pm2 ls`
if [[ $pm_result =~ `pwd` ]]
then
echo "`pwd` exists, restart"
pm2 delete app.js
pm2 start app.js --name `pwd`
exit 0
else
pm2 start app.js --name `pwd`
fi
'''
}
}
}

例子中用到了几个方法

  • dir() 更换执行目录,jenkins默认的执行目录在环境设置中设置,默认是/,如果我们使用的是multibranch pipeline的话,它会在jenkins的安装目录下找到workspace进行pipeline操作,目前来说,太麻烦了,所以就直接在脚本中设置好执行目录
  • stage() 方法是阶段的名称,这个是完全自定义的,相当于给构建流程中的某些步骤称为一个阶段,比如git操作阶段、安装依赖阶段、编译阶段、发布阶段,具体效果可以到 构建 章节看
  • sh 后接的就是命令行操作了,如果只有一行,那么用''或者用""包裹起来,如果有多行的话,用'''包裹

条件判断

在构建项目时,我们可以写一些条件,例如在一个新的服务器上进行完整的安装时,我们可以不通过命令行进行git clone把项目拉下来,可以通过判断目标目录是否有项目,然后决定我们是git clone 还是 git fetch origin

node {
dir('/home/share/www') {
stage('Git') {
if(fileExists('openapi')) {
dir('/home/share/www/openapi') {
sh 'git fetch origin'
sh 'git checkout master'
sh 'git pull'
}
} else {
sh 'git clone git@git.coding.net:flashtd1/DPOpenAPI.git openapi'
}
}
}
}

交互流程

在进行版本切换的时候,需要手动输入一些内容,比如分支名称,commit名称等,所以需要用户输入变量,下面举个例子

node {
stage('Git') {
def branch = input message: 'input branch name for this job', ok: 'ok', parameters: [string(defaultValue: 'master', description: 'branch name', name: 'branch')] echo branch
}
}

执行上述例子,会出现如下情况  当输入后,会得到如下结果 

如果一次性想输入多个参数,可以在parameters数组中添加更多的变量,如下面的例子

node {
stage('Git') {
def input_result = input message: 'input branch name for this job', ok: 'ok', parameters: [string(defaultValue: 'master', description: 'branch name', name: 'branch'), string(defaultValue: '', description: 'commit to switch', name: 'commit')] echo input_result.branch
echo input_result.commit
}
}

除了用.的形式,也可以用['branch']这样的形式,如果要在sh中使用变量,可以写作

node {
stage('Git') {
def input_result = input message: 'input branch name for this job', ok: 'ok', parameters: [string(defaultValue: 'master', description: 'branch name', name: 'branch'), string(defaultValue: '', description: 'commit to switch', name: 'commit')] sh "echo ${input_result.branch}"
sh "echo ${input_result.commit}"
}
}

注意sh后的是"",不然会出现错误

这里只举了简单的字符串输入的情况,其实还有很多可以输入的类型,不过文档里并没有写的很详细。这里介绍一下Jenkins的语法生成器,一些插件生成脚本的语句都可以在这里调出来

在Pipeline编辑的输入框下,有一个Pipeline Syntax超链接 红色标记的下拉框中可以找到已经安装了插件的支持编写脚本的选项列表,这里用input来举例  按照提示填完后,可以点击下面的Generate Pipeline Script按钮生成脚本 生成的脚本就可以复制到自己的脚本里啦

Jenkins的pipeline的更多相关文章

  1. [转]利用Jenkins的Pipeline实现集群自动化部署SpringBoot项目

    环境准备 Git: 安装部署使用略. Jenkins: 2.46.2版本安装部署略(修改jenkins执行用户为root,省得配置权限) JDK: 安装部署略. Maven: 安装部署略. 服务器免密 ...

  2. Jenkins流水线(pipeline)实战之:从部署到体验

    关于Jenkins流水线(pipeline) Jenkins 流水线 (pipeline) 是一套插件,让Jenkins可以实现持续交付管道的落地和实施. 关于blueocean Blue Ocean ...

  3. 远程触发Jenkins的Pipeline任务

    场景 虽然能配置提交代码时触发Jenkins任务,但有时并不需要每次提交代码都触发,而是仅在有需要时才执行. 除了在Jenkins页面上手动执行任务,还可以向Jenkins网站发起HTTP请求,触发指 ...

  4. 远程触发Jenkins的Pipeline任务的并发问题处理

    前文概述 本文是<远程触发Jenkins的pipeline任务>的续篇,上一篇文章实战了如何通过Http请求远程触发指定的Jenkins任务,并且将参数传递给Jenkins任务去使用,文末 ...

  5. jenkins~管道Pipeline的使用,再见jenkinsUI

    Pipeline在Jenkins里的作用 最近一直在使用jenkins进行自动化部署的工作,开始觉得很爽,省去了很多重复的工作,它帮助我自动拉服务器的代码,自动还原包包,自动编译项目,自动发布项目,自 ...

  6. Jenkins和pipeline

    Jenkins https://jenkins.io/index.html The leading open source automation server, Jenkins provides hu ...

  7. jenkins之 pipeline 小尝试

    最近,一个小需求,动态建立slave节点来执行自动化用例,原有jenkins 老方式不满足需求,就用到jenkins2的pipeline来实现,但在实现过程中,2个小坑记录下 1.jenkins不能读 ...

  8. jenkins的pipeline的使用

    1.安装Pipeline Maven Integration Plugin 2.新建任务 3.编写pipeline代码 node { stage('get clone') { checkout([$c ...

  9. Jenkins的Pipeline脚本在美团餐饮SaaS中的实践

    一.背景 在日常开发中,我们经常会有发布需求,而且还会遇到各种环境,比如:线上环境(Online),模拟环境(Staging),开发环境(Dev)等.最简单的就是手动构建.上传服务器,但这种方式太过于 ...

  10. Jenkins CI Pipeline scripting

    Jenkins pipeline is a suite of Jenkins plugins. Pipelines can be seen as a sequence of stages to per ...

随机推荐

  1. 【nyoj-1233】差值

    描述 输入一个整数数组,将它们连接起来排成一个数,找出能排出的所有数字中最大,最小的两个,输出两个数的差值.例如输入数组{1,  2},则输出9.     输入 第一行输入一个整数T,表示有T组测试数 ...

  2. hdu2853

    题解: KM算法模板 然后我把另一边加了点 然后写了#define int long long 然后莫名挂... 然后去掉就过了 代码: #include<cstdio> #include ...

  3. LeetCode OJ:Valid Sudoku(有效数独问题)

    Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules. The Sudoku board could be ...

  4. java与mysql时间类型对应的问题

    项目中遇到一个问题,从后台给出的json字符串中取得的时间,之后通过方法转换成  yyyy-MM-dd hh:mm:ss 的时候,转换后的得到的竟然是1969年...之后排查问题: 发现了在mayba ...

  5. Appium Remote webdriver调用

    remote webdriver的模板 默认开启4723端口接受webdriver请求 默认开启4724用于和android通讯 #coding:utf-8 #Import the common pa ...

  6. Kafka 单节点多Kafka Broker集群

    Kafka 单节点多Kafka Broker集群 接前一篇文章,今天搭建一下单节点多Kafka Broker集群环境. 配置与启动服务 由于是在一个节点上启动多个 Kafka Broker实例,所以我 ...

  7. IOS开发 arc与非Arc代码的区别

    是属于ios开发中的内存管理问题:在这我简要概述一下,详细讲的话内容挺多,而且是作为一个ios开发人员,或ios开发爱好者,这是必须了解的:Objective-c中提供了两种内存管理机制MRC(Man ...

  8. js之瀑布流的实现

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. python中的字典两种遍历方式

    dic = {"k1":"v1", "k2":"v2"} for k in dic: print(dic[K]) for ...

  10. 【Git】无法从远程分支pull

    随着工作量的增多,接触的新项目,新同事越来越多,发现自己不会的东西好多.有这么一句话:“你所知道的知识就像是一个圆,你会的越多,圆越大,但你接触的未知世界也越大,也就越加觉得自己无知”.原话记不全了, ...