Jenkins的pipeline Script的 每个组件的详细讲解

devtools/2024/11/17 21:41:42/

在Jenkins的Pipeline脚本中,各个组件的配置和Groovy的一些常用函数起到了决定性的作用,帮助开发人员控制自动化流程的执行。以下是对Jenkins Pipeline的主要组件和Groovy常用函数的详细讲解:

1. Jenkins Pipeline主要组件

1.1 agent
  • 功能:定义在哪台节点上执行Pipeline任务。
  • 语法:
    • agent any:表示可以在任何可用节点上执行。
    • agent none:表示不在任何节点上执行,适合在 stages 中单独指定 agent。
    • agent { label ‘label_name’ }:在特定标签的节点上执行。
    • agent { docker { image ‘image_name’ } }:使用特定的Docker镜像来执行Pipeline。
1.2 environment
  • 功能:设置环境变量,可以在整个Pipeline中使用。
  • 语法:
environment {ENV_VAR = 'value'PATH = "/usr/bin:/usr/local/bin:${PATH}"
}
1.3 options
  • 功能:配置Pipeline的高级选项,比如超时设置、丢弃旧的构建等。

  • 常见配置:

    • timeout(time: 1, unit: ‘HOURS’):将Pipeline的执行限制在1小时内。
    • disableConcurrentBuilds():防止并发构建。
    • buildDiscarder(logRotator(numToKeepStr: ‘5’)):只保留5个构建记录。
  • 实例

    options {timestamps()timeout(time: 4, unit: 'HOURS')buildDiscarder(logRotator(artifactDaysToKeepStr: '100', artifactNumToKeepStr: '100', daysToKeepStr: '200', numToKeepStr: '200'))copyArtifactPermission('/DS_BFFD/FFGFGGDY/ssffgd_ddfddf-MT');}
    1. timestamps()
    功能:在构建日志中添加时间戳。
    作用:每条日志消息前都会显示时间戳,方便用户查看构建过程中的时间信息。
    2. timeout(time: 4, unit: 'HOURS')
    功能:设置构建的超时时间。
    参数:
    time: 4:表示超时时间为 4。
    unit: 'HOURS':表示时间单位为小时。
    作用:如果构建在 4 小时内没有完成,Jenkins 将自动终止该构建。这有助于防止构建长时间挂起。
    3. buildDiscarder(logRotator(...))
    功能:设置构建的保留策略。参数:logRotator 是一个用于控制构建日志和工件保留的类,具体参数如下:artifactDaysToKeepStr: '100':保留构建工件的天数,设置为 100 天。artifactNumToKeepStr: '100':保留的构建工件数量,设置为 100 个。daysToKeepStr: '200':保留构建日志的天数,设置为 200 天。numToKeepStr: '200':保留的构建日志数量,设置为 200 个。
    作用:如果构建在 4 小时内没有完成,Jenkins 将自动终止该构建。这有助于防止构建长时间挂起。
    4. buildDiscarder(logRotator(...))
    功能:设置构建的保留策略。
    参数:logRotator 是一个用于控制构建日志和工件保留的类,具体参数如下:artifactDaysToKeepStr: '100':保留构建工件的天数,设置为 100 天。artifactNumToKeepStr: '100':保留的构建工件数量,设置为 100 个。daysToKeepStr: '200':保留构建日志的天数,设置为 200 天。numToKeepStr: '200':保留的构建日志数量,设置为 200 个。
    作用:这个选项帮助管理 Jenkins 中的构建历史,确保不会无限制地保留构建日志和工件,从而节省存储空间。
    5. copyArtifactPermission('/DS_BFFD/FFGFGGDY/ssffgd_ddfddf-MT')
    功能:设置对特定路径的复制工件的权限。
    参数:'/DS_BFFD/FFGFGGDY/ssffgd_ddfddf-MT' 是一个路径,表示允许从该路径复制工件。
    作用:这个选项确保在构建过程中可以从指定的路径复制工件,通常用于多项目构建或需要共享工件的场景。```
  • 总结

    • options 块用于设置构建的全局选项,包括时间戳、超时、构建日志和工件的保留策略,以及复制工件的权限。
    • buildDiscarder(logRotator(…)) 选项帮助管理构建历史,确保不会占用过多的存储空间。
    • copyArtifactPermission 选项确保在构建过程中可以从指定路径复制工件。

这些选项的设置有助于提高 Jenkins 构建的可管理性和可维护性。

1.4 parameters
  • 功能:定义构建时用户可以输入的参数。
  • 常见配置:
    • string(name: ‘ENV’, defaultValue: ‘dev’, description: ‘Environment to deploy’):文本输入。
    • booleanParam(name: ‘DEPLOY’, defaultValue: true, description: ‘是否部署’):布尔值输入。
    • choice(name: ‘BRANCH’, choices: [‘dev’, ‘qa’, ‘prod’], description: ‘分支选择’):选择输入。
1.5 tools
  • 功能:指定运行Pipeline时需要的工具(如JDK、Maven)。
  • 常见配置:
     tools {jdk 'JDK8'maven 'Maven 3.6.3'}
    
1.6 triggers
  • 功能:定义触发Pipeline的条件,比如定时执行或代码变更。
  • 常见配置:
    • cron(‘H 4/* 0 0 1-5’):按照特定时间执行。
    • pollSCM(‘H/5 * * * *’):每5分钟检查SCM是否有代码变更。
    • upstream(upstreamProjects: ‘project-name’, threshold: hudson.model.Result.SUCCESS):当指定的上游项目成功时触发。
      1.7 stages
  • 功能:包含具体的构建步骤,通常分成若干 stage。
  • 语法:
stages {stage('Build') {steps {echo 'Building...'}}stage('Test') {steps {echo 'Testing...'}}
}
1.8 post
  • 功能:定义在构建结束时执行的操作,如清理资源、通知等。
  • 常见选项:
    • always:无论成功或失败都执行。
    • success:构建成功时执行。
    • failure:构建失败时执行。
    • unstable:构建结果不稳定时执行。
  • 语法:
post {always {echo 'Cleaning up...'}success {echo 'Success!'}failure {echo 'Build failed!'}
}

2. Groovy常用函数

2.1 发送邮件的实现

Jenkins提供了 emailext 插件,用于发送构建通知邮件。可以自定义 body 内容,格式为HTML或纯文本。以下是一个带HTML格式的邮件发送示例:

post {failure {emailext (subject: "构建失败通知 - ${env.JOB_NAME} #${env.BUILD_NUMBER}",body: """<h3>构建失败通知</h3><p>项目名称: ${env.JOB_NAME}</p><p>构建编号: ${env.BUILD_NUMBER}</p><p>触发原因: ${currentBuild.description}</p><p>详情请查看 <a href="${env.BUILD_URL}">构建日志</a></p>""",recipientProviders: [[$class: 'DevelopersRecipientProvider']])}
}
2.2 sh 和 bat 执行系统命令

在不同操作系统中执行Shell或Batch命令。

Linux/macOS:

sh 'echo "Hello from Linux"'

Windows:

bat 'echo Hello from Windows'
2.3 catchError

用于在步骤中捕获错误并继续执行,以确保流程不中断。

catchError(buildResult: 'UNSTABLE') {sh 'exit 1' // 即使失败,也将当前构建标记为UNSTABLE而不是FAILED
}
2.4 archiveArtifacts

用于归档构建生成的文件,便于后续的访问。

archiveArtifacts artifacts: '**/target/*.jar', allowEmptyArchive: true
2.5 readFile 和 writeFile

用于在Pipeline中读取或写入文件内容。

def content = readFile 'myfile.txt'
writeFile file: 'output.txt', text: content

总结

Jenkins Pipeline脚本的灵活性体现在各个组件的组合使用上,如通过 agent 指定执行节点,parameters 实现构建参数化,post 中加入错误通知等。而Groovy的丰富函数扩展,如 emailext、archiveArtifacts 等,使得Pipeline的配置更加灵活和便捷。通过这些配置和Groovy函数的掌握,能更好地构建、监控和管理CI/CD流程。


http://www.ppmy.cn/devtools/134795.html

相关文章

第三次作业

1.在/home中创建一个名为 file1.txt 的文件&#xff0c;并设置权限为&#xff1a;所有者和组成员可以读写&#xff0c;但其他人只能读。 [rootlocalhost home]# touch file1.txt [rootlocalhost home]# ll -rw-r--r--. 1 root root 0 11月 11 23:06 file1.txt [rootlo…

炼码LintCode--数据库题库(级别:入门;数量:144道)--刷题笔记_01

目录 炼码LintCode数据库入门级别的笔记未完待续~~~ 炼码LintCode 数据库 入门级别的笔记 笔记如下&#xff0c;把所有涉及到的入门级别的知识点简单总结了一下。 以及一点点举一反三的写法。 增 INSERT INTO 表名 (列1, 列2, ...) VALUES (值1, 值2, ...);批量增 INSERT INT…

字节、快手、Vidu“打野”升级,AI视频小步快跑

文&#xff5c;白 鸽 编&#xff5c;王一粟 继9月份版本更新之后&#xff0c;光锥智能从生数科技联合创始人兼CEO唐家渝朋友圈获悉&#xff0c;Vidu大模型将于本周再次进行版本升级&#xff0c;Vidu-1.5版本即将上线。 此版本更新方向仍是重点延伸大模型的泛化能力和主体…

react 中 useContext Hook 作用

useContext是一个用于在组件之间共享数据的重要钩子函数 一、跨组件数据共享 1. 简化多层级组件数据传递 例如&#xff1a;在一个具有多层级菜单结构的应用中&#xff0c;如果要将用户权限数据从根组件传递到最深层的菜单项组件&#xff0c;可能需要经过多个中间组件的 prop…

免费白嫖:数据分析常用软件安装视频

最近很多小伙伴留言说&#xff1a;数据分析软件下载麻烦&#xff0c;不会安装&#xff0c;能不能出个安装视频&#xff1f; 收到&#xff01;&#xff01;&#xff01; 最近熬夜吐血录制了安装视频&#xff0c;并提供安装包&#xff0c;手把手教会你数据分析常用软件&#xff1…

前端面试场景题目(一)

如何在浏览器中执行100万个任务&#xff0c;并保证页面不卡顿? 使用Web Workers&#xff1a;将任务分配给多个Web Workers&#xff0c;这些Workers在后台线程中运行&#xff0c;不会干扰页面的主线程&#xff0c;从而避免页面卡顿。分批处理任务&#xff1a;将100万个任务分成…

微信小程序瀑布流组件

实现思路 布局采用左右风格的方式,图片采用宽度固定自适应高度接收到显示的数组循环获取左右的高度对比下一个插入左或右提供左右插槽可自定义布局,传出当前循环的值与下标提供触底事件与返回顶部事件在滚动过程中隐藏不需要显示的数据以减少微信小程序dom的消耗 示例 backT…

python class(类)在多文件的应用

在大型项目中&#xff0c;通常会将代码分成多个文件&#xff0c;以便更好地组织和管理代码。Python 提供了模块和包的概念&#xff0c;可以帮助我们实现这一点。下面是一个简单的示例&#xff0c;展示如何在多个文件中使用 Python 类。 假设我们有一个项目目录结构如下&#xf…