pipeline分布式构建和pipline基础语法
一、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