1、pipline 语法介绍
声明式的pipeline语法格式
1. 所有的声明都必须包含在pipeline{}中
2. 块只能有节段,指令,步骤或者赋值语句组成
3. 阶段:agent,stages,post,steps
4. 指令:environment,options,parameters,triggers,stage,input,tool,when
2、阶段
agent: 该指令用于指定构建代理的配置。agent any 表示在任何可用的构建代理上执行流水线。可以使用其他选项如 agent none(不在任何代理上执行)、agent {label 'label-name'}(在具有特定标签的代理上执行)等。
# jenkins 添加节点
stages: stages 指令用于定义流水线中的阶段。阶段是流水线的主要分组单元,用于将构建过程分解为不同的步骤。每个阶段可以包含一个或多个步骤。
steps: steps 指令用于定义流水线中某个阶段的步骤。步骤是构建过程中的具体操作,可以是 shell 脚本、构建命令、插件调用等。
post: post 指令用于定义在所有阶段完成后执行的操作。可以使用不同的条件来指定执行操作的时机,如 always(无论构建结果如何始终执行)、success(仅在构建成功时执行)等。在 post 指令内部,可以定义多个操作,如发送电子邮件通知、触发其他构建等。
3、指令
environment: environment 指令用于定义流水线中的环境变量。可以在流水线的任何阶段或步骤中使用这些环境变量。它们可以用于存储和传递配置信息、凭据、版本号等。
options: options 指令用于定义全局选项和配置。可以使用不同的选项来控制流水线的行为,如超时设置、并行执行、跳过失败的阶段等。
parameters: parameters 指令用于定义流水线的参数。参数可以用于接收用户输入,从而自定义构建过程。可以定义不同类型的参数,如字符串、布尔值、选择列表等。
triggers: triggers 指令用于定义触发流水线执行的条件或事件。可以使用不同的触发器来实现自动触发流水线,如定时触发、代码推送触发、其他流水线完成触发等。
stage: stage 指令用于定义流水线中的阶段。阶段是流水线的主要分组单元,用于将构建过程分解为不同的步骤。每个阶段可以包含一个或多个步骤。
input: input 指令用于在流水线的执行过程中暂停并等待用户输入。可以定义一个或多个输入步骤,以便用户提供必要的确认或参数输入,然后流水线继续执行。
tool: tool 指令用于在流水线中配置和使用工具。可以指定使用特定版本的构建工具、测试工具等。
when: when 指令用于根据条件来控制流水线中某个步骤或阶段的执行。可以使用不同的条件表达式来判断是否执行特定的步骤或阶段,如构建参数的值、环境变量的状态等。
4、示例
# 以下示例结合了部分常用的指令及阶段
pipeline {
agent any
options {
timeout(time: 1, unit: 'HOURS')
disableConcurrentBuilds()
}
parameters {
string(name: 'TARGET_ENV', defaultValue: 'dev', description: 'Target environment for deployment')
booleanParam(name: 'RUN_TESTS', defaultValue: true, description: 'Run tests during the build')
}
triggers {
cron('0 0 * * *') // 每天午夜触发
upstream(upstreamProjects: 'my-other-pipeline', threshold: hudson.model.Result.SUCCESS)
}
stages {
stage('Checkout') {
steps {
git branch: 'main', credentialsId: 'my-git-credentials', url: 'https://github.com/my-repo.git'
}
}
stage('Build') {
steps {
sh 'mvn clean package'
}
}
stage('Test') {
when {
expression { params.RUN_TESTS == true }
}
steps {
sh 'mvn test'
}
}
stage('Deploy') {
when {
environment name: 'TARGET_ENV', value: 'prod'
}
steps {
sh 'deploy-to-prod.sh'
}
}
}
post {
always {
emailext (
subject: 'Jenkins Pipeline - Build Status',
body: '''
构建完成
''',
to: 'my-email@example.com',
attachLog: true
)
}
}
}
#使用 agent any 指定在任何可用的代理上运行流水线。
#使用 options 指令设置了超时时间和禁用并发构建。
#使用 parameters 指令定义了两个参数,用于接收目标环境和是否运行测试的用户输入。
#使用 triggers 指令设置了每天午夜触发和上游流水线成功触发的条件。
#使用 stages 指令定义了几个阶段,包括代码检出、构建、测试和部署。
#使用 when 指令在测试和部署阶段根据条件进行了控制。
#使用 post 指令定义了 always 块,在流水线执行结束后发送电子邮件通知构建状态,并附带构建日志。
注意:
pipeline:代表整条流水线,包含整条流水线的逻辑
agent:指定流水线的执行器 (在节点上)和工作区
stages:封装了用于定义流水线主体和逻辑的所有单个阶段定义
至少包含一个stage
stage:代表流水线的阶段,每个阶段都必须有名称
5、实战演练
准备:以下服务器防火墙与selinux均需关闭
192.168.58.140 部署gitlab 详细参照:http://t.csdnimg.cn/Sb1uz
192.168.58.153 部署Jenkins 详细参照:http://t.csdnimg.cn/HxYPt
192.168.58.156 安装好nginx tomcat 详细参照:http://t.csdnimg.cn/CmLUg
以下操作在jenkins页面进行
1.新建流水线任务
简单文本完成后,开始构建,并查看是否步骤是否成功。
2.拉取代码进行测试
在gitlab项目端获取仓库源 :git@192.168.58.140:root/easy-springmvc-maven.git
在jenkins页面端的pipeline中进行如下操作:
将复制的脚本粘贴至相应位置,应用保存。
构建并查看相应的执行信息
继续添加步骤测试是否构建成功
3.测试:能不能从错误的地方开始重新执行
将NO.3步改错,保存并构建
将错误的地方改正确,保存但不开始构建
若没有Blue Ocean,则需要下列步骤安装下载,有此软件则跳过此步。
打开 Blue Ocean
点击未运行成功的那条记录
重新启动两次失败,说明不可以以此种方式重启,则选择重新构建。
构建成功。
代码总结:
pipeline {
agent any
stages {
stage('NO.1') {
steps {
echo "你好 世界"
}
}
stage("NO.2"){
steps {
echo "I want you to make her happy ^_^"
}
}
stage("NO.3"){
steps {
git credentialsId: '1f5adfa6-af28-4f62-8785-38d2774c3196', url: 'git@192.168.58.140:root/easy-springmvc-maven.git'
}
}
stage("NO.4"){
steps {
echo "World peace, Our hope !!!"
}
}
}
}
4.打包代码的流水线
准备:
从gitlab上拉一个java的小项目
jdk用的11版本的(/usr/local/java11)
maven用的3.8.5(/usr/local/maven/bin/mvn)
第一步:拉取代码
还是在配置页面,点击流水线语法,选择git,然后拉取一个java的小项目、
填好url,认证凭据,分支后点击生成流水线脚本,复制一下,填入pipeline脚本中
stage('NO.1 :拉取代码') {
steps {
git credentialsId: '1f5adfa6-af28-4f62-8785-38d2774c3196', url: 'git@192.168.58.140:root/easy-springmvc-maven.git'
}
}
第二步:打包后端代码
stage("NO.2 : 打包代码"){
steps {
sh "/usr/local/maven/bin/mvn package"
}
}
第三步:后端代码上线
获取tomcat页面ip
在流水线语法中生成流水线脚本,并复制粘贴到指定位置
stage("NO.3 :上传项目"){
steps {
deploy adapters: [tomcat8(credentialsId: 'cecf8ea2-e03d-4a07-a041-7763e8ca1cb9', path: '', url: 'http://192.168.58.156:8080/')], contextPath: null, war: 'target/easy-springmvc-maven.war'
}
}
保存并开始构建。
代码如下
pipeline {
agent any
stages {
stage('NO.1 :拉取代码') {
steps {
git credentialsId: '1f5adfa6-af28-4f62-8785-38d2774c3196', url: 'git@192.168.58.140:root/easy-springmvc-maven.git'
}
}
stage("NO.2 : 打包代码"){
steps {
sh "/usr/local/maven/bin/mvn package"
}
}
stage("NO.3 : 上传项目"){
steps {
deploy adapters: [tomcat8(credentialsId: 'cecf8ea2-e03d-4a07-a041-7763e8ca1cb9', path: '', url: 'http://192.168.58.156:8080/')], contextPath: null, war: 'target/easy-springmvc-maven.war'
}
}
}
}
至此, pipeline语法以及相关的使用详解完毕。