Jenkinsfile是有效的独立groovy吗?

ojsjcaue  于 6个月前  发布在  Jenkins
关注(0)|答案(1)|浏览(69)

我正在尝试理解这个声明性的Jenkins文件是Groovy的。如果可能的话,我想写一些支持代码来在Jenkins环境之外,在纯Groovy中执行它。我一直在写一些示例Groovy代码,但仍然不确定“管道”、“代理”和“阶段”是什么。
任何提示,以了解这种结构是赞赏
编辑:我用下面的简化代码编辑了这个问题,我只是想知道是否有一种方法可以将其转换为有效的groovy代码,而无需Jenkins使用的预处理器/groovyshell环境

pipeline {
    stages {
    // extra code here
    }
}

字符串

u59ebvdq

u59ebvdq1#

不,你不能将Jenkinsfile作为一个独立的Groovy脚本来运行。简而言之,Jenkins在一个预先配置的GroovyShell中执行管道代码,这个GroovyShell知道如何计算pipelineagentstages等。但是,有一种方法可以在没有Jenkins服务器的情况下执行Jenkinsfie-您可以使用JenkinsPipelineUnit测试库编写JUnit/Spock单元测试,将评估您的Jenkinsfile并显示调用堆栈树。它使用模拟,因此您可以将其视为基于交互的测试,以查看管道的特定部分是否被执行。另外,您可以在服务器上运行管道之前捕获一些代码错误。
声明性管道的简单单元测试如下所示:

import com.lesfurets.jenkins.unit.declarative.*

class TestExampleDeclarativeJob extends DeclarativePipelineTest {
        @Test
        void should_execute_without_errors() throws Exception {
            def script = runScript("Jenkinsfile")
            assertJobStatusSuccess()
            printCallStack()
        }
}

字符串
您可以在官方网站README.md-https://github.com/jenkinsci/JenkinsPipelineUnit中找到更多示例
或者,您可以尝试Jenkinsfile Runner命令行工具,该工具可以在Jenkins服务器外部执行Jenkinsfile-https://github.com/jenkinsci/jenkinsfile-runner

更新

  • 我用下面的简化代码编辑了这个问题。我只是想知道是否有一种方法可以将其转换为有效的groovy代码,而无需Jenkins使用的预处理器/groovyshell环境。*

您的管道代码示例看起来像一个有效的Jenkins文件,但您不能将其转换为可以运行的Groovy代码(例如,从命令行作为常规Groovy脚本):

$ groovy Jenkinsfile


这是行不通的,因为Groovy不知道Jenkins Pipeline语法。该语法是通过Jenkins插件作为DSL添加的,它使用一个专用的GroovyShell,该Shell被预先配置为正确解释管道语法。
如果你有兴趣检查Jenkins Pipeline的语法是否正确,有几个不同的选项:

*npm-groovy-linthttps://github.com/nvuillam/npm-groovy-lint)可以在不连接Jenkins服务器的情况下验证(甚至自动修复)Jenkins文件的语法,
*Command-Line Pipeline Linter(https://www.jenkins.io/doc/book/pipeline/development/#linter)可以将您的管道代码发送到Jenkins服务器并验证其语法。

这些工具可以帮助您在运行管道之前捕获语法错误。但这只是工具箱的一个不错的附加组件。第一步,一如既往,是理解语法的含义,官方文档(https://www.jenkins.io/doc/book/pipeline/syntax)是最好的起点。

相关问题