1. Jenkins节点
1.1 常用的节点
- 内建节点
- SSH节点
- Java Web节点
1.1.1 SSH节点配置
- 远程工作目录
- 节点中必须有该目录,用于下载和运行jenkins
- 主机
- 节点的ip
1.1.2 Java Web节点配置
- 全局安全配置
- 代理:勾选Java代理协议
1.2 节点管理的缺陷
- 没有负载监控能力(任务数量做的负载均衡)
- 高可用能力差
- 资源利用率
使用k8s和jenkins集成来解决
1.3 环境变量/工具位置的配置
- 全局环境变量
- 节点环境变量:点击配置从节点,进行配置
1.4 父子job配置
- 在子job的设置中,构建触发器配置父job
2. pipeline
2.1 语法 Declarative pipeline
语法树
- 必须包含在一个pipeline块内
pipeline{}
pipeline {
agent any // 定义构建代理
environment {
param = 'xx'
}
stages { // 定义阶段
stage('pull source code') {
steps {
echo 'pull source code'
sleep 5
}
}
stage('build'){
steps {
echo 'build source code'
sleep 5
}
}
}
post{ // 定义全局后置处理程序
always {
echo 'say goodbye'
}
}
}
agent:定义pipeline执行节点
- 必须出现的指令
- 参数
- any:可以在任意agent上执行pipeline
- none:pipeline将不分配全局agent, 每个stage分配自己的agent
- label:指定运行节点的Label
- node:自定义运行节点配置
- 指定 label
- 指定 customWorkspace
- docker:控制目标节点上的docker运行相关内容
pipeline { agent { label 'master' customWorkspace 'myWorkspace' } }
stages:定义阶段集
- 必须出现的指令
- 包含一个或多个stage的序列
- 每个Pipeline 代码区间中必须只有一个stages
stage:定义阶段
- 必须出现的指令
- 无参数
- 包含在stages中
- Pipeline完成的所有实际工作都需要包含到stage中
- 需要定义stage的名字
steps:定义步骤
- 必须出现的指令
- 无参数
- 具体执行步骤,包含在 stage 代码区间中
post:定义Pipeline或stage运行结束时的操作
-
不是必须出现的指令
-
参数:
- always:无论Pipeline运行的完成状态如何都会运行
- changed:只有当前Pipeline运行的状态与先前完成的Pipeline的状态不同时,才能运行
- failure:仅当当前Pipeline处于“失败”状态时才运行
- success :仅当当前Pipeline具有“成功”状态时才运行
- unstable:只有当前Pipeline具有“不稳定”状态才能运行
- aborted:只有当前Pipeline处于“中止”状态时才能运行
post { always { echo 'say always' } success { echo 'say success' } failure { echo 'say failure' } }
options:定义pipeline 的专有属性
- 不是必须出现的指令
- 参数:
- buildDiscarder:保持构建的最大个数
- disableConcurrentBuilds:不允许并行执行pipeline任务
- timeout:pipeline 超时时间
- retry:失败后,重试整个Pipeline的次数
- timestamps:预定义由Pipeline生成的所有控制台输出时间
- skipStagesAfterUnstable:一旦构建状态进入了“Unstable”状态,就跳过此stage
options {
timeout(time: 30, unit: 'SECONDS')
buildDiscarder(logRotator(numToKeepStr: '10'))
retry(5)
}
environment:定义Pipeline或stage运行时的环境变量
- 不是必须出现的指令
- 无参数
environment {
PERSON = "Kevin"
}
stages {
stage('pull source code') {
steps {
echo "hello ${PERSON}"
echo PERSON
}
}
parameters:定义pipeline 的专有参数列表
- 不是必须出现的指令
- 使用 ${变量名} 进行参数化调用
- 参数:
- 支持数据类型:booleanParam, choice, credentials, file, text, password, run, string
- 类似参数化构建的选项,结合environment,可避免首次构建失败
parameters {
string(name: 'PERSON' ,defaultValue:'Jenkins',description:'输入的文本参数')
}
environment {
PERSON = "$params.PERSON"
}
stages {
stage('pull source code') {
steps {
echo "hello ${PERSON}"
echo 'pull source code'
}
}
triggers:定义了Pipeline自动化触发的方式
- 不是必须出现的指令
- 参数:
- cron:接受一个cron风格的字符串来定义Pipeline触发的常规间隔
- pollSCM:接受一个cron风格的字符串来定义 Jenkins 检查SCM源更改的常规间隔;如果存在新的更改,则Pipeline将被重新触发
triggers {
cron('H/2 * * * *')
}
script:定义脚本
- 在script块内,可执行groovy脚本
2.2 语法 Scripts pipeline
流程控制 if-else
node {
stage('Example') {
if (env.BRANCH_NAME == 'master') {
echo 'I only execute on the master branch'
} else {
echo 'I execute elsewhere'
}
}
}
流程控制 try-catch
stage('Test') {
node{
echo "This is test stage which run on the slave agent."
try {
echo "This is in the try block."
sh 'exit 1'
}catch (exc) {
echo "Something failed, I'm in the catch block."
}finally {
echo "Finally, I'm in the finally block."
}
}
}
环境变量定义及引用
- 环境工具变量的定义
- 设置位置: “Manage Jenkins”-> “Global Tool Configuration”
- Script 代码中引用环境变量,调用java、maven工具
stage('env tools') {
node('master'){
//定义maven java环境
def mvnHome = tool 'Maven 3.9.3'
def jdkHome = tool 'jdk1.8_master'
//引用环境变量,配置PATH变量
env.PATH = "${mvnHome}/bin:${env.PATH}"
env.PATH = "${jdkHome}/bin:${env.PATH}"
//调用java mvn 工具
sh "java -version"
sh "mvn --version"
}
}