Jenkins的pipeline
说明
再官网文档上有说明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的更多相关文章
- [转]利用Jenkins的Pipeline实现集群自动化部署SpringBoot项目
环境准备 Git: 安装部署使用略. Jenkins: 2.46.2版本安装部署略(修改jenkins执行用户为root,省得配置权限) JDK: 安装部署略. Maven: 安装部署略. 服务器免密 ...
- Jenkins流水线(pipeline)实战之:从部署到体验
关于Jenkins流水线(pipeline) Jenkins 流水线 (pipeline) 是一套插件,让Jenkins可以实现持续交付管道的落地和实施. 关于blueocean Blue Ocean ...
- 远程触发Jenkins的Pipeline任务
场景 虽然能配置提交代码时触发Jenkins任务,但有时并不需要每次提交代码都触发,而是仅在有需要时才执行. 除了在Jenkins页面上手动执行任务,还可以向Jenkins网站发起HTTP请求,触发指 ...
- 远程触发Jenkins的Pipeline任务的并发问题处理
前文概述 本文是<远程触发Jenkins的pipeline任务>的续篇,上一篇文章实战了如何通过Http请求远程触发指定的Jenkins任务,并且将参数传递给Jenkins任务去使用,文末 ...
- jenkins~管道Pipeline的使用,再见jenkinsUI
Pipeline在Jenkins里的作用 最近一直在使用jenkins进行自动化部署的工作,开始觉得很爽,省去了很多重复的工作,它帮助我自动拉服务器的代码,自动还原包包,自动编译项目,自动发布项目,自 ...
- Jenkins和pipeline
Jenkins https://jenkins.io/index.html The leading open source automation server, Jenkins provides hu ...
- jenkins之 pipeline 小尝试
最近,一个小需求,动态建立slave节点来执行自动化用例,原有jenkins 老方式不满足需求,就用到jenkins2的pipeline来实现,但在实现过程中,2个小坑记录下 1.jenkins不能读 ...
- jenkins的pipeline的使用
1.安装Pipeline Maven Integration Plugin 2.新建任务 3.编写pipeline代码 node { stage('get clone') { checkout([$c ...
- Jenkins的Pipeline脚本在美团餐饮SaaS中的实践
一.背景 在日常开发中,我们经常会有发布需求,而且还会遇到各种环境,比如:线上环境(Online),模拟环境(Staging),开发环境(Dev)等.最简单的就是手动构建.上传服务器,但这种方式太过于 ...
- Jenkins CI Pipeline scripting
Jenkins pipeline is a suite of Jenkins plugins. Pipelines can be seen as a sequence of stages to per ...
随机推荐
- SpringBoot全家桶
前言 Spring简化了Java的开发,而SpringBoot简化了Spring.本文用SpringBoot采用分层的结构整合了filter,aspect,mybaits,logback,redis, ...
- Python3基本数据类型(五)
Python中的变量不需要声明,每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建. 在Python中变量就是变量,它没有类型,我们所说的"类型"是变量所指的内存中对象的类型 ...
- C++11_ tuple
版权声明:本文为博主原创文章,未经博主允许不得转载. tuple 是一个可以装载任何变量的容器,C++11的Variadic Templates给tuple的实现带来了极大方便. tuple的实现基于 ...
- WAF的实现
文章来源:http://danqingdani.blog.163.com/blog/static/1860941952014101723845500/ 本篇文章从WAF产品研发的角度来YY如何实现一款 ...
- igmpproxy源代码学习——igmpProxyInit()
igmpproxy源代码学习--igmpProxyInit()函数详解,igmpproxy初始化 在运行igmpproxy的主程序igmpproxyRun()之前需要对igmpproxy进行一些配置, ...
- 剑指offer--43.连续子数组的最大和
最大子段和,最大能取所有 ---------------------------------------------------------------- 时间限制:1秒 空间限制:32768K 热度 ...
- Mac怎么安装Windows10
当前 Windows10 系统的预览版已经出来,对于新系统感兴趣的不只是使用 PC 电脑的用户,还有一些是当前正在使用 Mac 系统的用户.其实安装 Windows 10 与以前安装 Windows ...
- Linux:finger命令详解
finger 用于查找并显示用户信息 包括本地与远端主机的用户皆可,帐号名称没有大小写的差别. 单独执行finger指令,它会显示本地主机现在所有的用户的登陆信息,包括帐号名称,真实姓名,登入终端机, ...
- 安装visio 2010:您的计算机上的Office 2003安装已损坏,安装程序无法继续。请删除或修复office 2003产品并重新运行安装程序
您的计算机上的Office 2003安装已损坏,安装程序无法继续.请删除或修复office 2003产品并重新运行安装程序 最近打算安装visio 2010时出现 以下错误: “您的计算机上的Of ...
- 【中文同义词近义词】词向量 vs 同义词近义词库
方案一:利用预训练好的词向量模型 优点: (1)能把词进行语义上的向量化(2)能得到词与词的相似度 缺点: (1)词向量的效果和语料库的大小和质量有较大的关系(2)用most_similar() 得到 ...