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 ...
随机推荐
- 【HTML5】使用 JavaScript 来获取电池状态(Battery Status API)
HTML5 规范已经越来越成熟,可以让你访问更多来自设备的信息,其中包括最近提交的 "Battery Status API".如其名称所示,该 API 允许你通过 JavaScri ...
- 【css】CSS3 Media Queries 详解【转】
说起CSS3的新特性,就不得不提到 Media Queries .最近 Max Design 更新的一个泛读列表里,赫然就有关于 Media Queries 的文章.同时位列其中的也有前天我刚刚翻译的 ...
- 剑指offer--44.两个链表的第一个公共结点
@selfboot 牛逼的代码,长度相同,一遍出结果, 长度不同,短的点跑完,变成长的,当长的跑完变成短的链表的时候,较长的链表已经走过了多的结点. ------------------------- ...
- shell脚本实例二
练习题一:对已经存在的用户做密码的修改等操作 vim user_ctrl.sh ##进行如下编写 #!/bin/bashShow(){ read -p ...
- 用servlet来提取数据,并作统计,然后用jfreechart画图
指定时间范围的数据提取,并做统计: 用servlet来提取数据,并作统计,然后用jfreechart画图. 使用的话,需要在web.xml里面配置相应的servlet,并且在index.jsp页面做引 ...
- ubuntu16 tomcat7安装和编码修改
有直接通过命令安装的,但是我还是喜欢把文件下载下来,然后自己配置. 1,下载tomcat7二进制文件 https://tomcat.apache.org/download-70.cgi 2,解压tom ...
- visual studio 菜单栏显示异常 插件安装异常 扩展异常修复
这几天在使用Visual studio 的扩展插件的时候,遇见了菜单栏显示异常,解决方案显示异常的问题,如下: 经过自己的一顿摸索,解决方法如下,比如我在安装gitee或github插件之后就出现了这 ...
- Qt 4.8.5 jsoncpp lib
Qt jsoncpp lib 一.参考文档: . QtCreator动态编译jsoncpp完美支持x86和arm平台 http://www.linuxidc.com/Linux/2012-02/536 ...
- 让ASP.NET第一次请求不变慢
网页开发者早期最常遇到一个问题,当网站布署到IIS时候,每当IIS或是Application Pool重启后,第一位进入网站的使用者,其体验往往第一个反应就是网站很慢,然后就一直询问IT为什么网站这么 ...
- linux下修改了tomcat端口之后无法访问
查看防火墙,是否将修改之后的端口加入防火墙规则内,如没有,加入规则内,重启防火墙,如果还是无法访问,请看第二步 执行bin目录下shutdown.sh脚本,如果正常关闭,则执行startup.sh脚本 ...