代码之家  ›  专栏  ›  技术社区  ›  Adam

复制Jenkins groovy yaml在我的工作站上读写

  •  1
  • Adam  · 技术社区  · 6 年前

    我想用 readYaml writeYaml 在我的工作站本地。

    它们通过jenkins文件和在jenkins构建期间运行的groovy脚本在jenkins上可用,但在本地,我想通过maven插件启动我的groovy脚本(我使用polyglot maven作为yaml pom):

    build:
        plugins:
          - artifactId: gmavenplus-plugin
            groupId: org.codehaus.gmavenplus
            version: 1.6.1
            executions:
              - goals: [ execute ]
            configuration:
                scripts: ["file:///${project.basedir}/src/main/groovy/local.groovy"]
            dependencies:
              - artifactId: groovy-all
                groupId: org.codehaus.groovy
                version: 2.5.1
                type: pom
    

    和Maven对象:

    [ERROR] Failed to execute goal org.codehaus.gmavenplus:gmavenplus-plugin:1.6.1:execute 
         (default-cli) on project adam-test: 
         Error occurred while calling a method on a Groovy class from classpath.
         InvocationTargetException: No signature of method: Script1.readYaml() is
         applicable for argument types: (LinkedHashMap) values:
         [[file:kube/application.yml]] -> [Help 1]
    

    我想我需要一些有用的东西,但是谷歌并没有帮助。

    这是不是从詹金斯分拆到一个独立的图书馆?

    或者,我可以用其他构建插件实现相同的功能吗?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Szymon Stepniak    6 年前

    不能简单地导入 readYaml() writeYaml() 因为它们不是方法或函数,而是Jenkins管道工作流步骤。例如,当您执行 就绪AML() 管道步骤,如下 ReadYamlStep 类对象通过Jenkins工作流groovy cps参与执行。

    您可以尝试添加 pipeline-utility-steps 插件作为依赖项

    <dependency>
        <groupId>org.jenkins-ci.plugins</groupId>
        <artifactId>pipeline-utility-steps</artifactId>
        <version>2.1.0</version>
    </dependency>
    

    然后试着做这个 准备就绪步骤 但是这真的是一个做事情的可怕例子。看看-这个依赖关系 has 8 compile dependencies 将添加到类路径中。

    另一件事-如果您希望在Jenkins管道环境之外执行您的groovy脚本,那么您必须准备一个完整的groovy CPS工作流环境,这实际上意味着模拟Jenkins工作流CPS插件所做的工作。你可以查一下 ReadYamlStepTest 了解工作流CPS如何为单元测试环境做好准备,以便在支持的情况下运行管道脚本 就绪AML() 步骤定义。


    使用snakeyaml

    詹金斯实用程序步骤使用 SnakeYAML 用于处理yaml文件。考虑在Jenkins管道环境之外使用此库-此库没有编译依赖项,您可以从中获得如何使用它的灵感 准备就绪步骤 .

    <dependency>
        <groupId>org.yaml</groupId>
        <artifactId>snakeyaml</artifactId>
        <version>1.21</version>
    </dependency>
    

    结论

    Jenkins管道脚本不是普通的groovy脚本,您不能将它们作为常规的groovy脚本在Jenkins工作流CPS环境之外执行。