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}"
}
}
}
}
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怎样下载文件代码扫描")
}
}
}
}
}
}
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)
}
2.2 在Jenkins中装备同享库
先设置同享扁平化处理是什么意思库的称谓,后续在pipeline中经过@github怎样下载文件Library或许Libr嵌套if函数ary{}指定同享扁平化库。根据github的分支称谓指定默gradle构建失利许的版别
设置同享库中的源码处理
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')
}
}
}
}
}
}
3 Groovy
Groovy是功能强大可选类型的动态言语,支撑Java途径,能够与Java集成,供应脚本编写、特定领域言语编写、作业时和编译时元编程及函数式编程。
3.1 设备Gr嵌套结构oovy
- 下载Groovygithub永久回家地址设备包
- 解压设备包
- 获取bin目录
- 将bin写入/etc/profile文件
export GROOVY_HOME=/opt/g扁平化插画roovy
export PATH=$PATH:gradle教程$GROOVY_HOME/bin
- 收嵌套查询sql句子效:source /etc/profil扁平化是什么意思e
- 发起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
- readJSON
- checkout
- publishgithub中文官网网页HTML
- i扁平化nput
- credent嵌套函数ials
- hgradle下载慢解决方法tgradle是什么tpRequest
4 Jenkins东西集成
4.1 Maven集成
集成Maven、Grgithub官网adle、Ant进程类似:下载压缩包,解压缩,找到bin目录,装备环境变量,让环境变量收效。在大局东西装备中装备home的方位(假如没找到装备的当地就设备插件函数式编程思想),在pipeline中定嵌套结构义一个变量等于tool + “na嵌套me” ,后续运用变量即可。
在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是干什么的流水线
实施流水线,实施成功
4.2 NPM集成
- 设备node
- 在大局东西装备中装备home的方位
- 遇到一个报错:
/usr/bin/env: node: No such file or directory
,解决方法:增加软联接ln -s /usr/local/NODEJS_HOME/bin/node /u函数式编程言语sr/bin/node
4.3 运用同享库整合构建东西
4.4 Ansible集成
- 设备ansible
- 装备ssh
- 装备gradle和maven的差异servers
#!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}"
}