jenkins Helm JCASC配置不合并其他文件

aiazj4mn  于 9个月前  发布在  Jenkins
关注(0)|答案(1)|浏览(117)

我们正在K8s上启动一个新的Jenkins示例,并决定使用Helm来简化过程。现在,我们遇到了JCASC和Helm的问题,正如这里所解释的那样。
根据上面链接的文档,您应该能够从命令行包含多个文件,然后将其转换并放置到CASC文件的位置,/var/jenkins_home/casc_congigs下面是命令应该看起来像:

helm install jenkins -n sandbox-dev -f jenkins-values.yaml -f values_welcome_message.yaml $chart

字符串
我阅读并尝试了Provide external yaml file to JCasC configScripts的答案,但到目前为止,没有任何工作。
我创建了一个系统消息YAML文件:

jenkins:
  controller:
    JCasC:
      configScripts:
        welcome-message: |
          jenkins:
            systemMessage: Welcome to our CI\CD server.  This Jenkins is configured and managed 'as code'.


JCASC的主值文件配置如下:

JCasC:
    enabled: true
    defaultConfig: true
    configUrls: []
    # - https://acme.org/jenkins.yaml
    # Remote URL:s for configuration files.
    configScripts: {}
      # welcome-message: |
      #  jenkins:
      #   systemMessage: Welcome to our CI\CD server.  This Jenkins is configured and managed 'as code'.


请注意,欢迎消息的内联配置脚本已被注解掉。
我这样执行安装:

helm install jenkins -n sandbox-dev -f jenkins-values.yaml -f values_welcome_message.yaml $chart


额外的YAML文件不会上传到/var/jenkins_home/casc_configs目录。
如果我更改初始值文件以取消注解欢迎消息的配置并执行安装,则所有工作都将正常进行,并创建额外的配置文件(无需尝试上传额外的YAML文件)。

jenkins@jenkins-0:/$ ls -la /var/jenkins_home/casc_configs/
total 12
drwxrwsrwx.  2 root    jenkins   67 Nov 27 20:49 .
drwxrwsrwx. 14 root    jenkins 4096 Nov 27 20:49 ..
-rw-r--r--.  1 jenkins jenkins 2446 Nov 27 20:33 jcasc-default-config.yaml
-rw-r--r--.  1 jenkins jenkins  105 Nov 27 20:49 welcome-message.yaml


我错过了什么?为什么我共享的安装命令中的附加文件没有上传values_welcome_message.yaml?我的初始值YAML设置不正确吗?还是有其他原因?

xytpbqjk

xytpbqjk1#

原来这里给出的说明并不像它们应该的那样清楚。外部文件被上传和合并,它们只是没有合并到正确的地方。
最重要的是,当您为JCASC包含外部文件时,必须考虑values.yaml文件的结构。在所示的说明中,您可以创建这样的外部文件,例如:

jenkins:
  controller:
    JCasC:
      configScripts:
        jenkinsCasc:  |
          jenkins:
            disableRememberMe: false
            mode: NORMAL
            ...

字符串
就像我对欢迎消息YAML所做的那样:

jenkins:
  controller:
    JCasC:
      configScripts:
        welcome-message: |
          jenkins:
            systemMessage: Welcome to our CI\CD server.  This Jenkins is configured and managed 'as code'.


事实证明,所示的结构是错误的。
为了解决这个问题,我对Helm安装进行了一次空运行,并将调试输出发送到一个文件中:

helm upgrade --dry-run --debug jenkins -n sandbox-dev -f jenkins-values.yaml -f values-welcome-message.yaml $chart >> dry-run.txt


检查输出,我发现第二个文件已经包含在合并中,但信息不在JCASC:属性下的正确位置:

controller:
  JCasC:
    authorizationStrategy: |-
      loggedInUsersCanDoAnything:
        allowAnonymousRead: false
    configScripts: {}
    configUrls: []
    defaultConfig: true
    enabled: true
    security:
      apiToken:
        creationOfLegacyTokenEnabled: false
        tokenGenerationOnCreationEnabled: false
        usageStatisticsEnabled: true
    securityRealm: |-
      local:
        allowsSignup: false
        enableCaptcha: false
        users:
        - id: "${chart-admin-username}"
          name: "Jenkins Admin"
          password: "${chart-admin-password}"


但它确实出现在输出中,其基础级别是Jenkins:

jenkins:
  controller:
    JCasC:
      configScripts:
        welcome-message: |-
          jenkins:
            systemMessage: Welcome to our CI\CD server.  This Jenkins is configured and managed 'as code'.


如果查看原始值.yaml,您会发现文档的基本级别是控制器所在的位置。显示JCASC属性的折叠是controller:的子项,而不是jenkins: controller:的子项

controller:
##### REMOVED COLLAPSED LINES #####  
  JCasC:
    enabled: true
    defaultConfig: true
    configUrls: []
    # - https://acme.org/jenkins.yaml
    # Remote URL:s for configuration files.
##### THIS SECTION IS HERE BECAUSE IT IS PART OF THE DEFAULT values.yaml FILE #####
    configScripts: {}
      # welcome-message: |
      #   jenkins:
      #     systemMessage: Welcome to the Newfold CI\CD server.  This Jenkins is configured and managed 'as code'.
    # Allows adding to the top-level security JCasC section. For legacy,  default the chart includes apiToken configurations
    security:
      apiToken:
        creationOfLegacyTokenEnabled: false
        tokenGenerationOnCreationEnabled: false
        usageStatisticsEnabled: true
    # Ignored if securityRealm is defined in controller.JCasC.configScripts


为了使外部JCASC文件正确,它们必须遵循相同的模式。删除Jenkins:父文件可以做到这一点(注意控制器与JCASC属性的关系:

controller:
  JCasC:
    configScripts:
      welcome-message: |
        jenkins:
          systemMessage: Welcome to the Jenkins CI\CD server. This is managed with JCASC.


另一次试运行后的输出显示了外部文件是否在正确的层次结构中工作的属性:

controller:
  JCasC:
    authorizationStrategy: |-
      loggedInUsersCanDoAnything:
        allowAnonymousRead: false
    configScripts:
      welcome-message: |-
        jenkins:
          systemMessage: Welcome to our CI\CD server.  This Jenkins is configured and managed 'as code'.
    configUrls: []
    defaultConfig: true
    enabled: true
    security:
      apiToken:
        creationOfLegacyTokenEnabled: false
        tokenGenerationOnCreationEnabled: false
        usageStatisticsEnabled: true
    securityRealm: |-
      local:
        allowsSignup: false
        enableCaptcha: false
        users:
        - id: "${chart-admin-username}"
          name: "Jenkins Admin"
          password: "${chart-admin-password}"

相关问题