本文共 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/