jenkins 向JCasC configScripts提供外部yaml文件

eivgtgni  于 2023-02-03  发布在  Jenkins
关注(0)|答案(4)|浏览(202)

我正在使用jenkins-helm图表配置我的Jenkins示例(https://github.com/jenkinsci/helm-charts/blob/main/charts/jenkins/VALUES_SUMMARY.md#jenkins-configuration-as-code-jcasc)
目前Jenkins配置以values.yaml形式提供,如下所示:

jenkins:
  controller:
    JCasC:
      configScripts:
        key1:|-
          <a-very-big-yaml-value>

有没有办法从单独的yaml文件导入这个'big-yaml-value',因为它将为我们增强代码的可维护性。

a5g8bdjr

a5g8bdjr1#

由于我不使用helm-charts,所以我不能权威地回答,但它在抽象上是受支持的。根据JCasC入门文档:
首先,启动一个Jenkins示例,并安装Configuration as Code插件。

  • 那些将Jenkins作为Docker容器运行(也可能预装插件)的用户,确实包括了Configuration as Code插件。

其次,插件查找CASC_JENKINS_CONFIG环境变量,该变量指向以下任意一个逗号分隔的列表:

*包含一组配置文件的文件夹路径。例如,/var/jenkins_home/init.CasC

  • 单个文件的完整路径。例如,/var/jenkins_home/init.CasC/jenkins.yaml
  • 指向Web上提供的文件的URL。例如,https://acme.org/jenkins.yaml

如果CASC_JENKINS_CONFIG的一个元素指向一个文件夹,插件将递归遍历文件夹以查找后缀为.yml,.yaml,.YAML,.YML的文件。它将排除隐藏文件或在完整路径的任何部分包含隐藏文件夹的文件。它将遵循文件和目录的符号链接。
所以,是的,你可以有多个yml文件。我有超过20个(120插件)。他们被分解的能力(例如:全局、代理、工具、凭证,包括2个用于RBAC(1个用于角色、用户等)),以及一些插件特定的yml文件。一些文件还可跨示例重用,而其他文件则是特定的。
发生冲突时,您应了解合并策略:

*冲突时出错合并策略(默认)

  • 策略名称为errorOnConflict。
  • 如果多个YAML文件中存在冲突,则引发异常。
    *覆盖合并策略
  • 策略名称为override
  • 根据加载顺序覆盖配置文件。

还要注意,当更新一个现有示例时,某些插件配置可能会替换配置,而其他插件配置可能会增加现有配置,无论是一个还是多个yaml。当然,还不是100%的选项都支持JCasC,所以还需要一些init.groovy. YMMV。
您还可能希望审查:JCasC Handling Secrets .

kcrjzv8t

kcrjzv8t2#

下面的设置为我工作。将把相关部分。
舵形图的目录布局:

jenkins/
├── conf/
│   ├── shared-library.yaml
│   └── big-yaml.yaml
├── templates/
│   └── jenkins-custom-casc-config.yaml
├── values.yaml
└── Chart.yaml

values.yaml中,我们覆盖了CASC_JENKINS_CONFIG,以便它在默认路径之上考虑配置文件的附加路径。

controller:
  containerEnv:
    - name: CASC_JENKINS_CONFIG
      value: "/var/jenkins_home/casc_configs,/var/jenkins_home/custom-casc_configs"
   
persistence:
  volumes:
    - name: jenkins-custom-casc-config
      configMap:
      name: jenkins-custom-casc-config
  mounts:
    - mountPath: /var/jenkins_home/custom-casc_configs
      name: jenkins-custom-casc-config

加载conf/文件夹中所有文件的ConfigMap jenkins-custom-casc-config.yaml

apiVersion: v1
kind: ConfigMap
metadata:
  name: jenkins-custom-casc-config
data:
  {{- (.Files.Glob "conf/*").AsConfig | nindent 2 }}
ztmd8pv5

ztmd8pv53#

我得到它的工作时,做子文件夹到/var/jenkins_home/casc_configs,我注入所有配置文件。否则hirosereal的答案工作。

pprl5pva

pprl5pva4#

我是按照 HiroCereal,但它一直显示在UI中

Configuration loaded from : 
  * /var/jenkins_home/casc_configs

并且文件夹casc_configs什么都没有。我错过了什么?我正在使用helm图表。

相关问题