
【免费下载链接】charts⚠️(OBSOLETE) Curated applications for Kubernetes项目地址https://gitcode.com/gh_mirrors/chart/charts点击查看免费下载导读本文以仓库中 stable/gocd/CHANGELOG.md 为骨架完整梳理 GoCD Helm Chart 从 1.0.0 到 1.32.0 的功能演进史并结合 stable/gocd/values.yaml、stable/gocd/README.md 及 templates 下的 Kubernetes 模板源码讲解 GoCD Server 与 Agent 在 Kubernetes 上的部署、预配置、持久化、RBAC、Ingress/TLS 等关键配置。读完本文你将掌握这个 Chart 的版本迭代脉络、各版本引入的配置参数含义以及如何在实际集群中安装、配置和排障。一、Chart 总览与版本坐标系stable/gocd/Chart.yaml 记录了该 Chart 的最终状态Chart 版本1.32.0App 版本GoCD 版本20.8.0状态deprecated: true即该 Chart 已废弃官方推荐迁移到 GoCD 官方的gocd/gocdHelm Chart通过helm repo add gocd https://gocd.github.io/helm-chart使用类型CI/CD 持续交付服务器支持持续集成、持续交付、持续部署与持续测试从 CHANGELOG 的版本演进可以看出两条清晰的迭代主线GoCD 应用版本持续升级从 18.3 → 20.8.0几乎每个版本都会 Bump 一次 GoCD 版本如 1.0.6 到 18.3、1.24.0 到 20.2.0、1.32.0 到 20.8.0Kubernetes 兼容性与功能增强API 版本升级Deployment/RBAC/Ingress、生命周期钩子、持久化、SSH 密钥、Sidecar、Init 容器、特权模式等能力逐步加入。二、版本演进主线按主题归类的关键变更2.1 GoCD 版本升级时间线CHANGELOG 中记录的主要 GoCD 版本升级节点如下Chart 版本GoCD 版本说明1.0.618.3早期版本1.0.918.6应用版本升级1.1.318.7 同 tag使用gocd-agent-docker-dind镜像tag 与 GoCD 版本保持一致1.2.018.7.0应用版本升级1.4.018.8.0更新 Kubernetes elastic agent 插件到 1.0.2更新安装后脚本18.8.0 起通过 API 创建的 pipeline 默认已是未暂停状态1.5.018.10.0应用版本升级1.5.718.11.0应用版本升级1.5.1118.12.0应用版本升级1.7.019.2.0应用版本升级1.9.019.3.0Bump k8s elastic agent 插件到最新1.10.019.4.0应用版本升级1.11.019.5.0应用版本升级1.14.019.6.0应用版本升级新增安全约束选项删除goServerSystemProperties/goAgentSystemProperties改用goServerJvmOpts/goAgentJvmOpts1.15.019.7.0应用版本升级1.16.019.8.0 周边更新 Pipeline Config API 版本任务改用 getting-started repo 的脚本1.18.019.9.0应用版本升级1.19.019.10.0应用版本升级预配置脚本改用最新 GoCD APIk8s elastic agent 插件升级到 v3.4.01.20.019.11.0应用版本升级1.21.019.12.0应用版本升级1.22.020.1.0应用版本升级1.23.020.2.0应用版本升级1.26.020.3.0应用版本升级1.28.020.5.0应用版本升级1.29.020.6.0应用版本升级1.30.020.7.0应用版本升级1.32.020.8.0最后一个版本从源码看Server 与 Agent 的镜像 tag 默认跟随.Chart.AppVersion。在 templates/gocd-server-deployment.yaml 中未显式指定server.image.tag时会使用gocd/gocd-server:v{{ .Chart.AppVersion }}templates/gocd-agent-deployment.yaml 同理使用gocd/gocd-agent-alpine-3.9:v{{ .Chart.AppVersion }}。2.2 Kubernetes 兼容性与 API 演进1.12.0更新 Deployment 和 RBAC 资源的 API 版本apps/v1、rbac.authorization.k8s.io当前模板中 Deployment 已使用apiVersion: apps/v11.22.1Ingress API 版本变更当前模板为networking.k8s.io/v1beta1并将 ingress host 用引号包裹host: {{ $host | quote }}见 templates/ingress.yaml1.25.1明确支持的 Kubernetes 版本更新为1.14与 README 的前置条件一致Kubernetes 1.14 且启用 Beta API1.5.12移除所创建 ServiceAccount 的 namespace list 权限收紧 RBAC 最小权限。2.3 Ingress 与 TLS 的演进1.0.7支持 Ingress TLS1.1.0支持 AWS ELB SSL通过 ACM 证书对应 values 中service.beta.kubernetes.io/aws-load-balancer-ssl-cert注解1.6.6若ingress.yaml中没有配置 host则回退使用 default backend——这正是 templates/ingress.yaml 中{{- else }}分支的backend:段1.24.0更新文档说明 TLS 变更并移除 8154 https 端口的使用。这是 GoCD 20.2.0 之后的重要变化GoCD 不再自带 SSL 处理需要由反向代理Apache、NGINX 等承担 TLS 终止1.22.1Ingress 版本 API 变更 host 加引号。2.4 生命周期钩子与容器扩展能力CHANGELOG 显示这一家族能力是逐步累积的全部可以在 templates/gocd-server-deployment.yaml 与 templates/gocd-agent-deployment.yaml 的lifecycle段找到对应实现1.0.5新增postStart钩子脚本用于预配置 GoCD Serverpreconfigure_server.sh1.6.0支持指定 init containers 与 restart policy1.8.0引入 server 与 agent 的preStop 钩子用于清理与备份1.9.1支持 Deployment 与 Pod 级 annotations对应server.annotations.deployment/server.annotations.pod1.19.2GoCD agent 的 postStart 生命周期钩子agent.postStart1.19.3GoCD server 的sidecar containersserver.sidecarContainers1.19.1支持在 server 与 agent pod 上指定tolerations。2.5 预配置Preconfigure机制的演进1.1.1若 server 已配置检测到已有配置则不重复执行preconfigure_server 脚本1.5.5即使禁用持久化也挂载 ConfigMap 来预配置 serverissue #8579 的修复1.5.10允许覆盖 preconfigure 命令server.preconfigureCommand1.16.0更新 Pipeline Config API 版本使用 getting-started repo 的脚本来执行任务。预配置逻辑的完整实现位于 templates/configmap.yaml该 ConfigMap 在server.shouldPreconfiguretrue时生成包含preconfigure_server.sh脚本主要做四件事循环探测http://localhost:8153/go/api/v1/health等待 server 就绪检查/godata/logs/preconfigure_complete.log是否存在存在则跳过幂等通过 GoCD API 创建cluster profilek8-cluster-profileplugin 为cd.go.contrib.elasticagent.kubernetes配置go_server_url、kubernetes_cluster_url、namespace与从 ServiceAccount 读取的security_token创建elastic agent profiledemo-app使用gocd/gocd-agent-docker-dind特权镜像并创建示例 pipelinegetting_started_pipeline。脚本日志输出到/godata/logs/preconfigure.log完成标记写入/godata/logs/preconfigure_complete.log。2.6 Agent 能力与弹性插件1.3.2支持 privileged 模式为 DinDDocker-in-Docker 所需对应 templates/gocd-agent-deployment.yaml 中的securityContext.privileged: {{ .Values.agent.privileged }}1.5.1使用 Kubernetes elastic agent 插件 v2.0.01.5.9支持配置 agent 的 service account1.6.2弃用agent.env.agentAutoRegisterEnvironemnts拼写错误改用agent.env.agentAutoRegisterEnvironments。模板中保留了兼容逻辑见 templates/gocd-agent-deployment.yaml优先读取新属性缺失时回退旧属性1.8.0agent 镜像更新为gocd-agent-alpine-3.9values.yaml 中agent.image.repository的默认值即为此1.13.0GoCD docker registry artifact 插件从 v1.0.1-92 升级到 v1.1.0-104values.yaml 默认的GOCD_PLUGIN_INSTALL_docker-registry-artifact-plugin环境变量即安装此插件1.18.1kubernetes 插件升级到 v3.2.0。2.7 持久化与卷能力1.3.0支持 server 与 agent 使用SSH keys通过 Kubernetes Secret 挂载到/home/go/.ssh1.4.3为 server 与 agents 增加 extra volumes 与 extra volumeMounts1.5.8不启用持久化时也能使用 extra volume mounts修复回归的 1.6.3 也与此相关1.26.1更新~/.ssh目录中文件的权限默认 256即 0400。2.8 其他值得注意的变更1.3.3agent 支持 hostAliases1.3.1 起 server 已支持1.4.2新增agent.env.extraEnvVars1.5.2修复 agent kube resources 拼写错误1.5.3server 与 agent 支持 affinity 设置并修复 agent deployment 的无效 nodeSelector 引用1.5.6新增 deployment strategy 值agent.deployStrategy1.6.0init containers 与 restart policy1.14.0支持指定 server 与 agent pod 的安全约束securityContext并将 JVM 参数属性改名1.20.1更新 OWNERS 列表1.31.0弃用 GoCD Helm Chart最终版 1.32.0 将 GoCD 升到 20.8.0。三、Server 与 Agent 核心配置参数详解3.1 GoCD Server 配置默认值详见 stable/gocd/values.yaml关键参数如下参数说明默认值server.enabled是否部署 GoCD Server设为false可实现 Agent Only 部署trueserver.shouldPreconfigure是否预配置默认 elastic agent profile 与 Kubernetes 插件设置trueserver.preconfigureCommand自定义预配置命令列表类型[/bin/bash, /preconfigure_server.sh]server.preStopserver 停止前执行的清理/备份命令nilserver.image.repository/tagServer 镜像与 taggocd/gocd-server/ 默认.Chart.appVersionserver.env.goServerJvmOptsServer JVM 参数如-Xmx4096mb -Dfoobar注入环境变量GOCD_SERVER_JVM_OPTSnilserver.env.extraEnvVars额外环境变量常用于安装插件见下文默认含两个插件server.service.typeService 类型NodePortserver.service.httpPortHTTP 端口8153server.ingress.enabled/hosts/tlsIngress 开关、主机记录与 TLS 配置true/nil/[]server.healthCheck.*健康检查initialDelaySeconds90、periodSeconds15、failureThreshold10—server.securityContext.*runAsUser1000、runAsGroup0、fsGroup0—server.security.ssh.*SSH 密钥挂载开关、secret 名称gocd-server-ssh与权限false/gocd-server-ssh/ 256server.sidecarContainers与 Server 并跑的 sidecar 容器[]server.persistence.*持久化配置见下文—模板中健康检查探针指向http://{containerPort}/go/api/v1/healthliveness 与 readiness 共用见 gocd-server-deployment.yaml因此 Server 的启动时间决定了initialDelaySeconds需要偏大默认 90 秒。3.2 插件安装GOCD_PLUGIN_INSTALL 机制README 的 Adding plugins 章节与 CHANGELOG 1.18.2Add information about adding plugins对应。插件通过环境变量安装环境变量名必须以GOCD_PLUGIN_INSTALL_为前缀server: env: extraEnvVars: - name: GOCD_PLUGIN_INSTALL_email-notifier value: https://github.com/gocd-contrib/email-notifier/releases/download/v0.3-68-exp/email-notifier-0.3-68.jarvalues.yaml 默认已安装两个插件values.yaml 第 123-127 行GOCD_PLUGIN_INSTALL_kubernetes-elastic-agents→ kubernetes-elastic-agent-3.4.0-196.jarGOCD_PLUGIN_INSTALL_docker-registry-artifact-plugin→ docker-registry-artifact-plugin-1.1.0-104.jar对已运行的 GoCD Server 添加插件会触发新 Server pod 的创建并完成插件安装。3.3 GoCD Agent 配置Agent 默认replicaCount0不启动静态 Agent推荐使用弹性 Agent关键参数见 values.yaml 第 228-407 行参数说明默认值agent.replicaCount静态 Agent 副本数0agent.image.repositoryAgent 镜像gocd/gocd-agent-alpine-3.9agent.env.goServerUrlServer URL为空时模板自动生成http://{release}-gocd-server:8153/gonilagent.env.agentAutoRegisterKey/Resources/Environments/HostnameAgent 自动注册的 key、资源、环境与主机名nilagent.env.goAgentJvmOptsAgent JVM 参数环境变量GOCD_AGENT_JVM_OPTSnilagent.env.goAgentBootstrapperArgsAgent Bootstrapper 参数可配置端到端传输安全TLSnilagent.privileged特权模式DinD Agent 需要falseagent.healthCheck.enabled健康检查开关默认关闭开启后探针指向/health/v1/isConnectedToServer:8152falseagent.deployStrategyDeployment 滚动更新策略{}agent.postStart/agent.preStopAgent 启动后/停止前钩子命令nilagent.securityContext.*/agent.security.ssh.*同 Server—agent.serviceAccount.reuseTopLevelServiceAccount/nameAgent 专属 ServiceAccount 配置false/nil四、持久化动态供给、静态卷与现有 PVC4.1 动态卷供给默认Chart 默认支持动态卷供给依赖底层云平台的默认 StorageClass。注意默认供给器的 reclaim policy 多为deletePVC 被删除时数据也会一并删除。默认值Serverserver.persistence.enabledtrueaccessModeReadWriteOncesize2GiAgentagent.persistence.enabledfalsesize1GiServer PVC 通过三个 subPath 挂载见 gocd-server-deployment.yamlgodata→/godata配置、数据库、插件目录homego→/home/goscripts→/docker-entrypoint.d自定义启动脚本4.2 静态卷与现有 PVC要绑定静态 PV将storageClass设为-以禁用动态供给并用pvSelector选择正确的卷使用已有 PVC先创建 PV 与 PVC再安装helm install --name gocd-app --set server.persistence.existingClaimPVC_NAME stable/gocd4.3 额外卷挂载可在persistence.extraVolumes/extraVolumeMounts中挂载 Secret、ConfigMap 等。例如挂载 GitHub 私钥 Secretserver: persistence: enabled: true extraVolumeMounts: - name: github-key mountPath: /etc/config/keys/ readOnly: true extraVolumes: - name: github-key secret: secretName: github-key defaultMode: 0744注意/home/go被多个 Agent 共享意味着缓存的包与其中的 Secret 也会被共享多 Agent 共享目录时需评估安全影响README Persistence 章节的明确提示。五、Init 容器在启动前准备环境CHANGELOG 1.6.0 引入 init containers典型用途是在 Agent 启动前下载kubectl等工具agent: persistence: extraVolumes: - name: kubectl emptyDir: {} extraVolumeMounts: - name: kubectl mountPath: /usr/local/bin/kubectl subPath: kubectl initContainers: - name: download-kubectl image: ellerbrock/alpine-bash-curl-ssl:latest imagePullPolicy: IfNotPresent volumeMounts: - name: kubectl mountPath: /download workingDir: /download command: [/bin/bash] args: - -c - curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl chmod x ./kubectlinit 容器耗时较长时需相应调大server.healthCheck.initialDelaySeconds或agent.healthCheck.initialDelaySeconds。六、RBAC 与 ServiceAccount支撑 Kubernetes 弹性 Agent弹性 Agent 插件需要在运行 Job 时按需拉起 Pod因此需要相应 RBAC 权限CHANGELOG 1.3.6 修复过 README 中的 role 配置说明rbac.createtrue默认时创建 cluster role权限为nodeslist, get、eventslist, watch、namespacelist, get、pods与pods/log*同时创建 cluster role binding 与 gocd service account若rbac.createtrue且serviceAccount.createfalse则使用命名空间下的defaultservice account 做绑定若rbac.createfalse则需手动创建 cluster role bindingkubectl create clusterrolebinding clusterRoleBinding \ --clusterroleCLUSTER_ROLE_WITH_NECESSARY_PRIVILEGES \ --serviceaccountNAMESPACED_SERVICE_ACCOUNT也可复用已有角色--set rbac.roleRefROLE_NAME。Agent 的 ServiceAccount 有独立配置对应 CHANGELOG 1.5.9状态效果reuseTopLevelServiceAccountfalse且name为空使用defaultservice accountreuseTopLevelServiceAccountfalse且nameagentSA使用已存在的agentSA需预先绑定适当角色reuseTopLevelServiceAccounttrue复用顶层 GoCD service account即 Server 所用的账号模板中的实现位于 templates/_helpers.tplgocd.serviceAccountName决定 Server 的 SAgocd.agentServiceAccountName决定 Agent 的 SA。七、Ingress 与 TLS 实战7.1 Ingress 工作原理Ingress Controller 充当 GoCD Server 前的反向代理集群内 Agent绕过 Ingress 直接访问 Servicehttp://{release}-gocd-server:8153/go集群外 Agent通过 Ingress 或 LoadBalancer 的 http(s) 端口连接 Server。模板逻辑templates/ingress.yaml配置了server.ingress.hosts时生成rules每个 host 指向 server service 的 8153 端口未配置 hosts 时退化为backend默认后端CHANGELOG 1.6.6 的变更配置了server.ingress.tls时输出 TLS 段。配置示例server: ingress: enabled: true hosts: - ci.example.com annotations: kubernetes.io/ingress.class: nginx tls: - secretName: ci-example-tls hosts: - ci.example.com常用注解README Ingress 章节包括ingress.kubernetes.io/force-ssl-redirect、kubernetes.io/ingress.allow-httpGCE默认 true、alb.ingress.kubernetes.io/backend-protocolEKS、networking.gke.io/managed-certificatesGCP与alb.ingress.kubernetes.io/certificate-arnAWS ACM等。7.2 GoCD 20.2.0 的 TLS 变更自 GoCD v20.2.0 起CHANGELOG 1.24.0GoCD 改变了 SSL 处理方式不再自行提供 HTTPS 端口8154 已移除需要由支持 TLS 的反向代理Apache、NGINX 等终结 TLS。从 20.2.0 以下版本升级时Agent 需要重新配置连接方式。因此 Ingress 承担了 HTTPS 终结的职责配置 TLS 时需将 Secret 指向包含私钥与证书的 TLS Secret。八、SSH 密钥挂载为支持通过 SSH 访问代码仓库CHANGELOG 1.3.0 引入Secret 结构需完整容纳.ssh目录内容ssh-keygen -t rsa -b 4096 -C userexample.com -f gocd-server-ssh -P ssh-keyscan [host] gocd_known_hosts kubectl create secret generic gocd-server-ssh \ --from-fileid_rsagocd-server-ssh \ --from-fileid_rsa.pubgocd-server-ssh.pub \ --from-fileknown_hostsgocd_known_hosts启用方式server.security.ssh.enabledtrueAgent 同理为agent.security.ssh.enabledtrueSecret 以只读方式挂载到/home/go/.ssh文件权限由defaultMode控制默认 256即 0400对应 CHANGELOG 1.26.1 的权限修复。九、安装、预配置与排障9.1 安装与卸载# 添加仓库并安装 helm repo add stable https://kubernetes-charts.storage.googleapis.com helm install --name gocd-app --namespace gocd stable/gocd # 卸载 helm delete --purge gocd-app前置条件Kubernetes 1.14启用 Beta API、底层支持 PV 供给、LoadBalancer 或 Ingress Controller启动 Tiller 的 ServiceAccount 需有创建 role 的权限minikube 使用--bootstrapper kubeadmGKE 下可为 kube-system 的 default SA 创建 cluster-admin 绑定。9.2 预配置机制与幂等性安装后 Server pod 通过postStart钩子执行预配置templates/gocd-server-deployment.yaml期间 Pod 处于ContainerCreating。预配置会等待 health 接口返回 200若检测到/godata/logs/preconfigure_complete.log即已有配置直接跳过——这正是 CHANGELOG 1.1.1 引入的幂等保护依次创建 cluster profilek8-cluster-profile、elastic agent profiledemo-app、示例 pipelinegetting_started_pipeline。注意若 Server 从已有持久卷启动已存在配置务必设置server.shouldPreconfigurefalse否则 API 调用会因安全配置而失败。排障手段kubectl get pods --namespace gocd kubectl describe pods --namespace gocd # 关注 FailedPostStartHook 事件 helm status gocd-app预配置日志位于/godata/logs/preconfigure.log。常见失败原因README 明确指出ServiceAccount token 权限不足创建插件设置的 API 调用失败Server 以已配置且开启安全模式的既有配置启动预配置 API 调用失败。十、总结与迁移建议从 1.0.0由 incubator 移入 stable到 1.32.0GoCD Helm Chart 在四年左右的演进中沉淀了大量 Kubernetes 部署实践预配置自动化、弹性 Agent 集成、DinD 特权模式、SSH 密钥管理、持久化多场景、RBAC 最小权限、Ingress/TLS 支持、生命周期钩子与 Sidecar/Init 容器扩展。其设计思路——Server 单一实例 弹性 Agent 按需扩容——至今仍是 GoCD on Kubernetes 的主流形态。需要特别留意的是该 Chart 已于 1.31.0 被官方标记为废弃deprecated: true1.32.0 为最终版本。新项目请直接使用 GoCD 官方 Helm Charthelm repo add gocd https://gocd.github.io/helm-chart后使用gocd/gocd本文梳理的版本演进与参数含义可作为理解 GoCD 官方 Chart 及迁移配置时的重要参考。延伸阅读stable/gocd/README.md安装、配置与排障的完整说明stable/gocd/values.yaml全部可配置参数及默认值stable/gocd/Chart.yamlChart 元数据与版本信息stable/gocd/templates/configmap.yaml预配置脚本完整实现stable/gocd/templates/gocd-server-deployment.yamlServer Deployment 模板stable/gocd/templates/gocd-agent-deployment.yamlAgent Deployment 模板stable/gocd/templates/ingress.yamlIngress 模板实现赞分享【免费下载链接】charts⚠️(OBSOLETE) Curated applications for Kubernetes项目地址https://gitcode.com/gh_mirrors/chart/charts点击查看免费下载相关推荐Bitnami Consul Helm Chart 版本演进深度解析从 CHANGELOG 看功能、安全与运维实践Bitnami Consul Helm Chart 版本演进深度解析从 CHANGELOG 看功能、安全与运维实践 本文以仓库中 bitnami/consul云原生容器编排Bitnami Apache Helm Chart 演进全解从 CHANGELOG 看 11.x 特性、安全加固与生产实践Bitnami Apache Helm Chart 演进全解从 CHANGELOG 看 11.x 特性、安全加固与生产实践 Apache HTTP Serve云原生容器编排Bitnami grafana-operator Helm Chart 完整解析从 CHANGELOG 看版本演进、安全加固与 Grafana 实例管理实战Bitnami grafana operator Helm Chart 完整解析从 CHANGELOG 看版本演进、安全加固与 Grafana 实例管理实战云原生容器编排创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考