这篇打算结束basic pipeline这个插件的方法学习,前面和本篇介绍方法,基本把常用的basic pipeline里面的方法都介绍了一遍。如果以后遇到不会的,可以去这个官方网站去查询新的方法介绍,其实官网也是比较坑的,介绍了这个方法的作用,但是没有给出一个具体的代码的示例。就拿https://jenkins.io/doc/pipeline/steps/workflow-basic-steps/ 这篇插件的官网来说,真的没有一个具体代码示例。我都是边看官网文章具体方法介绍,如果不会这个方法代码,就去google查询,然后在具体jenkins job上不断测试和调整代码,最后把测试通过的代码放在这个系列文章中。

1.writeFile

在前面文章,我介绍了readFile,前面介绍了如何读,那么这里就介绍如何写。readFile和writeFile都是简单的文本文件读写。当你拿到一个文件,不知道选择什么方式来读写,那么这个readFile和writeFile就是最原始的方法。但是,如果是json类型文件,那么我们可以用前面介绍插件的readJson来读取,读取得到是一个json 的对象,就可以直接调用json的方法。

我会在/testdata目录下,写入一个write.txt的文件,先通过writeFile写入,然后通过readFile读取出来。

pipeline代码

import hudson.model.*;println env.JOB_NAME
println env.BUILD_NUMBERpipeline{agent anystages{stage("writeFile demo") {steps{script {write_file_path = "${env.WORKSPACE}/testdata/write.txt"file_contents = "Hello Anthony!! 这是一个测试例子"//write into write.txtwriteFile file: write_file_path, text: file_contents, encoding: "UTF-8"// read file and print it outfileContents = 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
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // withEnv
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
Finished: SUCCESS

上面看到了乱码,即使我代码中使用了encoding=UTF-8进行读写操作,但是由于github系统不支持保存中文代码,所以这里打印出来内容就是乱码。

其实关于basic pipeline这个插件,有很多操作是写到step(...) 这个代码块里的,在step里可以调用其他构建或者构建后操作,例如构建后操作一般有发送邮件提醒功能。官网也有很多方法和参数关于step的描述,我可以负责任的说,除非你对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代码

import hudson.model.*;println env.JOB_NAME
println env.BUILD_NUMBERpipeline{agent anystages{stage("Hello Demo") {steps{script {println "Hello Demo!"}}}stage("git checkout") {steps{script {checkout([$class: 'GitSCM', branches: [[name: '*/master']],userRemoteConfigs: [[credentialsId: '6f4fa66c-eb02-46dc-a4b3-3a232be5ef6e', url: 'https://github.com/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-parse --is-inside-work-tree # timeout=10
Fetching changes from the remote Git repository> git config remote.origin.url https://github.com/Anthonyliu86/Pipeline-learn-demo-anthony.git # timeout=10
Fetching upstream changes from https://github.com/Anthonyliu86/Pipeline-learn-demo-anthony.git> git --version # timeout=10
using GIT_ASKPASS to set credentials > git fetch --tags --progress https://github.com/Anthonyliu86/Pipeline-learn-demo-anthony.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 4abe7ec1dba5ffd25f258347b8f9594377eefb3f (refs/remotes/origin/master)> git config core.sparsecheckout # 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] echo
Hello Demo!
[Pipeline] }
[Pipeline] // script
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (git checkout)
[Pipeline] script
[Pipeline] {
[Pipeline] checkout> git rev-parse --is-inside-work-tree # timeout=10
Fetching changes from the remote Git repository> git config remote.origin.url https://github.com/Anthonyliu86/HelloWorld.git # timeout=10
Fetching upstream changes from https://github.com/Anthonyliu86/HelloWorld.git> git --version # timeout=10
using GIT_ASKPASS to set credentials > git fetch --tags --progress https://github.com/Anthonyliu86/HelloWorld.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 6038053d56db63710721b0847398e2a02ca8d7f1 (refs/remotes/origin/master)> git config core.sparsecheckout # 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] }
[Pipeline] // node
[Pipeline] End of Pipeline
Finished: SUCCESS

这种git 下载代码的方式,在任何基于git的版本控制服务器都可以,常见的github,gittree,gitlab等。一般在pipeline代码中,很常见在不同stage中使用不同git仓库地址的代码,所以git SCM操作,可以写在不同stage中。这个到指定git服务器上拉取代码是很常见的pipeline代码操作,其他关于什么github集成插件里面方法的几乎可以不去了解。

到这里,暂时结束学习不同pipeline 插件如何在pipeline 代码里使用,如果你想查询你知道的插件,如何写pipeline去实现,去https://jenkins.io/doc/pipeline/steps/

这个地址查询插件名称就好。例如,我就看到钉钉提醒,之前在我博客介绍简单二次开发这个插件。接下来文章,我可能会借着selenium UI自动化具体项目来结合pipeline,演示如何做集成测试,所有的Jenkins UI操作都通过用pipeline代码的方式来实现。

Jenkins高级篇之Pipeline方法篇-Pipeline Basic Steps-6-写文件writeFile和git SCM相关推荐

  1. 读透《华为数字化转型之道-方法篇》 by 傅一平

    读完了<华为数字化转型之道>,这本书共13章,内容在逻辑上分为认知篇.方法篇.实践篇和平台篇,这本书写的也很结构化,所有内容用以下一张数字化转型框架图即可得到一个整体的认识,也就是1套方法 ...

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

    之前,有人和我说,pipeline教程这里,关于如何创建pipeline的git项目和,如何在jenkins上做pipeline的测试这块,在前面文章交代不清楚.这里我补上一篇,通过这一篇,小白也能开 ...

  3. Jenkins高级篇之Pipeline语法篇-7-Declarative Pipeline指令:triggers/stage/tool

    本篇继续学习Declarative Pipeline的相关指令,本篇学习三个指令,分别是触发器(triggers),stage和tool.触发器主要是方便周期控制自动化提交,stage是在stages ...

  4. Jenkins高级篇之Pipeline语法篇-2-第一个Pipeline脚本练习

    前面一篇,介绍了什么是Pipeline,和Pipeline的基本概念,和几个关键字的基本含义的介绍,真正的涉及到Pipeline的语法还没有开始介绍.这篇先来介绍第一个Pipeline代码,分别用两种 ...

  5. 学习MongoDB 十一: MongoDB聚合(Aggregation Pipeline基础篇上)(三)

    一.Aggregate简介 db.collection.aggregate()是基于数据处理的聚合管道,每个文档通过一个由多个阶段(stage)组成的管道,可以对每个阶段的管道进行分组.过滤等功能,然 ...

  6. 云原生CI/CD:Tekton/pipelin之pipeline概念篇

    云原生CI/CD:Tekton/pipelin之pipeline概念篇 本节介绍下tekton中pipeline概念.作为云原生的CI/CD神器在之前介绍的task和taskrun之后,还有什么强大的 ...

  7. 一文初探Tensorflow高级API使用(初学者篇)

    正文共5917个字,3张图,预计阅读时间34分钟. 笔记整理者:王小草 笔记整理时间:2017年2月26日 对应的官方文档地址:https://www.tensorflow.org/get_start ...

  8. 计算机专业晋升副高答辩,卫生系列高级职称晋升——答辩程序篇

    原标题:卫生系列高级职称晋升--答辩程序篇 答辩分为两部分: 1 命题答辩 主要考察申报晋升者(以下简称考生)对本专业基本理论.基本技能掌握的情况及本专业新进展.具体方法是,在考生所申报的专业范围内由 ...

  9. DEDECMS关于文章上一篇和下一篇标题长度的设置方法

    dedecms获取上一篇.下一篇文章的标签分别为:{dede:prenext get='pre'/}和{dede:prenext get='next'}.那么如何才能通过标签来控制文章标题的长度呢?其 ...

  10. 深入理解Java 8 Lambda(语言篇——lambda,方法引用,目标类型和默认方法)

    作者:Lucida 微博:@peng_gong 豆瓣:@figure9 原文链接:http://zh.lucida.me/blog/java-8-lambdas-insideout-language- ...

最新文章

  1. oracle导入备份失败怎么办,ORACLE 数据备份、恢复以及导入时表空间不存在的解决方案...
  2. 怎么重置mysql密码是多少钱_mysql怎么重置密码
  3. 向前的快捷键_枣院生活快捷键使用手册,你值得拥有
  4. 《剑指Offer》解题目录(更新完毕)
  5. 计算数学与数学理论专栏【简介】
  6. pytorch nn.Linear
  7. oracle skipscan,查询条件包含组合索引所有键为啥执行计划走的是index skip scan???...
  8. MyBatis插件开发:简单分页插件
  9. 最火的C语言编程软件,适合编写C语言代码的编程软件有哪些
  10. MATLAB模糊控制算法,驾驶员制动意图识别,Fuzzy模糊控制算法
  11. javascript爱心特效
  12. SolidWorks工程图做到一半切换工程图模板的方法
  13. Matlab求解数组中的最大值以及它所在的位置
  14. 英语学习软件——《经典双语广告语大全》(图)
  15. mysql 导入工具 php_MySQL数据导入导出方法与工具介绍_PHP教程
  16. java计算机毕业设计科普网站源码+mysql数据库+系统+lw文档+部署
  17. Android开发的经典入门教材和学习…
  18. 网站快速排名百度首页搜索前十名
  19. Python 中隐藏的彩蛋们
  20. 【linux】安装Linux的交叉编译工具链

热门文章

  1. python之math_cmath
  2. MATLAB打开USB摄像头的操作以及常见问题
  3. Matlab:Matlab编程语言的简介、安装、学习路线(几十项代码编程案例分析)之详细攻略
  4. r 语言初学者指南_自然语言处理初学者指南
  5. Eclipse IDE 2022的下载与安装
  6. 【Linux学习】vim编辑器的使用
  7. 洛谷OJ - P1316 - 丢瓶盖(二分答案)
  8. 《推荐系统实践》(一)好的推荐系统
  9. 跳板机+谷歌验证码 ssh 自动登录
  10. 《软件工程导论第6版》--张海藩 牟永敏 课后答案及其详解 第7章 实现