一、pipeline

官方介绍: http://jenkins.io/2.0

pipeline是帮助Jenkins实现CI到CD转变的重要角色,是运行在jenkins2.x版本的核心插件,简单来说,pipeline就是一套运行与Jenkins上的工作流框架,将原本独立运行与单个或者多个节点的任务连接起来,实现单个任务难以完成的复杂发布流程,从而实现单个任务很难实现的复杂流程编排和任何可视化,pipeline的实现方式是一套GroovyDSL,任何发布流程都可以表述为一段Groovy脚本。

1、pipeline优势

可持续性:jenkins的重启或者中断后不影响已经执行的pipeline Job
支持暂停:pipeline可以选择停止并等待人工输入或批准后再继续执行。
可扩展:通过groovy的变成更容易的扩展插件。
并行执行:通过groovy脚本可以实现step,stage间的并行执行,和更复杂的相互依赖关系。

2、pipeline语法

Stage:阶段,一个pipeline可以划分为若干个stage,每个stage都是一个操作,比如clone代码、代码编译、代码测试和代码部署,阶段是一个逻辑分组,可以跨多个node执行。
Node:节点,每个node都是一个jenkins节点,可以使jenkinsmaster也可以是jenkinsagent,node是执行step的具体服务器。
Step:步骤,step是jenkinspipeline最基本的操作单元,从在服务器创建目录到构建容器镜像,由各类Jenkins插件提供实现,例如:sh “make”

创建新任务选择流水线
在这里插入图片描述
在这里插入图片描述
这里写groovy脚本代码可以点击Pipeline Syntax 语法转换
在这里插入图片描述
URL写的是git地址
在这里插入图片描述
Sample Step 选择git
然后选择认证方式为免秘钥,然后点击Generate Pipeline Script
就会出现拉取的代码
将这段代码复制到pipeline 然后保存,再构建版本
在这里插入图片描述
可以看到已经构建成功,显示已经拉取代码成功,目录是/backup/jenkins/slave/workspace/pipeline-test2,我们查看一下代码是否已经下载成功
在这里插入图片描述
可以看到代码已经拉取成功

[root@jenkins-slave ~]# ll /backup/jenkins/slave/workspace/pipline-test2
total 4
-rw-r--r-- 1 root root 111 Aug 22 15:27 index.html

然后需要将slave上的代码拷贝到web服务器,需要修改pipeline的配置
如果不想使用groovy代码就在前面用sh “里面填写shell命令”
在这里插入图片描述
此时还需要设置slave和web服务器免秘钥登陆,所以需要把slave的公钥发送到Web服务器

[root@jenkins-slave ~]# ssh-copy-id 10.0.0.8
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
The authenticity of host '10.0.0.8 (10.0.0.8)' can't be established.
ECDSA key fingerprint is SHA256:6dnMaIY2HylZXAKj9eRf6BQLls+CyGg25+kKdWOBtbw.
ECDSA key fingerprint is MD5:44:5b:03:33:ff:e0:6e:69:87:b5:9c:be:13:b3:2a:b7.
Are you sure you want to continue connecting (yes/no)? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@10.0.0.8's password: 

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh '10.0.0.8'"
and check to make sure that only the key(s) you wanted were added.

[root@jenkins-slave ~]# 
[root@jenkins-slave ~]# 
[root@jenkins-slave ~]# ssh 10.0.0.8
Last login: Thu Aug 22 10:29:18 2019 from 10.0.0.176
*************当你的才华撑不起野心的时候,就请安静下来学习吧*************
[root@web02 ~]# exit
logout
Connection to 10.0.0.8 closed.
[root@jenkins-slave ~]# 

然后重新构建版本可以看到已经成功
在这里插入图片描述
然后查看Web服务器的站点目录是否已经有slave传来的代码
可以看到web服务器已经收到slave传来的代码

[root@web02 webapps]# ll /data/tomcat/webapps/test/index.html    
-rw-r--r-- 1 root root 111 Aug 22 15:47 /data/tomcat/webapps/test/index.html

然后在scp的时候需要先停止服务然后在重启启动服务
在这里插入图片描述
如果报错
在这里插入图片描述
在这里插入图片描述
这是因为tomcat启动的时候找不到JAVA_HOME路径,需要添加以下变更
vim catalina.sh
加入以下信息

export JAVA_HOME=/application/jdk
export JRE_HOME=/application/jdk/jre

再次构建版本可以看到此时已经构建成功
在这里插入图片描述
在这里插入图片描述
可以再去web服务器查看tomcat是否启动,可以看到时间是刚上线的

[root@web02 webapps]# ps -ef |grep tomcat
root      75218      1  2 16:36 ?        00:00:01 /application/jdk/jre/bin/java -Djava.util.logging.config.file=/application/tomca/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=12345 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=10.0.0.8 -Djava.endorsed.dirs=/application/tomcat/endorsed -classpath /application/tomcat/bin/bootstrap.jar:/application/tomcat/bin/tomcat-juli.jar -Dcatalina.base=/application/tomcat -Dcatalina.home=/application/tomcat -Djava.io.tmpdir=/application/tomcat/temp org.apache.catalina.startup.Bootstrap start
root      75249  71741  0 16:37 pts/0    00:00:00 grep --color=auto tomcat