跨多个文件拆分 Jenkins CASC yaml 内容

Split Jenkins CASC yaml content across multiple files

提问人:Siddharth Seth 提问时间:9/24/2023 最后编辑:Siddharth Seth 更新时间:11/10/2023 访问量:76

问:

我正在使用 Jenkins CasC 插件来管理 Jenkins 的配置。作为这项工作的一部分,我有一组文件,其中包含 YAML 格式的所需配置。我想通过为每个 AMI 模板创建一个文件来拆分 ec2 插件的配置。文件结构如下所示:

jenkins:
  clouds:
    - amazonEC2:
      name: "xxxxxx"
      instanceCapStr: "50"
      region: "region"
      sshKeysCredentialsId: "credentialsId"
      templates:
      - ami: "ami1-name"
        
      - ami: "ami2-name"

      useInstanceProfileForCredentials: false

我想将其转换为如下所示的结构:

jenkins:
  clouds:
    - amazonEC2:
      name: "xxxxxx"
      instanceCapStr: "50"
      region: "region"
      sshKeysCredentialsId: "credentialsId"
      templates:
      - ${file(path to config of ami1)}
        
      - ${file(path to config of ami2)}

      useInstanceProfileForCredentials: false

AMI1 配置

- ami: "ami1-name"
  ...

AMI2 配置

- ami: "ami2-name"
  ...

我正在将这些文件复制到 CASC Jenkins 文件夹中,并希望它们通过 CASC 插件使用 SnakeYaml 解析器进行合并。但是,在 Jenkins 启动时收到与意外配置元素相关的错误,如下所示:

SEVERE  jenkins.InitReactorRunner$1#onTaskFailed: Failed ConfigurationAsCode.init
java.lang.IllegalArgumentException: Single entry map expected to configure a hudson.slaves.Cloud
Jenkins 蛇yaml jenkins-confuration-as-a-code

评论


答:

0赞 Andy 11/10/2023 #1

你的 yaml 格式是问题所在。云 yaml 配置需要采用如下结构:

jenkins:
  clouds:
    - amazonEC2:
        name: "xxxxxx"
        ...

根据错误消息“预期的单条目映射”,其中 amazonEC2 是单条目映射,其配置位于其下方。