我们正在 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
我阅读并尝试了 向 JCasC configScripts 提供外部 yaml 文件的答案,但到目前为止,没有任何效果。
我创建了一个系统消息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 初始值设置不正确吗?还是还有其他的事情在起作用?
事实证明here给出的说明并不像应有的那么清晰。
底线是,在包含 JCASC 的外部文件时,必须考虑 value.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'.
如果你查看原始的values.yaml,你会发现文档的基础级别就是控制器所在的位置。折叠显示 JCASC 属性是
controller:
的子级,而不是 Jenkins:
的子级
controller:
JCasC:
enabled: true
defaultConfig: true
configUrls: []
# - https://acme.org/jenkins.yaml
# Remote URL:s for configuration files.
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}"