博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Jenkins高级篇之Pipeline技巧篇-1-小白搭建Pipeline项目开发环境
阅读量:4302 次
发布时间:2019-05-27

本文共 7098 字,大约阅读时间需要 23 分钟。

       之前,有人和我说,pipeline教程这里,关于如何创建pipeline的git项目和,如何在jenkins上做pipeline的测试这块,在前面文章交代不清楚。这里我补上一篇,通过这一篇,小白也能开始自己动手写一个pipeline的项目。接下来,我还会写几篇文章,主要是实际工作中pipeline项目的一些技巧,我认为算是学习pipeline的中级篇,我也不知道有没有高级篇,学习完前面pipeline语法文章和实践篇和这几篇技巧篇,我觉得,你可以在你自己项目推广pipeline这种持续集成测试的方案。

1.在github上创建一个仓库

如果你git命令不熟悉,或者本机环境没有安装git client,你还是选择在github的界面上选择新建一个仓库。只需要输入仓库名称,点击创建就行,勾选还是不勾选readMe不是重点。下面截图,是我在我个人的github中创建的一个pipeline项目,主要用来介绍实际工作中的pipeline代码的一些技巧。是博客中pipeline文章系列的补充。

这样我们的练习的项目就创建并初始化好了。接下来,我们所有文件新建和代码都在Eclipse中完成。上面红圈url是git项目的地址,我们需要拷贝下来,待会Eclipse中导入这个git项目需要用到。

 

2.导入github项目到Eclipse中

在Eclipse中的Package Explorer空白处,点击右键,然后选择Import…菜单。然后选择Git-> Projects from git, 点击Next菜单,然后选择Clone URL, 继续点击Next按钮。然后把上面github项目地址黏贴上去。

黏贴地址之后,用户名和密码是自动识别,如果你浏览器没有登录github,而且在eclipse上没有添加github的用户名。你可能需要输入用户名和密码,下次就会记住,自动补齐这些信息。然后一直默认点击Next直到导入结束。

 

3.Pipeline的项目的风格

我建议大家按照这样代码结构去搭建你pipeline项目。就是两个文件夹下有两个文件,一个是stage,用来定义多个stage, 在jenkins stage view可以看到效果。第二个就是stage代码中需要调用一些封装好的方法,我把放到另外一个文件夹中。这些方法有可能是通用的方法,例如工具类,也有一些业务流程的封装。

这里提一下Jenkinsfile这个概念,我记得我之前博客说过,jenkinsfile就是我们写多个stage的那个文件,这个文件名称可以就是jenkinsfile这个单词,也可以是任何xxx.groovy,现在我们演示就是第二个情况,这个projectA-stage.groovy, 我们接下来会在jenkins的job的配置页面需要用到。

 

4.第一次git 提交

这次我在两个groovy文件没有写任何代码,两个是空文件。下面我们利用Eclipse这个git插件,借用图形化界面来帮我们使用git提交代码到远程仓库。

拖拽上面两个groovy结尾文件,然后右侧写一句简单的commit message。中文和英文都可以,不过建议写英文。确认无误之后,点击commit and push按钮,过一会显示一个提交成功的消息,说明这次代码变更成功提交了远程仓库。

 

5.Pipeline脚本开发编辑器推荐

有些人说,Eclipse上已经安装了groovy默认的编辑器,为什么还要安装其他的插件呢?可以这样说,pipeline脚本和纯groovy代码不一样,如果没有插件,写代码很不方便,没有任何高亮的语法,看起来很不舒服,就像在记事本里写代码一样。这个插件的名称叫做jenkins editor, 一般来说pipeline的代码文件,如果在jenkins上跑,这个文件一般叫Jenkinsfile,所以这个插件就叫这个名称,请看下图我安装过的版本。

以后,我们这里遇到groovy结尾的文件,都右键,选择打开方式,选择Jenkins Editor打开。如果一个组多个人写代码,这个插件统一也是有好处。尽量保持了代码格式样式风格一致性。

 

6.开始写stage.groovy文件

我这里写一个最简单的pipeline代码,打印hello pipeline和打印当前jenkins 的Job名称和Job构建号。

import hudson.model.*;pipeline{ 		agent any	stages{		stage("Hello Pipeline") {			script {				println "Hello Pipeline!"				println env.JOB_NAME				println env.BUILD_NUMBER			}		}	}}

7.安装Jenkins环境和几个常见问题

如果你没有Jenkins环境,你自己在windows上或者虚拟机器上安装一个linux,然后部署一个jenkins服务。个人推荐centos上安装jenkins,主要步骤如下。

# 安装JAVA, 默认是openjdk-1.8.0以上yum install -y javawget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins.io/redhat-stable/jenkins.reporpm --import http://pkg.jenkins.io/redhat-stable/jenkins.io.keyyum install -y jenkins#启动jenkins 服务service jenkins start | restart | stop#设置开启启动chkconfig jenkins on

PS:我前面文章中出现的jenkins环境,由于我的VPS机器IP被封了,所以不能提供服务。

这里简单题下几个Jenkins常见问题和解决办法。

问题1:yum install jenkins之后,启动不了jenkins, 这种问题一般是Java没有安装正确,造成的。

问题2:虚拟机中启动了jenkins服务,但是你自己笔记本电脑浏览器打不开jenkins登录界面。解决办法就是,到虚拟机中关闭防火墙:systemctl stop firewalld.service

问题3:虚拟机第一次安装jenkins并启动服务之后,无法安装默认插件,页面提示网络问题,需要设置代理或者跳过安装。解决办法是:先新开一个浏览器tab,输入,找到下图红圈,把之前https改成http.

然后回到虚拟机,service Jenkins restart 之后,再次浏览器打开,就能出现选择默认插件还是自定义安装插件的页面。

 

8.创建并配置一个pipeline Jenkins job

选择新建job, job类型选择pipeline,输入名称,点击确定。

具体参考这个文章:

这篇文章对应的项目git, 不要看我git项目,由于随着文章增多,我pipeline代码也不断提交,本篇代码,上面已经贴出来。

 

9.启动测试和观察

点击立即构建,然后我们观察下控制台,如果你以后做pipeline项目或者Jenkins类似持续集成项目,日志控制台是你每天都要监控的事情,在你开发脚本阶段。

我这就报错,然后我们看看报错,然后如何解决。

Started by user rootObtained src/Jenkinsfile/projectA-stages.groovy from git https://github.com/Anthonyliu86/pipeline-skills-demo.gitRunning in Durability level: MAX_SURVIVABILITYorg.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:WorkflowScript: 8: Unknown stage section "script". Starting with version 0.5, steps in a stage must be in a ‘steps’ block. @ line 8, column 3.   		stage("Hello Pipeline") {     ^WorkflowScript: 8: Expected one of "steps", "stages", or "parallel" for stage "Hello Pipeline" @ line 8, column 3.   		stage("Hello Pipeline") {     ^2 errors	at org.codehaus.groovy.control.ErrorCollector.failIfErrors(ErrorCollector.java:310)	at org.codehaus.groovy.control.CompilationUnit.applyToPrimaryClassNodes(CompilationUnit.java:1085)	at org.codehaus.groovy.control.CompilationUnit.doPhaseOperation(CompilationUnit.java:603)	at org.codehaus.groovy.control.CompilationUnit.processPhaseOperations(CompilationUnit.java:581)	at org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:558)	at groovy.lang.GroovyClassLoader.doParseClass(GroovyClassLoader.java:298)	at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:268)	at groovy.lang.GroovyShell.parseClass(GroovyShell.java:688)

上面重点看workflowScript:8 Expected one of steps, 意思在第8行代码,没有找到steps这个关键字。所以,我们的代码需要调整下,把script放在steps范围之内包裹起来。

接下来,我们借助jenkins replay的插件,我们原地修改并测试,默认是安装了这个插件,我们发现这里之前报错脚本没有加载进来就报错,也就是编译报错,所以我们还是要通过Eclipse修改代码提交,然后再次测试。

修改代码如下

import hudson.model.*;pipeline{ 		agent any	stages{		stage("Hello Pipeline") {			steps {			    script {					println "Hello Pipeline!"					println env.JOB_NAME					println env.BUILD_NUMBER				}			}		}	}}

提交到github之后,jenkins点击立即构建,这次就成功了,完整日志如下。

Started by user rootObtained src/Jenkinsfile/projectA-stages.groovy from git https://github.com/Anthonyliu86/pipeline-skills-demo.gitRunning in Durability level: MAX_SURVIVABILITY[Pipeline] Start of Pipeline[Pipeline] nodeRunning on Jenkins in /var/lib/jenkins/workspace/ProjectA-pipeline-demo[Pipeline] {[Pipeline] stage[Pipeline] { (Declarative: Checkout SCM)[Pipeline] checkoutusing credential 03214975-2168-4795-981a-ddd935f62a76Cloning the remote Git repositoryCloning repository https://github.com/Anthonyliu86/pipeline-skills-demo.git > git init /var/lib/jenkins/workspace/ProjectA-pipeline-demo # timeout=10Fetching upstream changes from https://github.com/Anthonyliu86/pipeline-skills-demo.git > git --version # timeout=10using GIT_ASKPASS to set credentials  > git fetch --tags --progress https://github.com/Anthonyliu86/pipeline-skills-demo.git +refs/heads/*:refs/remotes/origin/* > git config remote.origin.url https://github.com/Anthonyliu86/pipeline-skills-demo.git # timeout=10 > git config --add remote.origin.fetch +refs/heads/*:refs/remotes/origin/* # timeout=10 > git config remote.origin.url https://github.com/Anthonyliu86/pipeline-skills-demo.git # timeout=10Fetching upstream changes from https://github.com/Anthonyliu86/pipeline-skills-demo.gitusing GIT_ASKPASS to set credentials  > git fetch --tags --progress https://github.com/Anthonyliu86/pipeline-skills-demo.git +refs/heads/*:refs/remotes/origin/* > git rev-parse refs/remotes/origin/master^{commit} # timeout=10 > git rev-parse refs/remotes/origin/origin/master^{commit} # timeout=10Checking out Revision 70e67020389d17701784a1fc46b5d50fdfd06211 (refs/remotes/origin/master) > git config core.sparsecheckout # timeout=10 > git checkout -f 70e67020389d17701784a1fc46b5d50fdfd06211Commit message: "fix: add steps"First time build. Skipping changelog.[Pipeline] }[Pipeline] // stage[Pipeline] withEnv[Pipeline] {[Pipeline] stage[Pipeline] { (Hello Pipeline)[Pipeline] script[Pipeline] {[Pipeline] echoHello Pipeline![Pipeline] echoProjectA-pipeline-demo[Pipeline] echo3[Pipeline] }[Pipeline] // script[Pipeline] }[Pipeline] // stage[Pipeline] }[Pipeline] // withEnv[Pipeline] }[Pipeline] // node[Pipeline] End of PipelineFinished: SUCCESS

以上就是Pipeline项目的开发环境介绍,上面整个过程包含pipeline项目代码风格,如何创建git项目,如何提交代码,如何查看运行结果,如何根据错误,去修改代码,解决报错或者bug。接下来几篇文章,我就来介绍前面没有介绍过一些语法或者叫技巧。

转载地址:http://okows.baihongyu.com/

你可能感兴趣的文章
Qt下TCP编程
查看>>
客户端与服务端的TCP通信实现(Qt)
查看>>
QT之TCP通信
查看>>
QT 之 TCP/IP 服务器和客户端(一)
查看>>
qt中的tcp
查看>>
基于MFC的socket编程(异步非阻塞通信)
查看>>
异步SOCKET与同步SOCKET
查看>>
MFC匿名管道原理详解、函数总结、调用实例(用MFC的匿名管道读取CMD输出内容)(C++语言)
查看>>
C#与USB设备通信
查看>>
CyUSB.dll的调用经验介绍
查看>>
MFC菜单栏(CMenu)控件
查看>>
Android 中的webview组件显示vue空白的解决方案
查看>>
快速制作数据库设计文档的表格
查看>>
MySQL中异常Packet for query is too large (1117260 > 1048576)的解决方案
查看>>
Linux 中MySQL的安装位置信息
查看>>
DataWhale计算机视觉实践(目标检测)Task01
查看>>
DataWhale计算机视觉实践(目标检测)Task02
查看>>
DataWhale计算机视觉实践(目标检测)Task03
查看>>
DataWhale计算机视觉实践(目标检测)Task04
查看>>
LeetCode 刷题记录26. 删除有序数组中的重复项
查看>>