Jenkins-Pipeline【流水线】、Pipeline与Webhook实践
1、流水线命令特点
pipeline的声明式语法有一个非常重要的问题, 1、steps内部的命令,每一条单独的命令都在当前任务的工作目录下执行。 即使A命令切换到了一个新的目录,接下来的B命令并不会在对应的新目录中执行,而是在当前任务的工作目录下执行。如果非要在切换后的目录下执行命令B,那么采用shell中的 && 符号将多条命令拼接一起即可。 2、在流水线任务中,中文方式编写命令不友好,推荐在外面写好命令,再拷贝到里面 3、默认情况下,不支持shell里面的表达式,因为groovy有自己的条件表达式 4、如果jenkins的工作目录下存在同名目录,则获取失败
2、示例1、Pipeline使用命令构建【工作目录位置确认】
2.1、pipeline代码
pipeline { agent any stages { stage('cmd-test') { steps { echo "命令测试" sh 'pwd' sh 'mkdir nihao ' sh 'cd nihao && pwd && mkdir buhao && cd buhao && pwd' sh 'pwd && ls' } } } } # 主要是验证工作目录的位置
2.2、构建并且查看日志
结果显示:
每一个sh命令都是在当前任务的工作目录中执行,如果需要切换工作目录,需要将多条命令合并,这是由于jenkins的job任务彼此之间是独立的运行空间,所以资源不共享。
3、示例2、Pipeline不支持管道
3.1、Pipeline代码
pipeline { agent any stages { stage('Hello') { steps { sh 'num=$(docker ps | grep tomcat-web | wc -l)' echo "$num" echo '----------------------------' } } } }
3.2、构建且查看日志
3.2.1、报错显示
3.2.2、日志
结果显示:groovy 不支持我们常用的这种bash进阶语法,因为groovy 有自己独有的语法
4、示例3、出现同名目录就会导致任务中断
4.1、Pipeline代码
pipeline { agent any stages { stage('Hello') { steps { sh 'git clone git@192.168.10.10:web/tomcat_pro.git' echo '----------------------------' sh 'git clone git@192.168.10.10:web/tomcat_pro.git' } } } }
4.2、构建且查看日志
4.2.1、报错显示
4.2.2、日志
结果显示:如果任务目录下,出现同名目录就会导致任务中断
5、实战:之前tomcat_pro项目修改为Pipeline【Pipeline+WebHook】
5.1、pipeline代码
pipeline { agent any stages { stage('Prepare') { steps { echo "开始tomcat_web任务" } } stage('CloneCode') { steps { echo "git获取代码" sh 'rm -rf tomcat_pro' sh 'git clone git@192.168.10.10:web/tomcat_pro.git' sh 'cd tomcat_pro && pwd && git config --local user.name "jenkins" && git config --local user.email "jenkins@example.com"' } } stage('ArchiveROOT') { steps { echo "制作ROOT.tar.gz" sh 'cd tomcat_pro && tar -C tomcat-web -zcf tomcat-web/ROOT.tar.gz ROOT --remove-files' } } stage('MakeDockerImage') { steps { echo "制作Docker镜像" sh 'cd tomcat_pro && docker build -t tomcat-web:v0.1 ./tomcat-web' } } stage('Deploy') { steps { echo "布署Docker镜像" sh 'docker stop tomcat-web' sh 'docker rm -f tomcat-web' sh 'docker run -d --name tomcat-web -p 8081:8080 tomcat-web:v0.1' } } } }
5.2、构建且查看状态
5.3、查看日志
5.4、配置WebHook
5.4.1、jenkins上配置
5.4.2、Gitlab上配置
5.4.3、测试