资讯动态

Argo CD 配置管理插件(CMP)权威指南:从 Sidecar 安装到生产实战

发布时间:2026/9/13 19:17:27 来源:尧图企业网站定制
Argo CD 配置管理插件CMP权威指南从 Sidecar 安装到生产实战【免费下载链接】argo-cdDeclarative Continuous Deployment for Kubernetes项目地址: https://gitcode.com/GitHub_Trending/ar/argo-cd引言Argo CD 的原生配置管理工具是 Helm、Jsonnet 和 Kustomize。当你的团队需要引入其他配置管理工具或者原生工具缺少某个关键特性例如自定义模板引擎、私有构建脚本、独特的 manifest 处理流程时就需要引入配置管理插件Config Management Plugin简称 CMP。CMP 是 Argo CD 生态中扩展 manifest 生成能力最核心的机制。在 Argo CD 的架构中repo-server 组件负责根据 Helm、OCI 或 Git 仓库中的源文件构建 Kubernetes manifests。当 CMP 被正确配置后repo-server 可以将构建 manifests 的任务委托给插件执行——插件以sidecar 容器的形式与 repo-server 运行在同一 Pod 中通过轻量级 gRPC 服务与主进程通信。读完本文你将掌握如何编写并安装一个 sidecar 类型的 CMP、如何配置插件发现规则与参数、如何在 Application 中引用插件、如何调试 CMP 以及如何从旧版argocd-cm插件平滑迁移。文中所有配置与源码引用均来自当前仓库argo-cd版本 v2.x 及以上以仓库实际内容为准。⚠️安全警告插件在 Argo CD 系统中被授予一定程度的信任。请务必以安全方式实现插件管理员只应从可信来源安装插件并应审查插件以权衡其特定风险与收益。安装一个配置管理插件Sidecar 插件第一步编写插件配置文件插件通过一个位于插件容器内部的ConfigManagementPluginmanifest 进行配置。以下是一个完整的插件配置示例涵盖全部字段apiVersion: argoproj.io/v1alpha1 kind: ConfigManagementPlugin metadata: # 插件名称在给定的 Argo CD 实例中必须唯一。 name: my-plugin spec: # 插件版本。可选。若指定则 Application 的 spec.source.plugin.name 字段 # 必须为 plugin name-plugin version。 version: v1.0 # init 命令在每次 manifest 生成开始时于 Application 源码目录下执行。init # 命令可以输出任何内容。非零退出码将使 manifest 生成失败。 init: # init 总是在 generate 之前立即执行但其输出不被视为 manifests。 # 这里适合做下载 chart 依赖等准备工作。 command: [sh] args: [-c, echo Initializing...] # generate 命令在每次生成 manifests 时于 Application 源码目录下执行。标准输出 # 必须 ONLY 是合法的 Kubernetes 对象格式为 YAML 或 JSON。非零退出码将使 # manifest 生成失败。如需输出日志信息请写入 stderr它始终会被显示。 # 错误输出会发送到 UI因此避免打印敏感信息如 secrets。 generate: command: [sh, -c] args: - | echo {\kind\: \ConfigMap\, \apiVersion\: \v1\, \metadata\: { \name\: \$ARGOCD_APP_NAME\, \namespace\: \$ARGOCD_APP_NAMESPACE\, \annotations\: {\Foo\: \$ARGOCD_ENV_FOO\, \KubeVersion\: \$KUBE_VERSION\, \KubeApiVersion\: \$KUBE_API_VERSIONS\,\Bar\: \baz\}}} # discovery 配置应用于仓库。如果每个已配置的 discovery 工具都匹配则该插件 # 可用于生成使用该仓库的 Application 的 manifests。若省略 discovery 配置 # 插件将不匹配任何 Application但仍可在 app spec 中通过显式指定插件名称来调用。 # fileName、find.glob、find.command 中只应指定一个。若指定多个则只评估 # 第一个按此顺序。 discover: # fileName 是一个 glob 模式https://pkg.go.dev/path/filepath#Glob # 应用于 Application 的源码目录。若有匹配该插件可用于此 Application。 fileName: ./subdir/s*.yaml find: # 与 fileName 功能相同但支持双星号嵌套目录glob 模式。 glob: **/Chart.yaml # find 命令在仓库根目录运行。要匹配必须以状态码 0 退出 _并且_ # 向标准输出产生非空输出。 command: [sh, -c, find . -name env.yaml] # parameters 配置描述 UI 应为 Application 显示哪些参数。是否在 Application # manifestspec.source.plugin.parameters中实际设置参数由用户决定。announcements # 仅用于告知 UI 的 App Details 页面中的 Parameters 标签页。 parameters: # 静态参数公告会被发送给该插件处理的所有 Application 的 UI。 # 可将这里设置的 string、array、map 值视为默认值。插件作者有责任确保 # 当用户未显式设置不同值时这些默认值真实反映插件的实际行为。 static: - name: string-param title: Description of the string param tooltip: Tooltip shown when the user hovers the # 若设置此字段UI 将提示用户必须设置该值。 required: false # itemType 告诉 UI 如何呈现参数值对于数组和 map则是如何呈现其值。 # 默认为 string。未来可能支持的其他类型示例包括 boolean 或 number。 # 即使 itemType 不是 string来自 Application spec 的参数值也会以字符串 # 形式发送给插件。由插件负责进行适当的转换。 itemType: # collectionType 描述此参数接受的值类型string、array 或 map并允许 UI # 显示匹配该类型的表单。默认为 string。非 string 类型必须存在此字段。 # 它不会因存在 array 或 map 字段而被自动推断。 collectionType: # 此字段向 UI 传达参数的默认值。设置此字段是可选的。 string: default-string-value # 除 string 外的上述所有字段同样适用于 array 和 map 类型的参数公告。 - name: array-param # 此字段向 UI 传达参数的默认值。设置此字段是可选的。 array: [default, items] collectionType: array - name: map-param # 此字段向 UI 传达参数的默认值。设置此字段是可选的。 map: some: value collectionType: map # 动态参数公告是针对该插件处理的某个特定 Application 的公告。例如Helm chart # 的 values.yaml 文件中的值可以作为参数公告发送。 dynamic: # 命令在 Application 的源码目录中运行。标准输出必须是 JSON且匹配 # 静态参数公告列表的 schema。 command: [echo, [{name: example-param, string: default-string-value}]] # 若设为 true插件接收的仓库文件保留原始文件模式。这有危险性因为仓库中 # 可能存在可执行文件。仅当你信任 CMP 插件作者时才设为 true。 preserveFileMode: false # 若设为 true插件可以在 generate 期间从 reposerver 获取 git 凭据。插件作者 # 应确保这些凭据在执行期间得到适当保护。 provideGitCreds: false关键约束与说明generate命令必须向 stdout 打印合法的 Kubernetes YAML 或 JSON 对象流。init与generate命令都在 Application 源码目录内执行。discover.fileName作为 glob 模式用于判断 Application 仓库是否受插件支持。若未提供discover.fileName则执行discover.find.command来判断仓库是否受支持。find命令应返回非错误退出码并在支持该源码类型时向 stdout 产生输出discover: find: command: [sh, -c, find . -name env.yaml][!NOTE] 虽然ConfigManagementPlugin看起来像 Kubernetes 对象但它实际上并不是自定义资源CRD只是沿用了 Kubernetes 风格的 spec 约定。从源码结构看它的字段定义init、generate、lockRepo等在 pkg/apis/application/v1alpha1/types.go 中通过ConfigManagementPluginstruct 与Commandstruct 进行了类型化描述——其中Generate是必填字段Init与LockRepo为可选。第二步将插件配置文件放入 sidecarArgo CD 期望插件配置文件位于 sidecar 中的/home/argocd/cmp-server/config/plugin.yaml。如果你为 sidecar 使用自定义镜像可以直接将文件添加到镜像中WORKDIR /home/argocd/cmp-server/config/ COPY plugin.yaml ./如果你使用官方镜像或更愿意在 ConfigMap 中维护插件配置只需将插件配置嵌套在 ConfigMap 的plugin.yamlkey 下然后挂载该 ConfigMap见下一节apiVersion: v1 kind: ConfigMap metadata: name: my-plugin-config data: plugin.yaml: | apiVersion: argoproj.io/v1alpha1 kind: ConfigManagementPlugin metadata: name: my-plugin spec: version: v1.0 init: command: [sh, -c, echo Initializing...] generate: command: [sh, -c, echo {\kind\: \ConfigMap\, \apiVersion\: \v1\, \metadata\: { \name\: \$ARGOCD_APP_NAME\, \namespace\: \$ARGOCD_APP_NAMESPACE\, \annotations\: {\Foo\: \$ARGOCD_ENV_FOO\, \KubeVersion\: \$KUBE_VERSION\, \KubeApiVersion\: \$KUBE_API_VERSIONS\,\Bar\: \baz\}}}] discover: fileName: ./subdir/s*.yaml第三步注册插件 sidecar要安装插件需要给argocd-repo-server打补丁让插件容器以 sidecar 形式运行并以argocd-cmp-server作为其 entrypoint。你可以使用现成的或自定义构建的插件镜像作为 sidecar 镜像。例如containers: - name: my-plugin command: [/var/run/argocd/argocd-cmp-server] # Entrypoint 应为 Argo CD 轻量级 CMP server即 argocd-cmp-server image: ubuntu # 可以是现成或自定义构建的镜像 securityContext: runAsNonRoot: true runAsUser: 999 volumeMounts: - mountPath: /var/run/argocd name: var-files - mountPath: /home/argocd/cmp-server/plugins name: plugins # 若已将配置文件烘焙进 sidecar 镜像请移除这个 volumeMount。 - mountPath: /home/argocd/cmp-server/config/plugin.yaml subPath: plugin.yaml name: my-plugin-config # 从 v2.4 开始不要挂载与 repo-server 容器相同的 tmp 卷。 # 文件系统隔离有助于缓解路径遍历攻击。 - mountPath: /tmp name: cmp-tmp volumes: - configMap: name: my-plugin-config name: my-plugin-config - emptyDir: {} name: cmp-tmp[!IMPORTANT]务必核对以下三点确保使用/var/run/argocd/argocd-cmp-server作为 entrypoint。argocd-cmp-server是一个轻量级 gRPC 服务允许 Argo CD 与插件交互。确保 sidecar 容器以用户 999 运行。确保插件配置文件存在于/home/argocd/cmp-server/config/plugin.yaml。它可以通过 ConfigMap 卷映射或烘焙进镜像。仓库中的完整可运行示例在 examples/plugins/helm 目录中有一个完整的 simple Helm plugin 示例包含plugin.yaml定义一个名为simple-helm-cmp、版本v1.0的插件generate命令调用sh /var/run/argocd/helm-plugin/generate.sh发现规则为fileName: ./values.yaml并声明了一个values-files静态数组参数和一个通过get-parameters.sh输出的动态参数generate.sh从ARGOCD_APP_PARAMETERS环境变量中用jq解析出values-files转为--values与helm-parameters转为--set最终执行helm templateget-parameters.sh用yq将values.yaml扁平化输出为符合参数公告 schema 的 JSONargocd-repo-server-deployment-patch.yaml包含helm-plugin-setupinitContainer下载 helm/jq/yq 到共享工具卷与helm-pluginsidecar 的完整 Deployment patch。安装方式在该目录下执行kustomize build examples/plugins/helm/ | kubectl apply -n argocd -f -在插件中使用环境变量插件命令可以访问以下四类环境变量1. sidecar 的系统环境变量即容器自身环境中的变量直接可用。2. 标准构建环境变量即 标准构建环境变量 中定义的变量。常用变量如下变量描述ARGOCD_APP_NAMEApplication 的名称ARGOCD_APP_NAMESPACEApplication 的目标命名空间ARGOCD_APP_PROJECT_NAMEApplication 所属项目的名称ARGOCD_APP_REVISION已解析的修订版本例如f913b6cbf58aa5ae5ca1f8a2b149477aebcbd9d8ARGOCD_APP_REVISION_SHORT已解析的短修订版本例如f913b6cARGOCD_APP_REVISION_SHORT_8长度为 8 的短修订版本例如f913b6cbARGOCD_APP_SOURCE_PATHApp 在源码仓库中的路径ARGOCD_APP_SOURCE_REPO_URL源码仓库 URLARGOCD_APP_SOURCE_TARGET_REVISIONspec 中的目标修订版本例如masterKUBE_VERSION不带尾部元数据的 Kubernetes 语义版本KUBE_API_VERSIONSKubernetes API 的版本3. Application spec 中的变量apiVersion: argoproj.io/v1alpha1 kind: Application spec: source: plugin: env: - name: FOO value: bar - name: REV value: test-$ARGOCD_APP_REVISION在到达init.command、generate.command和discover.find.command之前Argo CD 会将所有用户提供的环境变量上面的第 3 类加上ARGOCD_ENV_前缀。这可以防止用户直接设置潜在敏感的环境变量。例如上例中的FOO在插件内以$ARGOCD_ENV_FOO访问。4. Application spec 中的参数apiVersion: argoproj.io/v1alpha1 kind: Application spec: source: plugin: parameters: - name: values-files array: [values-dev.yaml] - name: helm-parameters map: image.tag: v1.2.3这些参数以 JSON 形式存放在ARGOCD_APP_PARAMETERS环境变量中。上面的例子会产生如下 JSON[{name: values-files, array: [values-dev.yaml]}, {name: helm-parameters, map: {image.tag: v1.2.3}}][!NOTE] 参数公告即使指定了默认值不会被发送到插件中的ARGOCD_APP_PARAMETERS。只有 Application spec 中显式设置的参数才会发送给插件。插件需要自行应用与公告给 UI 相同的默认值。相同的参数也可以作为单独的环境变量使用命名约定如下- name: some-string-param string: some-string-value # PARAM_SOME_STRING_PARAMsome-string-value - name: some-array-param value: [item1, item2] # PARAM_SOME_ARRAY_PARAM_0item1 # PARAM_SOME_ARRAY_PARAM_1item2 - name: some-map-param map: image.tag: v1.2.3 # PARAM_SOME_MAP_PARAM_IMAGE_TAGv1.2.3[!WARNING]净化/转义用户输入作为 Argo CD manifest 生成系统的一部分配置管理插件被赋予一定程度的信任。务必在插件中转义用户输入防止恶意输入导致意外行为。源码佐证从源码结构看参数传递的底层实现在 cmpserver/plugin/plugin.go 中完成插件侧通过ARGOCD_APP_PARAMETERS、ARGOCD_ENV_*前缀环境变量以及PARAM_*约定接收 Application 传入的配置examples/plugins/helm/generate.sh正是基于这一约定用jq从ARGOCD_APP_PARAMETERS中提取参数并拼装helm template命令的。在 Application 中使用配置管理插件你可以在plugin部分将name字段留空让插件根据其 discovery 规则自动匹配 Application。如果你指定了 name必须确保它是若ConfigManagementPluginspec 中指定了 version则为metadata.name-spec.version否则就是metadata.name。当显式指定 name 时只有当该插件的 discovery 模式/命令匹配提供的 Application 仓库时才会使用该特定插件。apiVersion: argoproj.io/v1alpha1 kind: Application metadata: name: guestbook namespace: argocd spec: project: default source: repoURL: https://github.com/argoproj/argocd-example-apps.git targetRevision: HEAD path: guestbook plugin: env: - name: FOO value: bar如果你不需要设置任何环境变量可以设置空的 plugin 部分plugin: {}[!IMPORTANT] 如果 CMP 命令运行时间过长命令将被终止UI 将显示错误。CMP server 遵循argocd-cmd-params-cm中server.repo.server.timeout.seconds和controller.repo.server.timeout.seconds设置的超时时间。默认值为 60s如有需要请增大。每个 CMP 命令还会独立地遵循 CMP sidecar 上设置的ARGOCD_EXEC_TIMEOUT超时。默认为 90s。因此如果你将 repo server 超时增加到大于 90s请务必在 sidecar 上设置ARGOCD_EXEC_TIMEOUT。[!NOTE] 每个 Application 一次只能配置一个配置管理插件。如果你正在将现有通过argocd-cmConfigMap 配置的插件转换为 sidecar请确保将插件名称更新为metadata.name-spec.version若ConfigManagementPluginspec 中提到了 version否则使用metadata.name。你也可以完全移除 name让自动 discovery 来识别插件。[!NOTE] 如果 CMP 渲染出空 manifests且prune设为trueArgo CD 将自动移除资源。CMP 插件作者应确保错误包含在退出码中。通常类似kustomize build . | cat的命令不会传递管道中的错误。请考虑设置set -o pipefail使任何管道内容在失败时都能传递错误。[!NOTE] 如果 CMP 命令在ARGOCD_EXEC_TIMEOUT到达时未能优雅退出它将在额外的ARGOCD_EXEC_FATAL_TIMEOUT超时后被强制终止。调试 CMP如果你正在积极开发一个 sidecar 安装的 CMP请牢记以下几点如果你从 ConfigMap 挂载 plugin.yaml必须重启 repo-server Pod插件才会拾取变更。如果你已将 plugin.yaml 烘焙进镜像必须构建、推送并强制重新拉取 repo-server Pod 上的该镜像。如果使用:latestPod 总会拉取新镜像。如果使用不同的静态 tag请在 CMP 的 sidecar 容器上设置imagePullPolicy: Always。CMP 错误由 repo-server 缓存在 Redis 中。重启 repo-server Pod 不会清除缓存。在积极开发 CMP 时务必执行 Hard Refresh以获得最新输出。通过查看 Pod 验证 sidecar 是否正常启动确认有两个容器在运行kubectl get pod -l app.kubernetes.io/componentrepo-server -n argocd将日志消息写入 stderr并在 sidecar 中设置--loglevelinfo标志。这会打印所有写入 stderr 的内容即使在命令成功执行时也是如此。仓库中的示例 argocd-repo-server-deployment-patch.yaml 即使用args: [--loglevel, debug]的方式启用了详细日志。常见错误错误信息原因no matches for kind ConfigManagementPlugin in version argoproj.io/v1alpha1ConfigManagementPluginCRD 在 Argo CD 2.4 中被弃用并在 2.8 中被移除。该错误意味着你试图将插件配置直接作为 CRD 放入 Kubernetes。请参考上文编写插件配置文件一节了解如何编写插件配置文件并正确放置到 sidecar 中。插件 tar 流排除plugin tar stream exclusions为了提高 manifest 生成速度某些文件和文件夹可以从发送给插件的内容中排除。如果.git文件夹不是必需建议将其排除。使用**可跨目录边界匹配。例如.git/**排除.git/内的所有内容。[!NOTE] 在 v3.6 之前**不受支持。如果你有带/的排除规则例如.git/*升级后请复查因为它们可能匹配方式不同。可以通过以下三种方式设置repo server 上的--plugin-tar-exclude参数可重复多次使用argocd-cmd-params-cm时的reposerver.plugin.tar.exclusionskey直接在 repo server 上设置ARGOCD_REPO_SERVER_PLUGIN_TAR_EXCLUSIONS环境变量。对于方式 2 和 3多个 glob 之间用分号分隔。使用argocd.argoproj.io/manifest-generate-paths注解生成 manifests为了增强 Application manifests 生成过程你可以启用argocd.argoproj.io/manifest-generate-paths注解。启用后该注解指定的资源会被传递给 CMP server 用于生成 Application manifests而不是发送整个仓库。这对monorepo单仓多应用场景尤其有用。同样有三种设置方式repo server 上的--plugin-use-manifest-generate-paths参数使用argocd-cmd-params-cm时的reposerver.plugin.use.manifest.generate.pathskey直接在 repo server 上设置ARGOCD_REPO_SERVER_PLUGIN_USE_MANIFEST_GENERATE_PATHStrue环境变量。从 argocd-cm 插件迁移通过修改argocd-cmConfigMap 安装插件的方式自 v2.4 起被弃用并自 v2.8 起被完全移除。CMP 插件通过在argocd-repo-server上添加 sidecar并在该 sidecar 的/home/argocd/cmp-server/config/plugin.yaml放置配置来实现。一个argocd-cm插件可以通过以下步骤轻松转换。1. 将 ConfigMap 条目转换为配置文件首先将插件的配置复制到自己的 YAML 文件中。以以下 ConfigMap 条目为例data: configManagementPlugins: | - name: pluginName init: # 可选初始化 application 源码目录的命令 command: [sample command] args: [sample args] generate: # 生成 Kubernetes 对象YAML 或 JSON的命令 command: [sample command] args: [sample args] lockRepo: true # 默认为 false。见下文。pluginName条目将被转换为如下配置文件apiVersion: argoproj.io/v1alpha1 kind: ConfigManagementPlugin metadata: name: pluginName spec: init: # 可选初始化 application 源码目录的命令 command: [sample command] args: [sample args] generate: # 生成 Kubernetes 对象YAML 或 JSON的命令 command: [sample command] args: [sample args][!NOTE]lockRepokey 对 sidecar 插件不适用因为 sidecar 插件在生成 manifests 时不共享单一源码仓库目录。接下来决定这个 YAML 如何添加到 sidecar可以烘焙进镜像也可以从 ConfigMap 挂载。如果使用 ConfigMap示例看起来像这样apiVersion: v1 kind: ConfigMap metadata: name: pluginName namespace: argocd data: pluginName.yaml: | apiVersion: argoproj.io/v1alpha1 kind: ConfigManagementPlugin metadata: name: pluginName spec: init: # 可选初始化 application 源码目录的命令 command: [sample command] args: [sample args] generate: # 生成 Kubernetes 对象YAML 或 JSON的命令 command: [sample command] args: [sample args]然后将其挂载到插件 sidecar 中挂载方式参考上文注册插件 sidecar一节的 volumeMounts 配置。2. 为插件编写 discovery 规则Sidecar 插件可以使用 discovery 规则或插件名称来匹配 Application。如果省略 discovery 规则则必须在 app spec 中显式指定插件名称否则该插件不会匹配任何 app。如果你希望使用 discovery 而不是插件名称来匹配应用请按上文编写插件配置文件中的说明编写适用于你插件的规则并添加到配置文件中。如果使用名称而不是 discovery请将 Application manifest 中的名称更新为metadata.name-spec.version若ConfigManagementPluginspec 中提到了 version否则使用metadata.name。例如apiVersion: argoproj.io/v1alpha1 kind: Application metadata: name: guestbook spec: source: plugin: name: pluginName # 若要自动 discovery请删除此行若 name 是唯一值则设置 plugin: {}或使用正确的 sidecar 插件名称3. 确保插件拥有所需工具使用argocd-cm配置的插件运行在 Argo CD 镜像上因此默认可以访问该镜像上安装的所有工具参见仓库根目录的 Dockerfile 了解基础镜像和已安装工具。你可以使用现成镜像如 ubuntu、busybox 或 alpine/k8s或设计自己的基础镜像加入插件所需的工具。出于安全考虑避免使用比插件实际需求安装更多二进制文件的镜像。4. 测试插件按照上文安装一个配置管理插件中的说明将插件作为 sidecar 安装后先在少数几个 Application 上测试然后再将全部 Application 迁移到 sidecar 插件。测试通过后从argocd-cmConfigMap 中移除插件条目。其他设置保留仓库文件模式preserveFileMode默认情况下配置管理插件接收的源码仓库文件会被重置文件模式这是出于安全原因。如果你想保留原始文件模式可以在插件 spec 中设置preserveFileMode: true[!WARNING] 确保你信任所使用的插件。如果设置preserveFileMode: true插件可能收到带可执行权限的文件这可能是安全风险。apiVersion: argoproj.io/v1alpha1 kind: ConfigManagementPlugin metadata: name: pluginName spec: init: command: [sample command] args: [sample args] generate: command: [sample command] args: [sample args] preserveFileMode: true提供 Git 凭据provideGitCreds默认情况下配置管理插件负责为自己提供访问额外 Git 仓库所需的凭据例如在 manifest 生成期间需要拉取其他仓库时。repo server 在其 git 凭据存储中保存了这些凭据。当允许共享凭据时repo server 用于克隆仓库内容的 git 凭据会在配置管理插件执行的整个生命周期内共享利用 git 的ASKPASS方法从配置管理 sidecar 容器调用 repo server 以获取初始化的 git 凭据。使用ASKPASS意味着凭据不会主动共享而只在需要凭据的操作时提供。ASKPASS要求在配置管理插件与 repo server 之间共享一个 socket。为缓解路径遍历攻击建议使用专用卷共享 socket并同时挂载到 repo server 和 sidecar。要更改 socket 路径必须为两个容器设置ARGOCD_ASK_PASS_SOCK环境变量。要允许插件访问 repo server 的 git 凭据可以在插件 spec 中设置provideGitCreds: true[!WARNING] 确保你信任所使用的插件。如果设置provideGitCreds: true插件将收到用于克隆源 Git 仓库的凭据。apiVersion: argoproj.io/v1alpha1 kind: ConfigManagementPlugin metadata: name: pluginName spec: init: command: [sample command] args: [sample args] generate: command: [sample command] args: [sample args] provideGitCreds: true总结配置管理插件CMP是扩展 Argo CD manifest 生成能力的官方推荐机制。掌握本文的完整流程你将能够编写一个完整的ConfigManagementPlugin配置文件理解init、generate、discover、parameters、preserveFileMode、provideGitCreds等全部字段的语义安装sidecar 插件ConfigMap 挂载或烘焙进镜像两种方式并理解argocd-cmp-serverentrypoint、用户 999、/home/argocd/cmp-server/config/plugin.yaml三个关键约束使用插件——通过自动 discovery 或显式名称匹配传递环境变量与参数ARGOCD_ENV_*、ARGOCD_APP_PARAMETERS、PARAM_*调试与优化——利用 stderr 日志、Hard Refresh、--plugin-tar-exclude排除规则与manifest-generate-paths注解迁移——将旧版argocd-cm插件平滑转换为 sidecar CMP。如需查看可直接运行的完整示例请研究仓库中的 examples/plugins/helm 目录以及 标准构建环境变量 和 cmpserver/plugin/plugin.go 中关于插件命令执行的底层实现。【免费下载链接】argo-cdDeclarative Continuous Deployment for Kubernetes项目地址: https://gitcode.com/GitHub_Trending/ar/argo-cd创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价