能否通过ApplicationSet为Git仓库递归新增的子文件夹创建应用?
问题描述
我的Git源仓库初始目录结构如下:
K8s-envs/ ├── Dev ├── Int ├── Preprod └── Prod
目前我通过List Generator基于上述结构创建了4个对应环境的Argo CD应用。现在想知道:能否通过ApplicationSet,为这些环境文件夹下递归新增的子文件夹自动创建新的应用?比如目录结构变为:
K8s-envs/ ├── Dev │ ├── sub-folder1 │ ├── sub-folder2 │ └── sub-folder3 ├── Int │ ├── sub-folder1 │ ├── sub-folder2 │ └── sub-folder3 ├── Preprod │ ├── sub-folder1 │ ├── sub-folder2 │ └── sub-folder3 └── Prod ├── sub-folder1 ├── sub-folder2 └── sub-folder3
解决方案
完全可以实现,你需要改用Git Generator(而非原有的List Generator),并配置递归扫描目录的规则,让ApplicationSet自动识别新增的子文件夹并生成对应应用。
核心配置要点
- 使用
git类型的generator,指定你的仓库地址和分支 - 开启
directories模式,设置recurse: true来递归扫描子目录 - 通过
path过滤只扫描K8s-envs/下的环境目录及其子目录 - 在template中引用生成的变量(比如
{{path.basename}}、{{path}})来动态设置应用名称、源路径等
示例配置
apiVersion: argoproj.io/v1alpha1 kind: ApplicationSet metadata: name: env-subfolder-apps spec: generators: - git: repoURL: <你的Git仓库地址> revision: main directories: - path: K8s-envs/*/* # 匹配一级环境目录下的所有子文件夹 recurse: true # 开启递归,支持更深层的子目录(如果需要) # 若要同时保留原有的环境级应用,可再添加一个匹配K8s-envs/*的规则 - path: K8s-envs/* template: metadata: name: '{{path.basename}}-app' # 用子文件夹名称作为应用名后缀 spec: project: default source: repoURL: <你的Git仓库地址> targetRevision: main path: '{{path}}' # 指向扫描到的目录路径 destination: server: 'https://kubernetes.default.svc' namespace: '{{path.split("/")[1]}}' # 用环境名(Dev/Int等)作为目标命名空间 syncPolicy: automated: prune: true selfHeal: true
说明
- 上述配置会同时生成两类应用:原有的环境级(如Dev、Int)和子文件夹级(如Dev-sub-folder1),如果不需要环境级应用,可删除
- path: K8s-envs/*这一条规则 path的匹配规则支持通配符,K8s-envs/*/*会匹配所有一级环境目录下的直接子目录,若需要支持更深层级(比如sub-folder1下再建子目录),保持recurse: true即可,或者调整path为K8s-envs/**- 模板中的变量可根据你的实际需求调整,比如命名空间、应用名称的格式等
内容的提问来源于stack exchange,提问作者devops_dummy
相关产品推荐
相关产品推荐

