Jenkins高级篇之Pipeline技巧篇-1-小白搭建Pipeline项目开发环境

       之前,有人和我说,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 java


wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins.io/redhat-stable/jenkins.repo

rpm --import http://pkg.jenkins.io/redhat-stable/jenkins.io.key

yum 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,输入http://192.168.24.130:8080/pluginManager/advanced,找到下图红圈,把之前https改成http.

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

 

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

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

具体参考这个文章:https://blog.csdn.net/u011541946/article/details/83118096

这篇文章对应的项目git,https://github.com/Anthonyliu86/pipeline-skills-demo 不要看我git项目,由于随着文章增多,我pipeline代码也不断提交,本篇代码,上面已经贴出来。

 

9.启动测试和观察

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

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

Started by user root
Obtained src/Jenkinsfile/projectA-stages.groovy from git https://github.com/Anthonyliu86/pipeline-skills-demo.git
Running in Durability level: MAX_SURVIVABILITY
org.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 root
Obtained src/Jenkinsfile/projectA-stages.groovy from git https://github.com/Anthonyliu86/pipeline-skills-demo.git
Running in Durability level: MAX_SURVIVABILITY
[Pipeline] Start of Pipeline
[Pipeline] node
Running on Jenkins in /var/lib/jenkins/workspace/ProjectA-pipeline-demo
[Pipeline] {
[Pipeline] stage
[Pipeline] { (Declarative: Checkout SCM)
[Pipeline] checkout
using credential 03214975-2168-4795-981a-ddd935f62a76
Cloning the remote Git repository
Cloning repository https://github.com/Anthonyliu86/pipeline-skills-demo.git
 > git init /var/lib/jenkins/workspace/ProjectA-pipeline-demo # timeout=10
Fetching upstream changes from https://github.com/Anthonyliu86/pipeline-skills-demo.git
 > git --version # timeout=10
using 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=10
Fetching upstream changes from https://github.com/Anthonyliu86/pipeline-skills-demo.git
using 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=10
Checking out Revision 70e67020389d17701784a1fc46b5d50fdfd06211 (refs/remotes/origin/master)
 > git config core.sparsecheckout # timeout=10
 > git checkout -f 70e67020389d17701784a1fc46b5d50fdfd06211
Commit message: "fix: add steps"
First time build. Skipping changelog.
[Pipeline] }
[Pipeline] // stage
[Pipeline] withEnv
[Pipeline] {
[Pipeline] stage
[Pipeline] { (Hello Pipeline)
[Pipeline] script
[Pipeline] {
[Pipeline] echo
Hello Pipeline!
[Pipeline] echo
ProjectA-pipeline-demo
[Pipeline] echo
3
[Pipeline] }
[Pipeline] // script
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // withEnv
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
Finished: SUCCESS

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

  • 2
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值