Jenkins高级篇之Pipeline方法篇-Pipeline Basic Steps-1-方法deleteDir和dir、echo、error
这篇开始来学习一个最基础的pipeline组件,这个也是一个独立的插件,在安装pipeline的时候默认会自动安装,插件的名称是pipeline basic steps, 你可以去你自己jenkins环境,插件管理下的installed下面找到这个插件。这篇我们先来学习下两个关于文件夹路径操作的方法。1.pipeline basic steps 官网主页官网有这个basic steps下相...
这篇开始来学习一个最基础的pipeline组件,这个也是一个独立的插件,在安装pipeline的时候默认会自动安装,插件的名称是pipeline basic steps, 你可以去你自己jenkins环境,插件管理下的installed下面找到这个插件。这篇我们先来学习下两个关于文件夹路径操作的方法。
1.pipeline basic steps 官网主页
官网有这个basic steps下相关方法、指令的介绍,说实话,这个介绍太不友好了。英语好的人,认真读了还好,不然各种坑。地址是https://jenkins.io/doc/pipeline/steps/workflow-basic-steps/
2.方法deleteDir()
一开始我以为这个是一个指令,并不是一个方法,一般来说,指令就是deleterDir,而方法就得这么写deleteDir(), 这个在官网的页面完全没有告诉你如何去使用,一行代码都没有。认真看deleterDir的描述才知道,这个是默认递归删除WORKSPACE下的文件和文件夹。这个方法是没有参数,也不需要参数(我就傻傻地尝试了传递一个文件夹路径的字符串参数给这个方法)。下面来演示使用这个方法清空当前WORKSPACE。
这篇开始,由于这个插件方法都很简单,我就没有把方法抽取成模块里的方法,也就是说,这篇代码练习,只用pipeline stage job这个groovy文件,不需要代码里load module这个groovy。
我的pipeline stage job代码如下。
import hudson.model.*;
println env.JOB_NAME
println env.BUILD_NUMBER
pipeline{
agent any
stages{
stage("deleteDir") {
steps{
script{
sh("ls -al ${env.WORKSPACE}")
deleteDir() // clean up current work directory
sh("ls -al ${env.WORKSPACE}")
}
}
}
}
}
解释一下上面的代码,第一个要了解的就是sh这个指令,你可以写成sh 'command...', 也可以写成sh("command..."), 这个sh是shell的意思,告诉jenkins接下来这里要执行linux shell脚本或者命令,所以运行上面的代码,需要在linux的节点下运行。第一行shell命令是显示当然WORKSPACE这个路径下文件,第二个是执行deleterDir()方法,默认是清空当然jenkins 项目的WORKSPACE路径下所有内容。第三行是再次使用ls 命令,打印清除前后的对比。
我的jenkins job:http://65.49.216.200:8080/job/pipeline_basic_steps/1/
为了测试deleteDir是一个方法,而不是一个指令,我做了测试:http://65.49.216.200:8080/job/pipeline_basic_steps/2/
输出结果:
[pipeline_basic_steps] Running shell script
+ ls -al /var/lib/jenkins/workspace/pipeline_basic_steps
total 40
drwxr-xr-x 7 jenkins jenkins 4096 Nov 11 04:51 .
drwxr-xr-x 16 jenkins jenkins 4096 Nov 11 04:51 ..
-rw-r--r-- 1 jenkins jenkins 367 Nov 11 04:51 .classpath
drwxr-xr-x 8 jenkins jenkins 4096 Nov 11 04:51 .git
-rw-r--r-- 1 jenkins jenkins 357 Nov 11 04:51 Jenkinsfile
drwxr-xr-x 2 jenkins jenkins 4096 Nov 11 04:51 lib
drwxr-xr-x 5 jenkins jenkins 4096 Nov 11 04:51 pipeline
-rw-r--r-- 1 jenkins jenkins 398 Nov 11 04:51 .project
drwxr-xr-x 2 jenkins jenkins 4096 Nov 11 04:51 .settings
drwxr-xr-x 2 jenkins jenkins 4096 Nov 11 04:51 testdata
[Pipeline] deleteDir
[Pipeline] sh
[pipeline_basic_steps] Running shell script
+ ls -al /var/lib/jenkins/workspace/pipeline_basic_steps
total 8
drwxr-xr-x 2 jenkins jenkins 4096 Nov 11 04:51 .
drwxr-xr-x 16 jenkins jenkins 4096 Nov 11 04:51 ..
[Pipeline] }
[Pipeline] // script
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // withEnv
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
Finished: SUCCESS
上面的deleterDir()方法特别适合这种场景,做完了每一个stage里面的事情,我们需要在post{...}里面写一些clean up操作,如果这个操作是清空WORKSPACE的话,这个deleteDir()就派上用场了。特别是生产环境,我们需要节约jenkins服务器的磁盘空间,有时候清空WORKSPACE是很有必要的操作。
3方法dir()
如果使用了dir语句块,这个方法就是改变当前的工作目录。在dir语句块里执行的其他路径或者相对路径,都是和dir里面设置的文件路径相关,这个和WORKSPACE相对文件路径已经没有关系了。
下面演示下dir改变了当前的工作路径的代码
import hudson.model.*;
println env.JOB_NAME
println env.BUILD_NUMBER
pipeline{
agent any
stages{
stage("dir") {
steps{
println env.WORKSPACE
dir("${env.WORKSPACE}/testdata"){
sh "pwd"
}
}
}
}
}
测试的结果输出日志。
[Pipeline] stage
[Pipeline] { (dir)
[Pipeline] echo
/var/lib/jenkins/workspace/pipeline_basic_steps
[Pipeline] dir
Running in /var/lib/jenkins/workspace/pipeline_basic_steps/testdata
[Pipeline] {
[Pipeline] sh
[testdata] Running shell script
+ pwd
/var/lib/jenkins/workspace/pipeline_basic_steps/testdata
[Pipeline] }
[Pipeline] // dir
上面在使用了dir("new_path"){...}之后,执行shell 命令pwd,路径果然变了。
4.方法echo("message")和error("error_message")
方法echo就是和groovy中的println没有任何区别,如果看打印的效果。一般来说使用echo就是打印info debug级别的日志输出用,如果遇到错误,就可以使用error(“error message”),如果出现执行到error方法,jenkins job会退出并显示失败效果。
看看这两个方法的demo
import hudson.model.*;
println env.JOB_NAME
println env.BUILD_NUMBER
pipeline{
agent any
stages{
stage("dir_echo_error_demo") {
steps{
println env.WORKSPACE
dir("${env.WORKSPACE}/testdata"){
sh "pwd"
}
echo ("list all files under current workd directory")
sh("ls -al ${env.WORKSPACE}")
echo("some info logs output")
error("some error method output")
}
}
}
}
输出日志
[Pipeline] }
[Pipeline] // stage
[Pipeline] withEnv
[Pipeline] {
[Pipeline] stage
[Pipeline] { (dir_echo_error_demo)
[Pipeline] echo
/var/lib/jenkins/workspace/pipeline_basic_steps
[Pipeline] dir
Running in /var/lib/jenkins/workspace/pipeline_basic_steps/testdata
[Pipeline] {
[Pipeline] sh
[testdata] Running shell script
+ pwd
/var/lib/jenkins/workspace/pipeline_basic_steps/testdata
[Pipeline] }
[Pipeline] // dir
[Pipeline] echo
list all files under current workd directory
[Pipeline] sh
[pipeline_basic_steps] Running shell script
+ ls -al /var/lib/jenkins/workspace/pipeline_basic_steps
total 44
drwxr-xr-x 8 jenkins jenkins 4096 Nov 11 08:08 .
drwxr-xr-x 16 jenkins jenkins 4096 Nov 11 07:37 ..
-rw-r--r-- 1 jenkins jenkins 367 Nov 11 08:08 .classpath
drwxr-xr-x 8 jenkins jenkins 4096 Nov 11 08:08 .git
-rw-r--r-- 1 jenkins jenkins 357 Nov 11 08:08 Jenkinsfile
drwxr-xr-x 2 jenkins jenkins 4096 Nov 11 08:08 lib
drwxr-xr-x 5 jenkins jenkins 4096 Nov 11 08:08 pipeline
-rw-r--r-- 1 jenkins jenkins 398 Nov 11 08:08 .project
drwxr-xr-x 2 jenkins jenkins 4096 Nov 11 08:08 .settings
drwxr-xr-x 2 jenkins jenkins 4096 Nov 11 08:08 testdata
drwxr-xr-x 2 jenkins jenkins 4096 Nov 11 08:08 testdata@tmp
[Pipeline] echo
some info logs output
[Pipeline] error
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // withEnv
[Pipeline] }
[Pipeline] // node
sh: line 1: 24892 Terminated sleep 3
sh: line 1: 24901 Terminated sleep 3
[Pipeline] End of Pipeline
ERROR: some error method output
Finished: FAILURE
更多推荐
所有评论(0)