二、声明式 Pipeline 语法

K8S学习之基础五十六:Pipeline声明式语法 pipeline声明式语法 阅读详情

声明式 Pipeline 语法

声明式流水线必须包含在一个 Pipeline 块中,比如以下是一个 Pipeline 块的格式:

pipeline {
   
   
   /* insert Declarative Pipeline here */
}

在声明式流水线中有效的基本语句和表达式遵循与 Groovy 的语法同样的规则,但有以下例外:

  • ➢ 流水线顶层必须是一个 block,即 pipeline{};
  • ➢ 分隔符可以不需要分号,但是每条语句都必须在自己的行上;
  • ➢ 块只能由 Sections、Directives、Steps 或 assignment statements 组成;
  • ➢ 属性引用语句被当做是无参数的方法调用,比如 input 会被当做 input()。

一、Sections

声明式流水线中的 Sections 不是一个关键字或指令,而是包含一个或多个 Agent、Stages、post、Directives 和 Steps 的代码区域块。

1. Agent

有很多种Agent 表示整个流水线或特定阶段中的步骤和命令执行的位置,该部分必须在 pipeline 块的顶层被定义,也可以在 stage 中再次定义,但是 stage 级别是可选的。

  • any:在任何可用的代理上执行流水线,配置语法:
pipeline {
   
   
   agent any
}
  • none:表示该 Pipeline 脚本没有全局的 agent 配置。当顶层的 agent 配置为 none 时,每个 stage 部分都需要包含它自己的 agent。配置语法:
pipeline {
   
   
   agent none
   stages {
   
   
      stage('Stage For Build'){
   
   
          agent any
      }
   }
}
  • label:选择某个具体的节点执行 Pipeline 命令,例如:agent { label ‘my-defined-label’ }。配置语法:
pipeline {
   
   
   agent none
   stages {
   
   
      stage('Stage For Build'){
   
   
         agent {
   
    label 'my-slave-label' }
      }
   }
}
  • node:和 label 配置类似,只不过是可以添加一些额外的配置,比如 customWorkspace;

  • dockerfile:使用从源码中包含的 Dockerfile 所构建的容器执行流水线或 stage。此时对应的 agent 写法如下:

agent {
   
   
    dockerfile {
   
   
       filename 'Dockerfile.build'
       dir 'build'
       label 'my-defined-label'
       additionalBuildArgs '--build-arg version=1.0.2'
    }
}

dockerfile需要编译的过程,很慢

一般不去使用dockerfile ,docker常用

  • docker:相当于 dockerfile,可以直接使用 docker 字段指定外部镜像即可,可以省去构建的时间。比如使用 maven 镜像进行打包,同时可以指定 args,一般静态的时候使用:
agent{
   
   
    docker{
   
   
       image 'maven:3-alpine'
       label 'my-defined-label'
       args '-v /tmp:/tmp'
    }
}
  • kubernetes:Jenkins 也支持使用 Kubernetes 创建 Slave,也就是常说的动态 Slave。配置示例如下:
agent {
   
   
   kubernetes {
   
   
      label podlabel
      yaml """
kind: Pod
metadata:
  name: jenkins-agent
spec:
  containers:
  - name: kaniko
    image: gcr.io/kaniko-project/executor:debug
    imagePullPolicy: Always
    command:
    - /busybox/cat
    tty: true
    volumeMounts:
      - name: aws-secret
        mountPath: /root/.aws/
      - name: docker-registry-config
        mountPath: /kaniko/.docker
  restartPolicy: Never
  volumes:
    - name: aws-secret
      secret:
        secretName: aws-secret
    - name: docker-registry-config
      configMap:
        name: docker-registry-config
"""
  }

2. 配置示例

示例 1:假设有一个 Java 项目,需要用 mvn 命令进行编译,此时以使用 maven 的镜像作为 agent。配置如下:

Jenkinsfile (Declarative Pipeline) // 可以不要此行
pipeline {
   
   
   agent {
   
    docker 'maven:3-alpine' } 
   stages {
   
   
      stage('Example Build') {
   
   
         steps {
   
   
            sh 'mvn -B clean verify'
         }
      }
   }
}

示例 2:本示例在流水线顶层将 agent 定义为 none,那么此时 stage 部分就需要必须包含它自己的 agent 部分。在stage(‘Example Build’)部分使用 maven:3-alpine 执行该阶段步骤,在stage(‘Example Test’)部分使用 openjdk:8-jre 执行该阶段步骤。

此时 Pipeline 如下:

Jenkinsfile (Declarative Pipeline)
pipeline {
   
   
   agent none 
   stages {
   
   
      stage('Example Build') {
   
   
         agent {
   
    docker 'maven:3-alpine' } 
         steps {
   
   
            echo 'Hello, Maven'
            sh 'mvn --version'
         }
      }
      stage('Example Test') {
   
   
         agent {
   
    docker 'openjdk:8-jre' } 
         steps {
   
   
            echo 'Hello, JDK'
            sh 'java -version'
         }
      }
   }
}

示例 3:上述的示例也可以用基于 Kubernetes 的 agent 实现。比如定义具有三个容器的 Pod,分别为 jnlp(基于http)(负责和 Jenkins Master 通信)、build(负责执行构建命令)、kubectl(负责执行 Kubernetes相关命令),在 steps 中可以通过 containers 字段,选择在某个容器执行命令:

pipeline {
   
   
  agent {
   
   
    kubernetes {
   
   
      cloud 'kubernetes-default'
      slaveConnectTimeout 1200
      yaml '''
apiVersion: v1
kind: Pod
spec:
  containers:
   
基于Kubernetes和Jenkins Pipeline的持续自动化项目 本文是基于云原生概念使用jenkins Pipeline流水线 项目声明式脚本形式进行SpringBoot项目持续构建和发布的实战教程. 阅读详情

相关推荐

Jenkins-Pipeline语法篇- Pipeline指令

Jenkins Pipeline 语法分类 Jenkins Pipeline 支持两种语法,一种 Declarative Pipeline(声明式),一种 ScriptedPipeline(脚本式)。 声明式的 Pipeline 限制用户使用严格的预选定义的结构,是一种声明式的编程模型,对比脚本式的 Pipeline 学习起来更加简单; 脚本式的 Pipeline 限制比较少,结构和语法的限制由 Groovy 本身决定,是一种命令式的编程模型。 所以使用声明式的方式编写 jenkinsfil

alanpo_的博客 4543

15-Jenkins-Pipeline-声明式流水线语法-agent指令

声明式流水线语法-agent

小白的博客 3348

【LVGL】从HTML到LVGL:嵌入式UI的设计迁移与落地实践

嵌入式UI迁移实践:从HTML到LVGL 本文介绍了将HTML/CSS设计的UI原型迁移到嵌入式系统(LVGL)的完整流程,重点涉及"HTML→Figma→LVGL"的三步转换方法。具体内容包括: 设计迁移流程:通过Figma作为中间桥梁,将HTML原型转化为标准设计资产,再适配到LVGL库; 工具与参数准备:详细列出了设计迁移所需的工具链和需要提取的核心设计参数; Figma还原步骤:分组件讲解如何在Figma中1:1还原HTML设计,包括标题栏、压力显示区、图表区等核心组件; LVG

ymlmail的博客 1960

手把手教你用smarteye搭建免费GB28181监控平台(含海康设备接入避坑指南)

本文提供了一份基于SmartEye搭建免费GB28181视频监控平台的实战指南。详细介绍了从服务器部署、GB28181协议核心配置,到海康威视等主流设备接入的完整流程,并重点分享了设备注册失败、无法预览等常见问题的深度排错方法,旨在帮助中小企业及开发者低成本实现多品牌监控设备的统一管理。

pz89012345的博客 317

软考高级-系统架构设计师 知识点整理 (一篇就够了 建议收藏)

软考高级-系统架构设计师知识点整理---十万字总结,助你通过高级

片言可决讼,半纸能缚龙 7320

GLM-4本地部署的实战教程

本文主要介绍了GLM-4-9B本地部署的实战教程,希望对学习和使用大模型的同学们有所帮助。 文章目录 1. 前言 2. 配置环境 2.1 安装虚拟环境 2.2 安装依赖库 2.3 下载模型文件 3. 运行glm-4-9b-chat

herosunly的博客 25万+

Cost-effective Attention Reuse across Multi-turn Conversations in Large Language Model Serving

通过多回合对话与人类互动是大型语言模型(LLM)的一个基本特征。然而,由于需要重复计算历史token的密钥值(KV)缓存,用于执行多回合会话的现有LLM服务引擎效率低下,从而导致高服务成本。为了解决这个问题,本文提出了AttentionStore,这是一种新的注意力机制,可以在多回合对话中重用KV缓存(即注意力重用),显著降低重复计算开销。AttentionStore维护一个分层的KV缓存系统,该系统利用经济高效的内存/存储介质为所有请求保存KV缓存。

c_cpp_csharp的专栏 389

SpringBoot项目搭建

SpringBoot项目搭建

私信可回答各种问题~ 1001

Unitree G1仿人机器人协同搬箱:从仿真搭建到多机协同部署完整指南

Unitree G1仿人机器人协同搬箱技术方案摘要 本文提供了一套完整的Unitree G1人形机器人协同搬箱解决方案,涵盖从仿真环境搭建到多机协同部署的全流程。核心内容包括: 双仿真环境配置:同时搭建Gazebo+ROS Noetic基础仿真环境与Isaac Gym+Mujoco高性能RL训练环境,支持Sim2Sim迁移验证 训练框架搭建:详细配置unitree_rl_gym框架,提供PPO算法定制化训练流程和参数优化方案 数据集应用:整合宇树开源真机数据集(UnifoLM-WBT-Dataset)~~~

huanghm88的专栏 463

Python航空航天设计神器!从入门到实操,小白也能搞定飞机优化

AeroSandbox的核心价值的是:​降低航空工程优化的门槛,用Python实现高效、简洁的工程设计​。无论是科研、学习还是实际项目,它都能帮你节省大量时间,不用再手动推导导数、编写复杂的优化逻辑。对于新手来说,建议先从案例1(Rosenbrock函数)入手,熟悉优化流程,再尝试案例2(翼型优化),逐步掌握核心用法;对于有航空相关需求的小伙伴,可以深入研究内置的物理模型,结合自己的项目进行定制化开发。最后,互动时间到!👉 你是用AeroSandbox做科研、练手还是实际项目?

源代码杀手的博客 121

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

上一篇: 一、DevOps和流水线
下一篇: 三、Jenkinsfile 的使用
Cyan_Jiang
博客等级 码龄4年 2425粉丝 83原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Cyan_Jiang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值