如何快速上手Jenkinsfile编写?再快一点?

  • 2020 年 2 月 19 日
  • 笔记

您好,本章主要我们主要学习流水线Jenkinsfile的开发工具。主要包含以下内容: 1. 片段生成器 2. 声明式语法生成器 3. 全局变量参考 4. 常用的流水线方法 适合人群: 所有对DevOps感兴趣的同学。


?开始分享喽! 准备上车

1.片段生成器

使用片段生成器可以根据个人需要生成方法,有些方法来源于插件,则需要先安装相关的插件才能使用哦。

填写好参数后,点击生成,然后复制粘贴到Jenkinsfile。

2. 声明式语法生成器

对于不熟悉声明式语法的伙伴,我们可以按照声明式语法生成器选择生成jenkinsfile的片段。在实际实践中很有帮助的。



? 欢迎入群交流 可在文末扫码加入


3. 全局变量

当我们在配置邮件通知时或者制作标签时,可以借用Jenkins自带的全局变量完成。

常用的env变量

BUILD_NUMBER          //构建号  BUILD_ID              //构建号  BUILD_DISPLAY_NAME    //构建显示名称  JOB_NAME              //项目名称    EXECUTOR_NUMBER       //执行器数量  NODE_NAME             //构建节点名称  WORKSPACE             //工作目录  JENKINS_HOME          //Jenkins home  JENKINS_URL           //Jenkins地址  BUILD_URL             //构建地址  JOB_URL               //项目地址

常用的currendBuild变量

result  currentResult   //构建结果  displayName      //构建名称  #111  description      //构建描述  duration         //持续时间

4.常用的流水线方法

JSON处理

def response = readJSON text: "${scanResult}"  println(scanResult)    //原生方法  import groovy.json.*    @NonCPS  def GetJson(text){      def prettyJson = JsonOutput.prettyPrint(text)      new JsonSlurperClassic().parseText(prettyJson)  }

使用凭据

withCredentials([string(credentialsId: "xxxxx", variable: "sonarToken")]) {      println(sonarToken)  }

下载代码

//Git  checkout([$class: 'GitSCM', branches: [[name: "brnachName"]],              doGenerateSubmoduleConfigurations: false,              extensions: [], submoduleCfg: [],              userRemoteConfigs: [[credentialsId: "${credentialsId}",              url: "${srcUrl}"]]])  //Svn  checkout([$class: 'SubversionSCM', additionalCredentials: [],              filterChangelog: false, ignoreDirPropChanges: false,              locations: [[credentialsId: "${credentialsId}",              depthOption: 'infinity', ignoreExternalsOption: true,              remote: "${svnUrl}"]], workspaceUpdater: [$class: 'CheckoutUpdater']]  )

展示报告

publishHTML([allowMissing: false,          alwaysLinkToLastBuild: false,          keepAll: true,          reportDir: './report/',          reportFiles: "a.html, b.html",          reportName: 'InterfaceTestReport',          reportTitles: 'HTML'])

交互输入

def result = input  message: '选择xxxxx',                      ok: '提交',                      parameters: [extendedChoice( description: 'xxxxx',                                                  descriptionPropertyValue: '',                                                  multiSelectDelimiter: ',',                                                  name: 'failePositiveCases',                                                  quoteValue: false,                                                  saveJSONParameterToFile: false,                                                  type: 'PT_CHECKBOX',                                                  value: "1,2,3",                                                  visibleItemCount: 99)]  println(result)

构建用户

wrap([$class: 'BuildUser']){              echo "full name is $BUILD_USER"              echo "user id is $BUILD_USER_ID"              echo "user email is $BUILD_USER_EMAIL"  }

发送http请求

ApiUrl = "http://xxxxxx/api/project_branches/list?project=${projectName}"  Result = httpRequest authentication: 'xxxxxxxxx',                           quiet: true,                           contentType: 'APPLICATION_JSON' ,                           url: "${ApiUrl}"