💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
# pipeline流水线构建项目 [TOC] ## 一、pipeline概念 ### 1.什么是PIPELINE JENKINS 2.0的精髓是PIPELINE AS CODE,是帮助JENKINS实现CI到CD转变的重要角色。什么是PIPELINE,简单来说,就是一套运行于JENKINS上的工作流框架,将原本独立运行于单个或者多个节点的任务连接起来,实现单个任务难以完成的复杂发布流程。 PIPELINE的实现方式是一套GROOVY DSL,任何发布流程都可以表述为一段GROOVY脚本,并且 JENKINS支持从代码库直接读取脚本,从而实现了PIPELINE AS CODE的理念。 ### 2.几个基本概念 1.STAGE-阶段: 一个PIPELINE可以划分为若干个STAGE,每个STAGE代表一组操作。注意,STAGE是一个逻辑分组的概念,可以跨多个NODE。 2.NODE-节点: 一个NODE就是一个JENKINS节点,或者是MASTER,或者是AGENT,是执行STEP的具体运行期环境。 3. STEP-步骤: STEP是最基本的操作单元,小到创建一个目录,大到构建一个DOCKER镜像,由各类JENKINS PLUGIN提供 ### 3.安装插件 在Jenkins插件中心搜索并安装名为pipeline的Jenkins插件 ![mark](http://noah-pic.oss-cn-chengdu.aliyuncs.com/pic/20200307/081148775.png) ## 二、构建演示 ### 1.创建项目 ![mark](http://noah-pic.oss-cn-chengdu.aliyuncs.com/pic/20200307/081156300.png) ### 2.输入脚本 在项目的流水线里面,输入以下内容,这也是pipeline的基本语法格式 ```json pipeline{ agent any stages{ stage('get code'){ steps{ echo "get code from scm" } } stage('package'){ steps{ echo "packge code" } } stage('deploy'){ steps{ echo "deploy packge to node1" } } } } ``` 截图如下 ![mark](http://noah-pic.oss-cn-chengdu.aliyuncs.com/pic/20200307/081206220.png) ### 3.执行构建 构建成功后,历史记录如图,会显示每个步骤的执行结果,执行时间如下图 ![mark](http://noah-pic.oss-cn-chengdu.aliyuncs.com/pic/20200307/081214685.png) 点击任意一个步骤,会弹出步骤日志,再点击日志,可以查看这个步骤的执行情况 ![mark](http://noah-pic.oss-cn-chengdu.aliyuncs.com/pic/20200307/081222914.png) ## 三、用语法生成器辅助构建html pipeline语法有一定的格式和写法,我们只需要记住上面的统一格式,然后具体的语法可以用语法生成器生成,然后复制进去即可, ### 1.语法生成器使用 1. 实例 每个不同的功能语法是不一样的,在语法生成器的示例步骤中,选择你要做的操作类别,然后正常操作每个选项后,按下边的语法生成器生成即可 ![mark](http://noah-pic.oss-cn-chengdu.aliyuncs.com/pic/20200307/081236469.png) 2. 拉去代码示例[git] 界面选择 ![mark](http://noah-pic.oss-cn-chengdu.aliyuncs.com/pic/20200307/081244963.png) 语法生成 点击生成流水线脚本后,就会将上面的操作给你变成pipeline脚本,如下 然后将这个脚本复制到对应的步骤中即可 ![mark](http://noah-pic.oss-cn-chengdu.aliyuncs.com/pic/20200307/081305181.png) 3) shell代码示例 ![mark](http://noah-pic.oss-cn-chengdu.aliyuncs.com/pic/20200307/081312862.png) ### 2.最终代码 1)代码 ```json pipeline{ agent any stages{ stage('get code'){ steps{ checkout([$class: 'GitSCM', branches: [[name: '*/dev']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[url: 'git@10.0.0.12:root/monitor.git']]]) } } stage('package'){ steps{ sh 'tar zcf /opt/web.tar.gz ./* --exclude=.git' } } stage('deploy'){ steps{ sh 'scp /opt/web.tar.gz 10.0.0.11:/tmp && ssh 10.0.0.11 "tar xf /tmp/web.tar.gz -C /data/html/www/"' } } } } ``` 2) 截图 ![mark](http://noah-pic.oss-cn-chengdu.aliyuncs.com/pic/20200307/081322954.png) ### 3.构建和结果 1)构建 ![mark](http://noah-pic.oss-cn-chengdu.aliyuncs.com/pic/20200307/081329537.png) 2)结果 ![mark](http://noah-pic.oss-cn-chengdu.aliyuncs.com/pic/20200307/081337891.png)