詹金斯后期构建步骤和操作 - 有什么区别

2023-12-31

听起来可能是一个非常基本的问题 - 但我找不到任何文章可以解释为什么 Jenkins 提供构建后步骤和操作。

在詹金斯 - 我确实看到构建后步骤与操作中的选项是不同的,但是

  • 执行顺序是什么?
  • 我们什么时候应该使用哪个选项?
  • 最佳实践是什么?

乍一看,这是 Jenkins 的工作流程(没有额外的插件)

  1. [如有需要,按需定制]安装工具,(如JDK、Ant、Maven等).
  2. [选修的]执行 SCM 检验,(例如 SVN 或 Git)。
  3. 执行构建步骤,(如构建Ant项目、编译代码等)。
  4. [选修的]执行构建后步骤,(例如存档工件、发送电子邮件等)。

有些插件允许在安装工具后立即执行操作,例如SCM 前步骤 https://wiki.jenkins-ci.org/display/JENKINS/pre-scm-buildstep and 环境注入 https://wiki.jenkins-ci.org/display/JENKINS/EnvInject+Plugin插件。还有一些插件可以添加更多可能的构建步骤和构建后步骤。

构建和构建后步骤之间的差异部分基于逻辑分离,部分基于工作流配置。

从逻辑角度来看,当您构建/编译项目时,这是“构建”步骤,而当您归档工件时,因为这是在构建之后发生的,所以这是“构建后”步骤。

但还有工作流配置注意事项,它与以下因素有关:

  • "When构建会失败吗”,并且
  • "构建状态“(例如成功、不稳定、失败)

当有multiple“构建”步骤,詹金斯:

  • 执行第一个构建步骤
  • Checks for exit code of the first build step
    1. 如果退出代码是0(成功),Jenkins 继续下一个构建步骤(如果有)
    2. 如果退出代码不是0(失败),詹金斯标记构建为FAILED, and 继续到构建后操作。
  • Jenkins 执行构建后步骤(无论构建是否被标记为FAILED or not)

所以,换句话说:

  • 如果构建步骤成功,Jenkins 可以执行以下构建步骤(如果有)。
  • 如果构建步骤失败,Jenkins 将不会执行以下构建步骤。
  • If all构建步骤成功,Jenkins 将标记构建SUCCESS.
  • If any构建步骤失败,Jenkins 将标记构建FAILED.
  • 无论什么情况都会执行构建后步骤构建状态 (FAILED或不)。

从技术上讲,所有构建后步骤都应始终执行,但实际上,如果构建后步骤出现异常,则作业永远不会完成,这可能会导致某些构建后步骤无法执行。

此外,通常构建后步骤不会改变构建状态,但有一些是专门为此设计的(例如,在归档工件时,您可以选择标记构建FAILED如果未找到所有工件,即使在所有构建步骤之后,构建已被标记SUCCESS)

因此,了解上述内容后,您有责任设计您的作业,并决定需要依次执行哪些步骤,前提是前一个步骤成功,并且会影响构建状态(即构建步骤),以及需要执行哪些步骤无论结果如何(即构建后步骤),始终如此。

EDIT:

由于我不断收到评论,这里是 Jenkins (Windows) ver.1.634 的全新全新安装的屏幕截图(如评论中所述)。

在屏幕截图上,请注意以下事项:

  • 新的自由式项目。
  • 滚动条一直向下,页面上没有任何内容。
  • 版本 1.634(根据要求)。
  • Build部分与添加构建步骤落下。
  • 构建后操作部分与添加构建后操作落下。

因此,重申我之前的评论:

只有一个构建后“任何东西”

无论你想称之为“步骤”还是“行动”(詹金斯多年来改变了标签)。

自定义插件可以添加很多额外功能,但对于全新安装来说,基本工作正如我所描述的那样。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

詹金斯后期构建步骤和操作 - 有什么区别 的相关文章

  • 让 gradle 执行 JUnit 测试(Android 应用程序、Android Studio)

    我目前正在开发一个 Android 应用程序 最近从 Eclipse 切换到 Android Studio 不是我的想法 不过 我想配置 jenkins 服务器来定期运行 JUnit 测试和其他测试 为了实现这一点 我尝试配置一个 grad
  • Jenkins中找不到环境变量

    我想在詹金斯中设置很多变量 我试过把它们放进去 bashrc bash profile and profile of the jenkins用户 但 Jenkins 在构建发生时找不到它们 唯一有效的方法是将所有环境变量放入Jenkinsf
  • 访问 jelly 模板中的自定义环境变量

    使用 Jenkins 管道 您可以通过以下方式设置任何环境变量全局变量称为 env 果冻模板反过来 您可以访问 Jenkins API 包括hudson model AbstractBuild and hudson model Abstra
  • Jenkins 的代码覆盖率 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何使用 jenkins 声明性管道新语法测试 sh 脚本返回状态

    使用新的 jenkins 声明性管道语法 我想测试 sh 脚本执行的返回状态 是否可以不使用脚本步骤 脚本管道 工作 stage Check url node timeout 15 waitUntil sleep 20 def r sh s
  • 如何让 Jenkins、Sonar 和 JaCoCo 插件在 Eclipse Tycho 插件项目(或者 Cobertura)中协同工作?

    我的设置是 詹金斯 1 448 声纳2 13 詹金斯声纳插件 1 72 Sonar 的 MySql 数据库 我有以下项目 Eclipse 插件项目 使用Maven 多个模块 父级 Maven 项目 源插件项目 测试片段项目 一个简单的 JU
  • 如何将 Hudson/Jenkins 参数传递给 Windows 批处理命令

    好吧 我需要在我的 Hudson 作业中执行一个批处理文件 我有一个参数 Jenkis 参数 我需要将这个值 如参数 传递给批处理文件 我尝试了以下操作 Deploy cmd configuration DEPLOYCONFIGURATIO
  • 如何从 bitbucket 存储库触发 jenkins 管道

    我已成功在 bitbucket 中为 Jenkins 自由式项目设置了一个 Webhook 触发器 用于测试目的 不幸的是 我的 Jenkins 项目使用的是 Pipeline 格式 我无法让 Bitbucket 触发此类项目 问题似乎是没
  • JMeter:来自 Jenkins 的九个以上参数

    我试图将超过九个参数从 Jenkins 传递到 JMeter4 0 当我阅读时 我发现 JMeter 不接受超过 9 个参数 作为解决方法 我想将所有参数作为字符串传递 并在 JMeter BeanShell 中将其拆分 java jar
  • 降低 Sonar 2.1.x 中的日志级别

    我有一个 Maven 3 x 版本 它使用 Sonar 2 1 x 进行质量控制 maven sonar 插件在 Jenkins 内部使用来运行声纳检查 在 Jenkins 构建过程中 当 Sonar 启动时 它会在 INFO 级别记录很多
  • 如何获取 Jenkins 的 API 令牌

    我正在尝试使用詹金斯REST https en wikipedia org wiki Representational state transferAPI 说明中说我需要 API 密钥 我浏览了所有配置页面才找到它 如何获取 Jenkins
  • Jenkins 管道阶段 - 传递整个文件

    运行包含多个节点的阶段的 Jenkins 管道 基于 Groovy 我需要将 stageA 上的 NodeA 上的某个文件的列表传递到 StageB 上的 NodeB 在 stageA NodeA 我运行 DEVenv readFile s
  • Jenkins 和 Gitlab 不获取代码

    当我设置自己的项目时 我遇到了问题 我开始配置我的 Jenkins 作业 我这样做了 在 Jenkins 上为 gitlab 用户帐户创建凭证 在 gitlab 上创建访问令牌并在 Jenkins 中使用此令牌来启用它 and this i
  • 如何在多分支管道中为特定分支设置下一个版本号

    我正在尝试以编程方式为我们的发布分支设置下一个版本号 但我遇到了一个问题 以下是我尝试过的两种方法 def job Jenkins instance getItem master job nextBuildNumber env BUILD
  • 如何在声明性 Jenkins 管道的阶段之间传递变量?

    如何在声明性管道的阶段之间传递变量 在脚本化管道中 我收集的过程是写入临时文件 然后将该文件读入变量 如何在声明式管道中执行此操作 例如 我想根据 shell 操作创建的变量触发不同作业的构建 stage stage 1 steps sh
  • Jenkins 管道构建如何确定工作区文件夹?

    在 Jenkins 管道中 当在特定节点上运行构建时 会在该代理上分配工作空间 我们没有设置工作空间路径 因此它是自动确定的 据我了解 当同一作业在同一代理上同时运行时 工作区必须包含执行程序编号以隔离构建 但是 工作空间路径到底是如何构建
  • 使用 Groovy 从 Jenkins 主节点访问从节点上的文件

    我正在使用 Jenkins Build Flow 插件来实现并行化 Groovy DSL 执行某些文件操作 即使该选项Restrict where this project can be run设置为在特定从属设备上运行作业 DSL 在主控
  • git jenkins 中未找到存储库

    我正在使用 jenkins 2 64 并安装了最新的插件 我试图在 jenkins 中设置 git 存储库并给出凭据 但给出错误无法连接存储库 状态代码为 128 Cloning repository https github com so
  • 仅运行相应源代码已更改的单元测试?

    我正在 Jenkins CI 服务器中运行单元测试和 Selenium 测试 众所周知 在大型项目中测试需要很长时间才能运行 Java 是否有一个工具 框架只能触发其源代码已更改的测试 这是因为并非每次对 SCM 的提交都会影响源代码的所有
  • 将 cron 作业配置为在 Jenkins 上每 15 分钟运行一次

    如何在 Jenkins 上每 15 分钟运行一次 cron 作业 这是我尝试过的 在 Jenkins 上 我使用以下 cron 语法设置了每 15 分钟运行一次的作业 14 但该作业每小时执行一次 而不是 15 分钟 我收到有关 cron

随机推荐