1 Pipeline

1.1 Pipeline界说

Pipeline是经过Jenkinsfile描绘的流水线,设备声明式插件Pipeline:Declarative

Jenkensfile的组成:

  • 指定nodgithub是干什么的e节点/workspace
  • 指定作业选项
  • 指定stages阶段
  • 指定构建后操作

1.2 Pipeline语法

1.2.1 agent指定嵌套if函数node节点/workspace

可选参数:

  • any标明任何可用的节点上实施pipeline
  • none为agent的默许值
  • label标明在指定节点上作业
  • nogradlede标明容许额外的选项
agent {
node {
label "masgithub下载ter" // 指定作业节点的标签或称谓
customWorkspace "${workspace}" // 指定作业的作业目录(可选)
}
}

1.2.2 options指定作业选项

options指令容许从流水线内部装备特定的流水线选项,也能够由插件供应:

  • buildDiscarder:为最近的流水线作业的特定数量保存组件和github是干什么的控制台输出
  • disableConcurrentBuilds:不容许一起实施流水线,gradle打包可防止一起拜访同享资源
  • overriderIndexTrigger嵌套是什么意思s:容许掩盖分支索引触发器的默许处理
  • timeout:设置超时时刻
  • retry:失利后重新测验的次数
  • skipStagesAfterUnstable:一旦构建状况变为UNSTABLE,就跳过该阶段
options {
timestamps() // 在日志中打印时刻
s嵌套kipDefaultCheckout() // 删去隐式的checkout scm 句子
disableCouncurrentBuilds() // 制gradle是什么止并行
timeout(time:1, unit:'HOURS') // 流水线超时设置为1H
}

1.2.3 stages指定stages阶段

包含了一个或多个stag函数式编程和面向对象e指令,用于联接交给进程中每个离散的部分函数式编程入门

stag函数式编程的长处es{
stage("PullC嵌套是什么意思ode") { // 阶段称谓
steps { // 进程
timeout(time:5, ugradle教程nit:'MINUTES') { // 指定进程的超时时刻
scr扁平化规划风格ipt { // 指定作业的gradle是什么脚本
println("获取代码")
}
}gradle下载慢解决方法
}
}扁平化处理
stage("Build") { /github下载/ 阶段称谓
steps { // 进程
timeout(time:嵌套调用20, unit:'MINUTES') { /github直播途径永久回家/ 指定进程的超时时刻
script { // 指定作业的脚本
println("运用打包")
}gradle和maven的差异
}
}
}
stage("CodeScan") { // 阶段称谓
steps { // 进程
timeout(time:30, unit:'MIN函数式编程言语UTES') { // 指定进程的超时时刻
script { // 指定github直播途径永久回家作业的脚本
println("代码扫描")
}
}
}
}
}

1.2.4 post指定构建后操作

post-扁平化co扁平化处理是什么意思ndition块:

  • always{}:总嵌套查询是实施函数式编程思想
  • succ函数式编程和面向对象的差异ess{}:成功后实施
  • failure{}:失利后实施
  • aborted{}:取消后实施
  • changed{}:当流水线或阶段结束状况和之前不一起实施
  • unstable{}:当流水线或阶段状况gradle教程为u函数式编程 javanstable时实施
post {github中文官网网页
al扁平化组织结构ways {
println("总是实施")
}
success {
script {
// currentBuild是一个大局变量
// description是构建描绘
currentBuild.description += "n 构建成嵌套循环功!"
}
}
failu嵌套查询sql句子r扁平化处理的优缺点e函数式编程思想 {
script {
currentBuild.descriptio嵌套结构n += "n 构建失利!"
}
}
aborted {
script {
currentBuild.description +=github直播途径永久回家 "n 构建取消!"
}
}
}

1.2.5 enviroment环境变量

嵌套结构于指定一个键值对序列,用于界说一切/特定阶段进程的环境变量,取决于environment界说的方位。支撑credentials()方法,用于经过标识符拜访jenkin扁平化s预github中文社区界说的凭证。相当于界说一个变量,能够在后续运用嵌套函数

pipeline {
agent any
enviroment {
CC = 'clang'
}
staggithub中文社区es {
stage("example") {
enviroment {
ACC_KEY = credentaigithub中文社区ls("my-secret-text")
}
steps {
sh 'printenv'
}
}
}
}

1.2.6 parameter参数

为流水线作业时设置项目相关的参数

para函数式编程 javameters {
string(函数式编程jsname: 'DEPLOY_ENV', defaultValue: 'sta嵌套分类汇总ging', description: '')
booleanParam(name: 'DEBUgithub官网G_BUILD', defaultValue: truegithub打不开, degradle是什么scrptio: '')GitHub
}

1.2.7 t扁平化处理的优缺点rigger触发器

构建触发器:

  • cron计划任务守时实施构建:triggers{cron('H */4 * * 1-5')}
  • pollSCM与cron类型,由jenkins守时检测源码改变:triggers{pollSCM('H */4 * * 1-5')}
  • upstream接受都好切开的作业字符串和阈值,当字符串中任何作业以最小阈值结束时,流水线被重新触发

1.2.8 input人工招认

input由人工招认是否持续进函数式编程言语

  • message:呈现给用户的提函数式编程js示信息
  • id可选默许为stage称谓
  • ok默许表单的ok文本
  • submitter:可选,逗扁平化处理的优缺点github永久回家地址分隔的用户列表或容许提交的外部组名,默许容许任何用户
  • parameter:提示提交者供应一个可选的参数列表

示例:

pipeline {
agent any
stages {
stage('SayHello') {
input {嵌套函数
messa嵌套循环ge "Should we continue"
ok "Yes, we should"
submitter "xd1函数式编程言语998"
parameters {
string(name: "PERSON", defaultValue: "JXD", descriptio扁平化处理的优缺点n: "Who are you?")函数式编程言语
}
}
steps {
echo "gradleHello ${PERSON}"
}
}
}
}

【Jenkins】Pipeline根底及高档用法

【Jenkins】Pipeline根底及高档用法

1.2.9 when语法

放置在stage中,条件为true,stage实施。

  • brangradle和maven的差异ch:构建的分支和给定的嵌套调用分支匹配则实施,适用于多分支流水线:when {branch 'master'}
  • environm函数式编程入门ent:指定github打不开环境变量是给函数式编程思想定值实施:when {environment name: 'DEPLOY_TO', value:'prooduction'}
  • expression:当指定的Groovy表达式评价为true时才实施:when {expression {return params.DEBUG_BUILD}}

when语法根函数式编程思想据参数值跳过实施的阶段

  • notgradle打包:当嵌套条件为false时实施:when {not {branch 'master'}}
  • allOf:当一切嵌套条件都为github是干什么的true才实施:when {allOf {bra函数式编程言语nch 'master'; environment name: 'DEPLOY_TO, value: 'production}}
  • anyOf:当至少有一个嵌套条件为true时实施
pipeline {
agent any
parameters {
string(nGitHubame: "PERSON", defaultValue: "JXD", description: "Who are you?")
}
stages{
stagegradle构建失利('Sa函数式编程和面向对象yHello')嵌套查询sql句子 {
input {
message "Should we contin函数式编程jsue"
ok "gradle装置装备Yes, we should"
submitter "xd1998"
}
steps {
echo "Hello ${PERSOgradle下载N}"
}
}
stage("PullCode") { // 阶段称谓
steps { // 进程
timeout(time:5, unit:'嵌套是什么意思MINUTES') { // 指定进程的超时时刻
script { // 指定作业的脚本
println("获取代码")
}
}
}
}
stage("Build") { // 阶段称谓
steps嵌套循环 { // 进程
timeout(timegradle装置装备:20, unit:函数式编程思想'MINUTES') { // 指定进程的超时时刻
script { // 指定作业的脚本
println("运用打包")
}
}
}
}
stage("CodeSca扁平化图标n") { // 阶段称谓
when {
environment name: "PERSON",
value: 'JXD'
}
steps { // 进程
timeout(time:30, unit:'MINUTES') { // 指定进程的超时时刻
script { // 指定作业的脚本
println("github怎样下载文件代码扫描")
}
}
}
}
}
}

【Jenkins】Pipeline根底及高档用法

【Jenkins】Pipeline根底及高档用法

2 Jenkins Share Library

src目录类似于规范的Java src目录结构,实施流水线时,将这个目录增加到类途径,vars目录保管脚本文件,这些脚本文件在管道中作为变量揭露。resource目录容许libraryResource从外部库运用进程来加载相关联的非Groovy扁平化处理是什么意思文件。

(root)
- src  # Gro扁平化处理是什么意思ovy源文件
|    -org
|        -foo
|            -Bar.groovy    # org.扁平化是什么意思foo.Bar 类
- vars
|    -foo.groovy    # 大局的foo变量
|    -foo.txt    # foo变量的help函数式编程言语排行榜
- resourcgradle打包es    # 源文件(外部库)
|    -扁平化处理就是圈套org
|        -foo
|            -bar.json     # org.foo.Bar的静态hel嵌套分类汇总per数据

2.1 创建自己的同享库

在github中新建仓库,在src/org/devops下创建文件,界说同享方法

package org.devops
// 打印内容
def PrintMes(content) {
println(content)
}

【Jenkins】Pipeline根底及高档用法

2.2 在Jenkins中装备同享库

先设置同享扁平化处理是什么意思库的称谓,后续在pipeline中经过@github怎样下载文件Library或许Libr嵌套if函数ary{}指定同享扁平化库。根据github的分支称谓指定默gradle构建失利许的版别
【Jenkins】Pipeline根底及高档用法
设置同享库中的源码处理
【Jenkins】Pipeline根底及高档用法

2.3 在流水线中运用同享库

#!github开放私库groovy
@Library('jenkinsli嵌套函数b') _
def tools = new org.devops.togradle翻译ols()
String workspace = "/opt/jenkins/workspace"
pipeline {
agent {
node {
label "mas嵌套结构ter"
customWorkspace "$函数式编程言语排行榜{workspace扁平化是什么意思}"
}
}gradle翻译
parameters {
string(name: "PERSON", defaugradle构建失利ltValue: "JXD", d嵌套分类汇总的操作过程escription: "Who are you?")
}
stages{函数式编程言语
stage嵌套结构('SayHello') {
input {
message "Should we continue"
ok "Yes, we should"
submittergradle装备 "xd1998"
}
steps {
echo "Hello ${PERSON}"
}
}
stage("PullCode") { // 阶段称谓
steps { /扁平化插画/ 进程
timeout(time:5, unit:'函数式编程和面向对象的差异MINUTES') { // 指定进程的超时时刻
script { // 指定作业的脚本
println("获取代码")
}
}
}
}
stage("Build") { // 阶函数式编程和面向对象段称谓
steps { // 进程
timeout(time:20, unit函数式编程 java:'MINUTES') { // 指定进程的超时时刻
script { // 指定作业的脚本
println("运用gradle打包"gradle下载)
}
}
}
}
stage("gradle翻译CodeScan") { // 阶段称谓
when {
environ函数式编程思想me函数式编程言语排行榜nt name: "PERSON",
value: 'JXD'
}
steps { // 进程
timeou函数式编程思想t(time:30, unit:'MINUTES')嵌套函数 { // 指定进程的超时时刻
script { // 指定作业的脚本
println(扁平化规划风格"代码扫描")
tools.PrintMes('this is mylib')
}
}
}
}
}
}

【Jenkins】Pipeline根底及高档用法

3 Groovy

Groovy是功能强大可选类型的动态言语,支撑Java途径,能够与Java集成,供应脚本编写、特定领域言语编写、作业时和编译时元编程及函数式编程。

3.1 设备Gr嵌套结构oovy

  1. 下载Groovygithub永久回家地址设备包
  2. 解压设备包
  3. 获取bin目录
  4. 将bin写入/etc/profile文件
export GROOVY_HOME=/opt/g扁平化插画roovy
export PATH=$PATH:gradle教程$GROOVY_HOME/bin
  1. 嵌套查询sql句子效:source /etc/profil扁平化是什么意思e
  2. 发起Groovy IDE:groovyconsole

3.2 Groovy根底

数据类型String常用方法:

  • containgithub是干什么的s()是否包含特定内容
  • size() length()字符串长度
  • toSt扁平化图标ring()转为string类型
  • indexOgradle下载f()元素索引
  • endWith()是否指定嵌套函数字符结束
  • minus() plus() 增加去掉字符串扁平化规划风格
  • reverse() 反向排序
  • substring(1,2)取子字符串
  • toUpperCasgradle教程e() toLowerCase()嵌套函数 大小写转化
  • split() 切分字符串

单引号引证一般字符串,双引号相当于模板扁平化字符串能够运用${}引证变量

数据类型List常用方法:

  • + – += -= 增删元素github是干什么的
  • add() 增加元素
  • isEmpty() 判空
  • intersect() disjoint() 取交集、判别是否有外交
  • flattegithub怎样下载文件n() 扁平化列表
  • unique() 去重
  • reverse() sort() 反转 排序
  • count() 个数
  • join() 联接
  • sum() min() max() 求和、最值
  • contains() 包含特定元素
  • remove() r嵌套调用emoveAll()
  • each() 遍历

界说函数

def PrintMes嵌套调用sage(megithub官网ssage) {
println(message)
}

弥补:常用的Pipeline DSL

  1. readJSON
  2. checkout
  3. publishgithub中文官网网页HTML
  4. i扁平化nput
  5. credent嵌套函数ials
  6. hgradle下载慢解决方法tgradle是什么tpRequest
  7. email

4 Jenkins东西集成

4.1 Maven集成

集成Maven、Grgithub官网adle、Ant进程类似:下载压缩包,解压缩,找到bin目录,装备环境变量,让环境变量收效。在大局东西装备中装备home的方位(假如没找到装备的当地就设备插件函数式编程思想),在pipeline中定嵌套结构义一个变量等于tool + “na嵌套me” ,后续运用变量即可。

【Jenkins】Pipeline根底及高档用法

在github中新增jenkinsfile

pipeline {
agent {
node {
label "master"
}
}
st扁平化组织结构ages {
stage("build") {
steps {
script {
mvnHome = tool "maven3.6.3"
sh "${mvnHomegradle构建失利}/扁平化图标bin/mvn -v"
}
}嵌套查询sql句子
}
}
}

从SCM中装备github是干什么的流水线

【Jenkins】Pipeline根底及高档用法

实施流水线,实施成功

【Jenkins】Pipeline根底及高档用法

4.2 NPM集成

  1. 设备node
  2. 在大局东西装备中装备home的方位
  3. 遇到一个报错:/usr/bin/env: node: No such file or directory,解决方法:增加软联接ln -s /usr/local/NODEJS_HOME/bin/node /u函数式编程言语sr/bin/node

【Jenkins】Pipeline根底及高档用法

4.3 运用同享库整合构建东西

【Jenkins】Pipeline根底及高档用法

4.4 Ansible集成

  1. 设备ansible
  2. 装备ssh
  3. 装备gradle和maven的差异servers

【Jenkins】Pipeline根底及高档用法
将Ansible增加到流水线中

#!gr函数式编程的长处oovy
@扁平化处理的优缺点Library('jenkinslib') _
def bugradle和maven的差异ild = new org.devops.build()
def deploy = new org.devops.deploy()
Sgithub打不开tring buildShell = "${env.buil嵌套函数dShell}"
String builgradle装备dType = "${env.buildType}"
String dep嵌套分类汇总的操作过程loyHost函数式编程言语排行榜s = "${env.deployHosts}"
pipeline {
agent {
ngithub永久回家地址ode {
label "master"
}
}
stage函数式编程思想s {
stage("build") {
steps {
script {
build.Build(buildT函数式编程思想ype, buildShell)
deploy.AnsibleDeploy("${deployHosts}", "-m ping")
}
}
}
}
}

引入的同享库:@Library('jenkinslib'函数式编程和面向对象的差异) _

package orggradle构建失利.devops
def An嵌套if函数sibleDeploy(hosts, func) {
sh "ans扁平化处理ible ${func} ${hosts}"
}

【Jenkins】Pipeline根底及高档用法