欢迎访问我的博客,你的支持,是我最大的动力!

Jenkins2权威指南3-声明式流水线/项目类型

Linux 小马奔腾 85℃ 评论
目录:
[显示]

声明式流水线

支持声明式流水线功能的插件与Blue Ocean紧紧绑在一起

声明式流水线结构
代码块,{}包裹
部分,stages,steps,post
指令,是一条语句或代码块,用于定义值、配置行为、指定要完成的行为
步骤,steps中的一条语句
条件
-when,存在于stage定义中

-conditions,存在于post部分,定义后期处理条件,这里的条件指构建的状态,如success/failure

各部分介绍

agent any 可以运行在任意节点上
agent none 不指定全局代理节点,如有必要,需要为单个阶段指定代理节点
agent{label "<label>"} 指定在标签为label的节点运行

使用现有docker镜像
在动态分配的节点上,拉取指定镜像,并基于该镜像运行的容器中运行这个流水线或阶段
agent{docker '<image>'}
agent{docker {<elements}} 定义更多细节,可添加三种元素
- image '<image>' 指定镜像
- label '<label>' 在匹配label的节点上实例化并控制该容器
- args '<string>' 要传递给docker容器的参数

使用dockerfile创建容器
## 若使用dockerfile,会执行一个全局的checkout scm以便拉取到代码仓库中的Dockerfile文件,可在options中的skipDefaultCheckout()禁用此行为
agent{dockerfile true} 在代码仓库中,根目录下有Dockerfile文件,jenkins会根据该文件创建镜像并实例化容器,然后在容器中运行流水线/阶段
agent{dockerfile{<elements>}} 定义更多细节,可添加三种元素
- filename '<path to dockerfile>' 可指定Dockerfile的路径和文件名
- label '<label>' 在匹配label的节点上实例化并控制该容器
- args '<string>' 要传递给docker容器的参数

docker和非docker阶段使用相同节点
reuseNode 指令,重用相同的节点和工作空间,用流水线原先定义的节点来控制最终的容器

environment
定义环境变量,在整个流水线/阶段范围内可见

tools
Global Tool Configuration 中配置工具的版本、路径、安装程序等
可以使用的工具有:ant、git、gradle、jdk、jgit、jgitapache、maven等
注意,agent none时,tools指令将不起作用,因为没有任何节点可提供工具环境
tools指令不适用于docker,推荐做法是使用预安装所需工具的镜像

options
指定一些属性和值,即jenkins web表单中一个项目的基本配置中可以设定的事情(除了参数)
如清理历史构建

options中可用的选项
- buildDiscarder 保留指定数量的流水线执行
options{buildDiscarder(logRotator(numToKeepStr:'10'))}
- disableConcurrentBuilds 阻止jenkins并发执行同一个流水线
options{disableConcurrentBuilds()}
- retry 若流水线运行失败,重试的次数
options{retry(2)}
- skipDefaultChekout 禁用隐式的checkout scm功能
options{skipDefaultChekout()}
- skipStagesAfterUnstable 某阶段若标示为不稳定的,不会执行后续任务
options{skipStagesAfterUnstable()}
- timeout 超过该时间,中止流水线
options{timeout(time:15,unit:'MINUTES')}
- timestamps 添加时间戳到控制台输出中,需要安装 Timestamper插件
options{timestamps()}

triggers
触发启动流水线构建(不适用于多分支流水线、组织/团队项目,它们以jenkinsfile为标志,通过webhook触发构建)
四种触发器:
- cron - pollSCM 使用cron语法 如,triggers{cron(10 * * * *)}
- upstream 接收以逗号分隔的任务字符串及一个校验条件作为参数,当这个字符串中的一个任务运行结束且结果与校验条件匹配时,触发流水线
- githubPush 接收GitHub webhook事件 如,triggers{githubPush()}

parameters
指定参数,类似于web表单中的参数化构建部分
- booleanParam
parameters{booleanParam(defaultValue:false,description:'run?',name:'test')}
- choice 从选项列表中选择,列表中的第一个值为默认值
parameters{choice(choices:'windows/nlinux',description:'whick platform',name:'platform')}
- file fileLocation是相对于工作空间的相对路径
parameters{file(fileLocation:'',description:'select a file to upload')}
- text 多行文本
parameters{text(defaultValue:'message',description:'enter your msg',name:'userMsg')}
- password
parameters{password(defaultValue:'pass',description:'password?',name:'userPass')}
- string
parameters{string(defaultValue:'',description:'input str',name:'test')}
- run 从某个任务中选择一个特定的运行
其中 project 子参数是选择的运行,默认会是最近的一次,然后在脚本中,可以通过一些环境变量访问它们,如:
PARAMETER_NAME=<jenkins_url>/job/<job_name>/<run_number>/
PARAMETER_NAME_JOBNAME=<job_name>
PARAMETER_NAME_NUMBER=<run_number>
PARAMETER_NAME_NAME=<display_name>
PARAMETER_NAME_RESULT=<run_result>
而 filter 子参数可以基于整体的构建状态筛选某类型的运行:
All Builds //包括运行中的构建
Completed Builds
Successful Builds //包括稳定和不稳定的构建
Stable Builds Only
parameters{run(name:"last success",description:'last success project',project:'project1',filter:'Successful Builds')}

在流水线中使用参数
可按照 params.<parameter_name> 格式引用参数

libraries
导入共享库 还可以封闭不是声明式并且通常不能直接在流水线中使用的代码

stages
stage
在stage中的 environment、tools、agent 会覆盖全局对应的值
steps
存放DSL步骤 同时可以有条件地执行

有条件地执行一个阶段

条件执行使用与、或、非

allOf 与
anyOf 或 至少要有一个为true才执行
not 非

post
类似于构建后操作,post代码块中的条件是基于构建状态的
可用条件如下:
- always
- changed 当前构建状态与之前状态不同
- success
- failure
- unstable
- aborted 被中止,不推荐使用

处理非声明式代码

赋值语句不是声明式的,如 def server=Artifactory.server 'my-server-id'
1、可以创建共享库,然后在声明式流水线中调用
2、放在pipeline代码块外面,如pipeline语句的上面 (若使用blue ocean编辑器,它将除去任何pipeline代码块之外的所有代码)
3、script语句,可以包裹任何非声明式代码 script{...}

使用parallel

项目参数

基础设置

丢弃旧的构建 Discard old build
脚本式:
properties([buildDiscarder(logRotator(artifactDaysToKeepStr:'',
artifactNumToKeepStr:'',daysToKeepStr:'3',numToKeepStr:'5')),
pipelineTriggers([])])
声明式:
options{
buildDiscarder(logRotator(numToKeepStr:'5'))
}

GitHub项目
安装 GitHub 插件,指定url

节流构建 Throttle builds
指定一个时间段内允许构建的数量

必要时执行并发构建
脚本式:
properties([disableConcurrentBuilds()])
声明式:
options{disableConcurrentBuilds()}

源码管理

构建触发器

远程触发构建Trigger builds remotely
通过wget或curl这样的工具触发流水线构建,这里会提供一个触发链接
# 注意,若设置了匿名用户没有读权限的安全机制,则需要通过身份验证才能触发构建

Poll SCM
周期性检查代码是否有变更,通常勾选 Ignore post-commit hooks 忽略来自勾子的信号,避免重复触发

构建环境

提供配置文件 Provider Configuration files
配置文件提供者插件 Config File Provider plugin,允许将配置文件复制到所有节点
replace tokens可替换由jenkins设置的并在配置文件中指定的环境变量及其值 (依赖于Token Macro plugin)
如,${ENV,var="<variable-name>"} 其中variable-name会被替换为想要获得的变量名的值,如JOB_NAME
若有多个文件,使用时可以使用数组语法

卡住时中止构建 Abort the build if it's stuck
超时时,可以将超时时间写入任务描述中,如
stopping the build after {0} min

使用机密文本或文件
需要 凭证绑定插件 Credentials Binding plugin
使用一个环境变量引用机密文本或文件,在流水线中可使用此变量代替机密文本/文件

构建
构建后操作

项目类型

1、自由风格类型项目
2、Maven项目类型
一些传统的非maven部署移至Pre Steps和Post Steps
3、流水线项目类型
4、外部任务项目类型
允许监视通过jenkins进程运行的外部任务(不常用)
export JENKINS_HOME=http://localhost:8080
java -jar jenkins-core-2.46.2.jar extern1 sh list.sh
5、多配置项目类型
简化运行一组仅在参数方面有所不同的项目,基于配置矩阵 configuration matrix 实现
可添加到配置矩阵的坐标轴类型:
slaves,指定节点名称或标签
label expression,允许节点标签和运算符组合,如 label1&&label2
user-defined axis,自定义
坐标轴名称是在构建部署中可使用的环境变量
组合过滤器,限制某个组合被构建 如 !(job_family=="management" && region=="northwest")

6、Ivy项目
7、文件夹
文件夹可以有自己的共享库(不可信的)
8、多分支流水线项目
可以自动创建和管理项目的分支,并为每个分支创建新的流水线
基于项目中的jenkinsfile,其组织结构类似于文件夹
在分支索引完成后,将为多分支流水线项目中的每个匹配分支创建一个单独的任务
无法配置单个任务,使用jenkinsfile管理流水线
9、GitHub组织项目

 

 

 

转载请注明:轻风博客 » Jenkins2权威指南3-声明式流水线/项目类型

喜欢 (0)or分享 (0)