Jenkins⾼级篇之Pipeline⽅法篇-PipelineBasicSteps-6-写。。
。
yohe
1.writeFile
在前⾯⽂章,我介绍了readFile,前⾯介绍了如何读,那么这⾥就介绍如何写。readFile和writeFile都是简单的⽂本⽂件读写。当你拿到⼀个⽂件,不知道选择什么⽅式来读写,那么这个readFile和writeFile就是最原始的⽅法。但是,如果是json类型⽂件,那么我们可以⽤前⾯介绍插件的readJson来读取,读取得到是⼀个json 的对象,就可以直接调⽤json的⽅法。
我会在/testdata⽬录下,写⼊⼀个的⽂件,先通过writeFile写⼊,然后通过readFile读取出来。
pipeline代码
del.*;
println env.JOB_NAME
println env.BUILD_NUMBER
pipeline{
agent any
stages{
stage("writeFile demo") {
高辛烷值
steps{
script {
write_file_path = "${env.WORKSPACE}/"
file_contents = "Hello Anthony!! 这是⼀个测试例⼦"
//write
writeFile file: write_file_path, text: file_contents, encoding: "UTF-8"
// read file and print it out
fileContents = readFile file: write_file_path, encoding: "UTF-8"
println fileContents
}
}
}
}
}
测试结果
[Pipeline] }
[Pipeline] // stage
[Pipeline] withEnv
护士节演讲稿
[Pipeline] {
[Pipeline] stage
[Pipeline] { (writeFile demo)
[Pipeline] script
[Pipeline] {
[Pipeline] writeFile
[Pipeline] readFile
[Pipeline] echo
Hello Anthony!! ����һ����������
[Pipeline] }
[Pipeline] // script
stylist
[Pipeline] }plumblossom
[Pipeline] // stage
[Pipeline] }
[Pipeline] // withEnv
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
Finished: SUCCESS
上⾯看到了乱码,即使我代码中使⽤了encoding=UTF-8进⾏读写操作,但是由于github系统不⽀持保存中⽂代码,所以这⾥打印出来内容就是乱码。
其实关于basic pipeline这个插件,有很多操作是写到step(...) 这个代码块⾥的,在step⾥可以调⽤其他构建或者构建后操作,例如构建后操作⼀般有发送邮件提醒功能。官⽹也有很多⽅法和参数关于ste
p的描述,我可以负责任的说,除⾮你对Jenkins太熟悉,否则你完全可以跳过官⽹关于step的这个很长篇幅的学习,反正我⼯作是是很少⽤到官⽹介绍关于在step⾥能实现的⼀些功能。
2.git plugin插件介绍
下⾯我们来学习别的常⽤的插件以及⽅法,前⾯我们运⾏stage,如果你观察了jenkins的job 的stage view,⼀定会看到第⼀个stage的名称叫Declarative: Checkout SCM,这个是pipeline⾃动给加上的。有时候,我们在⼀个项⽬⾃动化中,可能还需要checkout其他git项⽬的代码。这种有两个git项⽬地址的⾃动化项⽬有很多,下⾯我就来介绍⼀下。
环境条件:
1.我分别在github上有两个项⽬
2.我在jenkins配置了访问github的⽤户名和密码
这重点提下这个访问github的密码在jenkins上的存储。
我的Jenkins环境上就配置了⼀个github的访问⽤户,记住红圈这个id,待会下⾯代码需要⽤到。
3.我写两个stage,第⼆个stage会显⽰如何在pipeline中下载我第⼆个github项⽬
下⾯是我的pipeline代码
del.*;
println env.JOB_NAME
println env.BUILD_NUMBER
pipeline{
agent any
stages{
stage("Hello Demo") {
steps{
script {
println "Hello Demo!"
}
}
}
stage("git checkout") {
notchsteps{
script {
checkout([$class: 'GitSCM', branches: [[name: '*/master']],
urRemoteConfigs: [[credentialsId: '6f4fa66c-eb02-46dc-a4b3-3a232be5ef6e',
url: '/Anthonyliu86/HelloWorld.git']]])
}
}
}
}
}
我的测试运⾏⽇志
[Pipeline] echo
pipeline_basic_steps
[Pipeline] echo
80
[Pipeline] node
Running on Jenkins in /var/lib/jenkins/workspace/pipeline_basic_steps
[Pipeline] {
在线汉翻英[Pipeline] stage
[Pipeline] { (Declarative: Checkout SCM)
[Pipeline] checkout
> git rev-par --is-inside-work-tree # timeout=10
Fetching changes from the remote Git repository
> git igin./Anthonyliu86/Pipeline-learn-demo-anthony.git # timeout=10
Fetching upstream changes /Anthonyliu86/Pipeline-learn-demo-anthony.git
> git --version # timeout=10
using GIT_ASKPASS to t credentials
> git fetch --tags --/Anthonyliu86/Pipeline-learn-demo-anthony.git +refs/heads/*:refs/remotes/origin/* > git rev-par refs/remotes/origin/master^{commit} # timeout=10
英国国际学校> git rev-par refs/remotes/origin/origin/master^{commit} # timeout=10
Checking out Revision 4abe7ec1dba5ffd25f258347b8f9594377eefb3f (refs/remotes/origin/master)
> git config core.sparcheckout # timeout=10
> git checkout -f 4abe7ec1dba5ffd25f258347b8f9594377eefb3f
Commit message: "add git check demo"
> git rev-list --no-walk 9689ab8bad547bdfc21d9b8a742b8df3a4dc3376 # timeout=10
[Pipeline] }
[Pipeline] // stage
[Pipeline] withEnv
[Pipeline] {
[Pipeline] stage
[Pipeline] { (Hello Demo)
[Pipeline] script
[Pipeline] {
[Pipeline] {
[Pipeline] echo
Hello Demo!
[Pipeline] }
[Pipeline] // script
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (git checkout)
[Pipeline] script
[Pipeline] {
[Pipeline] checkout
> git rev-par --is-inside-work-tree # timeout=10
Fetching changes from the remote Git repository
> git igin./Anthonyliu86/HelloWorld.git # timeout=10
Fetching upstream changes /Anthonyliu86/HelloWorld.git
> git --version # timeout=10
using GIT_ASKPASS to t credentials
> git fetch --tags --/Anthonyliu86/HelloWorld.git +refs/heads/*:refs/remotes/origin/*
> git rev-par refs/remotes/origin/master^{commit} # timeout=10
> git rev-par refs/remotes/origin/origin/master^{commit} # timeout=10
Checking out Revision 6038053d56db63710721b0847398e2a02ca8d7f1 (refs/remotes/origin/master)
> git config core.sparcheckout # timeout=10
> git checkout -f 6038053d56db63710721b0847398e2a02ca8d7f1
Commit message: "Update test1"
First time build. Skipping changelog.
[Pipeline] }
[Pipeline] // script
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // withEnv
[Pipeline] }
workout造句
[Pipeline] // node
[Pipeline] End of Pipeline
Finished: SUCCESS
这种git 下载代码的⽅式,在任何基于git的版本控制服务器都可以,常见的github,gittree,gitlab等。⼀般在pipeline代码中,很常见在不同stage中使⽤不同git仓库地址的代码,所以git SCM操作,可以写在不同stage中。这个到指定git服务器上拉取代码是很常见的pipeline代码操作,其他关于什么github集成插件⾥⾯⽅法的⼏乎可以不去了解。
udun这个地址查询插件名称就好。例如,我就看到钉钉提醒,之前在我博客介绍简单⼆次开发这个插件。接下来⽂章,我可能会借着lenium UI⾃动化具体项⽬来结合pipeline,演⽰如何做集成测试,所有的Jenkins UI操作都通过⽤pipeline代码的⽅式来实现。