Jenkins高级篇之Pipeline方法篇-Pipeline Basic Steps-1-方法deleteDir和dir、echo、error

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011541946/article/details/83960577

这篇开始来学习一个最基础的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

猜你喜欢

转载自blog.csdn.net/u011541946/article/details/83960577
今日推荐