当前位置: 首页 > news >正文

Jenkins Pipeline 语法

Jenkins 的 Pipeline 语法 主要有两种:

  1. Declarative Pipeline(声明式语法) 

  2. Scripted Pipeline(脚本式语法)

######装 Pipeline(workflow-aggregator)插件######

官网:管道语法https://www.jenkins.io/doc/book/pipeline/syntax/

一、声明式语法示例

声明式语法包括以下核心流程:
1.pipeline : 声明其内容为一个声明式的 pipeline 脚本
2.agent: 执行节点(job 运行的 slave 或者 master 节点)
3.stages: 阶段集合,包裹所有的阶段(例如:打包,部署等各个阶段)
4.stage: 阶段,被 stages 包裹,一个 stages 可以有多个 stage
5.steps: 步骤,为每个阶段的最小执行单元,被 stage 包裹
6.post: 执行构建后的操作,根据构建结果来执行对应的操作

1、Pipeline 基本结构

pipeline {agent any   // 在任意节点上运行stages {stage('Build') {steps {echo "开始构建..."}}stage('Test') {steps {echo "运行测试..."}}stage('Deploy') {steps {echo "部署应用..."}}}
}
作用域:应用于全局最外层,表明该脚本为声明式 pipeline
是否必须:必须

2. agent 配置

pipeline {agent any               // 任意可用节点// agent none           // 不指定,需要在每个 stage 定义// agent { label 'node1' }   // 在指定节点执行// agent { docker 'maven:3.8.6' } // 直接用 Docker 镜像
}
作用域:可用在全局与 stage 内
agent 表明此 pipeline 在哪个节点上执行
是否必须:是
参数:any,none, label, node,docker,dockerfile

3. stages 和 steps

stages {stage('Build') {steps {sh 'mvn clean package -DskipTests'}}stage('Test') {steps {sh 'mvn test'}}
}
  1. stages { ... }

    • 表示流水线的阶段集合。

    • 一个 Pipeline 可以有多个 stage,每个 stage 代表流水线中的一个环节(比如构建、测试、部署)。


  1. stage('Build') { ... }

    • 定义一个名字叫 Build 的阶段。

    • 阶段名会显示在 Jenkins 控制台和 Web UI 的蓝色进度条里,方便追踪进度。


  1. steps { ... }

    • stage 里面的实际操作步骤。

    • Declarative Pipeline 里,所有执行命令必须放在 steps 块中。


  1. sh 'mvn clean package -DskipTests'

    • 使用 Shell 执行命令sh 是 Jenkins 内置步骤,用来执行 Linux/Unix shell 命令)。

    • 命令含义:

      • mvn clean package
         使用 Maven 清理并重新打包项目,生成 .jar.war 包。

      • -DskipTests
        打包时跳过单元测试,节省时间。


  1. stage('Test') { ... }

    • 定义一个名字叫 Test 的阶段。

    • 通常在构建之后运行,主要用来执行测试。


  1. sh 'mvn test'

    • 执行 mvn test,运行 单元测试

    • 如果测试失败,Pipeline 默认会在这里中断并标记为失败(除非你加了特殊的错误处理)。

4.后置操作(post)

pipeline {agent anystages {stage('Build') {steps {echo "构建中..."}}}post {always {echo '总会执行'}success {echo '成功时执行'}failure {echo '失败时执行'}}
}

二、脚本式语法示例

Scripted Pipeline 是 Jenkins 最早支持的 Pipeline 方式,完全基于 Groovy 脚本

1、基本结构

node {stage('Build') {sh 'mvn clean package -DskipTests'}stage('Test') {sh 'mvn test'}stage('Deploy') {sh './deploy.sh'}
}
  • node { ... }:定义流水线在 Jenkins 的一个节点(agent)上执行。

  • stage('xxx') { ... }:定义一个阶段。

  • sh '命令':在 Shell 中执行命令。

2、常见语法

2.1环境变量

node {stage('Env') {echo "构建用户: ${env.BUILD_USER}"echo "工作目录: ${env.WORKSPACE}"}
}

2.2 参数化构建

node {stage('Deploy') {if (params.ENV == 'prod') {echo "部署到生产环境"} else {echo "部署到测试环境"}}
}

2.3并行执行

node {stage('Tests') {parallel ("Unit Test": {sh 'mvn test'},"Integration Test": {sh 'mvn verify -Pintegration'})}
}

2.4条件判断 + 循环

node {stage('Check') {def servers = ["web1", "web2", "web3"]for (srv in servers) {echo "检查服务器: ${srv}"}if (env.BRANCH_NAME == "main") {echo "这是主分支,允许部署"} else {echo "这是测试分支,不允许部署"}}
}

2.5 错误处理

node {stage('Build') {try {sh 'mvn clean package'} catch (err) {echo "构建失败: ${err}"currentBuild.result = 'FAILURE'}}
}

三、Scripted Pipeline CI/CD 示例

  • 代码构建(Maven)

  • Docker 镜像打包

  • 推送到 Harbor

  • 部署到 Kubernetes

node {// 定义变量def appName = "myapp"def harborUrl = "harbor.example.com"   ##仓库地址def harborProject = "dev"def imageTag = "${env.BUILD_NUMBER}"   // 使用 Jenkins 构建号作为镜像tagdef kubeConfig = "/root/.kube/config"stage('Checkout') {echo "拉取代码..."checkout scm}stage('Build') {echo "构建Java项目..."sh 'mvn clean package -DskipTests'}stage('Docker Build & Push') {echo "构建并推送Docker镜像..."sh """docker build -t ${harborUrl}/${harborProject}/${appName}:${imageTag} .docker login ${harborUrl} -u admin -p Harbor12345docker push ${harborUrl}/${harborProject}/${appName}:${imageTag}"""}stage('Deploy to K8s') {echo "部署到Kubernetes..."sh """export KUBECONFIG=${kubeConfig}kubectl set image deployment/${appName} ${appName}=${harborUrl}/${harborProject}/${appName}:${imageTag} -n devkubectl rollout status deployment/${appName} -n dev"""}
}
  • checkout scm → 拉取 Git 仓库代码。

  • mvn clean package -DskipTests → 使用 Maven 构建项目并打包,跳过测试。

  • docker build → 构建 Docker 镜像。

  • docker login & docker push → 登录 Harbor 并推送镜像。

  • kubectl set image → 更新 Kubernetes Deployment 的镜像版本。

  • kubectl rollout status → 等待部署完成。

####有待补充。。。。。。。

http://www.dtcms.com/a/364023.html

相关文章:

  • 【机器人概念设计软件操作手册】建筑与环境建模
  • 【服务器部署】CentOS 7/8 离线部署 Harbor v2.10.3 超详细攻略
  • docker desktop拉取镜像失败解决方案
  • ArkUI核心功能组件使用
  • pycharm无法添加本地conda解释器/命令行激活conda时出现很多无关内容
  • 【python】python进阶——pip命令
  • 单调栈与单调队列
  • 《从零搭建二叉树体系:从节点定义到子树判断的实战指南(含源码可直接运行)》
  • 利用Base64传输二进制文件并执行的方法(适合没有ssh ftp等传输工具的嵌入式离线场景)
  • TDK InvenSense CH201距离传感器
  • Photoshop用户必看:让你的PSD像JPG一样可预览
  • vim中常见操作及命令
  • 趣说IT职场30:跨团队会议话术合集:优雅反对、不留记录
  • 使用DataLoader加载本地数据
  • Elasticsearch 核心特性与应用指南
  • 【js】Promise.try VS try-catch
  • 研发文档分散在本地和邮件里如何集中管理
  • 面试必避坑:MySQL 自增 ID 用尽问题深度解析与应对策略
  • XML在线格式化 - 加菲工具
  • 双Token实战:从无感刷新到安全防护,完整流程+代码解析
  • 魔域服务器多少钱一个月?魔域服务器配置要求及推荐
  • Vue 3.5 重磅新特性:useTemplateRef 让模板引用更优雅、更高效!
  • 服务器托管需要注意什么事项?
  • 人工智能助力流感疫苗选择:MIT 团队推出 VaxSeer 系统
  • MySQL注意事项与规范
  • 开发AI编程工具的方案分析
  • SPI片选踩坑实录(硬件片选和软件片选)
  • Nacos配置文件攻防思路总结|揭秘Nacos被低估的攻击面|挖洞技巧
  • Python 基础核心概念与实战代码示例(含数据类型、变量、流程控制、数据结构、函数与文件操作)
  • # Shell 文本处理三剑客:awk、sed 与常用小工具详解