jenkins 学习
jenkinsfile 有两种格式 声明式和 脚本式
主要学习声明式
pipeline { agent any //提供代理执行流水线 environment { //设置整个流水线的环境变量 } stages { stage('步骤名') { when { //条件判断 } steps{ //步骤具体执行 } } } post{ } }指定运行代理环境
位置:
在 pipeline 内的最前, 必填
指定整个 pipeline 的运行代理环境
在 stage 内的最前, 非必填
指定当前 stage 的运行代理环境
选项:
any: 在任何可用的代理上执行 pipeline 或 stage
lable: 根据 jenkins 集群节点名称设置代理,
pipeline { agent {label 'master'} stages { stage('步骤名') { steps{ //步骤具体执行 } } } }node: 指定 jenkins 集群节点设置代理, lable指定集群节点名称 customWorkspace自定义工作空间
pipeline { agent {node { label 'master' customWorkspace '/opt/modules/workspace/' } } stages { stage('步骤名') { steps{ //步骤具体执行 } } } }none:
pipeline 中使用 agent none 表示全局不指定代理, 但每个 stage 需要指定自己的 agent
pipeline { agent none stages { stage('步骤名') { agent { lable 'slave-1' } steps{ //步骤具体执行 } } } }docker
dockerfile
设置环境变量
位置: 用在 pipeline中 或 stage中
选项:
在 pipeline 中定义 environment, 表示 pipeline 全局使用的环境变量
在 stage 中定义 environment, 表示当前 stage 的环境变量
environment 中提供了一个 credentials()辅助方法, 用以获取 jenkins 中预先定义的凭证
pipeline { agent any environment { EVN_PARAM='env-param' ONE_ACCESS_KEY=credentials('custom-secret') } stages { stage('步骤名') { steps{ //步骤具体执行 } } } }在 pipeline 内或 stage 内 提供附加的控制
位置:
pipeline 内, 最多只能出现一次stage内, 选项只能是 stage 相关: skipDefaultCheckout, timeout, retry, timestamps选项:
buildDiscarder
持久化工件和控制台输出,用于保存Pipeline最近几次运行的数据例如:options { buildDiscarder(logRotator(numToKeepStr: '1')) }
checkoutToSubdirectory
在工作区的子目录中执行源代码检出。例如:options { checkoutToSubdirectory('foo') }
disableConcurrentBuilds
不允许并行执行Pipeline。可用于防止同时访问共享资源等。例如:options { disableConcurrentBuilds() }
preserveStashes
保留已完成构建的存储,用于stage重新启动。例如:options { preserveStashes() }保存最近完成的构建中的stash,或者options { preserveStashes(5) }保留最近五个完成的构建中的stash。
quietPeriod
设置pipeline的静默期(以秒为单位),覆盖全局默认值。例如:options { quietPeriod(30) }
retry
pipline 或 stage 如果失败,请按指定的次数重试。例如:options { retry(3) }
skipDefaultCheckout
在pipline 或 stage指令中默认跳过源代码检出。例如:options { skipDefaultCheckout() }
skipStagesAfterUnstable
一旦构建状态进入了“不稳定”状态,就跳过stage。例如:options { skipStagesAfterUnstable() }
timeout
设置Pipeline或 stage运行的超时时间,之后Jenkins应该中止Pipeline。例如:options { timeout(time: 1, unit: 'HOURS') }
timestamps
当执行时,预处理由Pipeline或 stage生成的所有控制台输出运行时间。例如:options { timestamps() }
启动 pipeline 之前可以输入的参数
位置: pipeline 内
选项:
string
字符串类型的参数,例如: parameters { string(name: 'DEPLOY_ENV', defaultValue: 'staging', description: '') }
text
文本参数,例如: parameters { text(name: 'DEPLOY_TEXT', defaultValue: 'One\nTwo\nThree\n', description: '') }
booleanParam
布尔参数,例如: parameters { booleanParam(name: 'DEBUG_BUILD', defaultValue: true, description: '') }
choice
选项参数,例如: parameters { choice(name: 'CHOICES', choices: ['one', 'two', 'three'], description: '') }
file
文件参数,指定用户在计划构建时要提交的文件,例如: parameters { file(name: 'FILE', description: 'Some file to upload') }
password
密码参数,例如: `parameters { password(name: ‘PASSWORD’, defaultValue: ‘SECRET’, description: ‘A secret password’) }
Jenkinsfile pipeline { agent any parameters { string(name: 'PERSON', defaultValue: 'Mr Jenkins', description: 'Who should I say hello to?') text(name: 'BIOGRAPHY', defaultValue: '', description: 'Enter some information about the person') booleanParam(name: 'TOGGLE', defaultValue: true, description: 'Toggle this value') choice(name: 'CHOICE', choices: ['One', 'Two', 'Three'], description: 'Pick something') password(name: 'PASSWORD', defaultValue: 'SECRET', description: 'Enter a password') file(name: "FILE", description: "Choose a file to upload") } stages { stage('Example') { steps { echo "Hello ${params.PERSON}" echo "Biography: ${params.BIOGRAPHY}" echo "Toggle: ${params.TOGGLE}" echo "Choice: ${params.CHOICE}" echo "Password: ${params.PASSWORD}" } } } }在 stage 内根据 when 条件决定是否执行
位置: stage 内
选项:
branch: 表示分支条件
stage{ when {branch 'master'} steps{echo '分支是 master 才执行'} }environment: 环境变量条件
stage{ when {environment name: 'EVN_PARAM', value:'env-param'} steps{echo '环境变量 EVN_PARAM == env-param 才执行'} }expression: 表达式条件
stage{ when {expression { return true }} steps{echo '表达式求值为 true 时 执行'} }not: 条件不成立时执行, 条件嵌套使用
stage{ when { not {branch 'master'}} steps{echo '非 master 才执行'} }allOf: 复合条件都成立执行, 条件嵌套使用, 多个条件; 分割
stage { when {allOf {branch 'master'; environment name:'ENV_PARAM', value:'env-param' }} steps {echo '条件都成立执行'} }anyOf: 复合条件存在成立的就执行, 条件嵌套使用
stage { when {anyOf {branch 'master'; environment name:'ENV_PARAM', value:'env-param' }} steps {echo '条件存在成立执行'} }stages 可以包含多个 stage
parallel 可以包含多个 stage
stage只能包含一个 steps 或 stages 或 parallel
parallel 是并行执行的, 包含 parallel 的 stage 不能声明 agent 和 tools, 因为此处声明与 steps 没有关系
pipeline { agent any environment { SYSTEM_PARA='abc' } stages{ stage('none parallel') { agent{label 'master'} steps{ echo '这不是并行步骤' } } stage('parallel') { parallel{ stage('parallel-1'){ agent{label 'salve-1'} steps{ echo '并行步骤-1' } } stage('parallel-2'){ agent{label 'salve-2'} steps{ echo '并行步骤-2' } } stage('parallel-3'){ agent{label 'salve-3'} steps{ echo '并行步骤-3' } } } } } }表示 pipeline 执行结束后需要做的操作
位置: 放在 pipeline 最后 或 stage 最后
选项:
always: 无论什么情况下都会运行changed: 只有当前运行结果状态与之前运行结果状态不同时才会执行failure: 只有 pipeline 执行失败时才会执行success: 只有 pipeline 执行成功时才会执行unstable:aborted: 手动终止 pipeline 时执行, 一般 webUI 显示为灰色的图标cleanup: 无论 pipeline 执行如何, 其它所有 post条件执行结束后执行 cleanup pipeline { agent any stages { stage('步骤名') { steps{ //步骤具体执行 } } } post { always { echo 'pipeline 执行完' } faiure { echo '执行失败' } success { echo '执行成功' } cleanup { echo '清理' } } }可以使用 post 部分执行通知操作, 如邮件通知等
创建 pipeline, 编写 jenkinsfile 下有流水线语法, 可以通过这里生成各种插件的集成语法. 并且还有 docker, scm, param等的全局环境变量解释