【问题标题】:Why workflow engine of Jenkins is designed in a continuation passing style way?为什么 Jenkins 的工作流引擎是以延续传递式的方式设计的?
【发布时间】:2017-11-28 07:11:47
【问题描述】:

我知道 Jenkins 的工作流提供了 CPS 和 NonCPS 模型,我想知道它们之间有什么区别,以及 Jenkinsfile 是如何以 CPS 方式解析的?

谢谢!

【问题讨论】:

    标签: jenkins jenkins-pipeline


    【解决方案1】:

    CPS 的目的是在 Jenkins master 重启后可以恢复流水线执行。

    在管道执行期间,代理执行的每一步都存储在主服务器上(IIRC 就像每个步骤对主服务器的 4 次调用)。

    由于 CPS 与所有 Groovy 功能​​不兼容,您有时必须禁用它(或者如果您有一个简单的循环等并希望避免 CPS 引入的开销)。

    【讨论】:

    • 感谢您的回答!我想我理解为什么管道是在 CPS 中设计的。但我仍然对如何解决 Jenkinsfiles 感到困惑。 Jenkinsfile 是不是先解析并存储在 ArrayList 中,然后 Jenkins 迭代 ArrayList 以分发所有步骤?任何有关此的文档都会有所帮助,再次感谢您!
    • 我不认为它像一个 ArrayList。它是被执行的代码,一种所谓的“领域特定语言”(DSL)。
    • 好吧...也许我应该研究 Gradle 以了解 DSL 可以做什么.. Jenkins 的文档不多。
    • 这两者没有任何关系,除了这两个工具都提供了 DSL。像 Chef、Ansible 和数以千计的其他工具一样。阅读Wikipedia也许吧。
    猜你喜欢
    • 2018-01-27
    • 1970-01-01
    • 2022-01-04
    • 1970-01-01
    • 2012-01-07
    • 1970-01-01
    • 1970-01-01
    • 2011-06-19
    • 1970-01-01
    相关资源
    最近更新 更多