咨询如何使用GSUTIL RSYNC同步指定Python文件到Cloud Composer GCS桶
可行实现方案
方案1:直接使用gsutil rsync过滤规则(最简单,适配后缀过滤需求)
gsutil rsync本身支持按规则过滤文件,你可以直接修改cloudbuild.yaml的rsync参数,仅同步需要的.py文件和生成的REVISION.txt,自动过滤其他无关文件。修改后的配置如下:
steps: - name: ubuntu args: ['bash', '-c', "echo '$COMMIT_SHA' > REVISION.txt"] - name: gcr.io/cloud-builders/gsutil args: - '-m' - 'rsync' - '-d' - '-r' # 规则按书写顺序生效,优先级从高到低 - '--include=*/' # 先允许遍历所有子目录,避免子目录被排除后内部文件无法同步 - '--include=*.py' # 允许同步所有后缀为py的DAG文件 - '--include=REVISION.txt' # 允许同步生成的版本标记文件 - '--exclude=*' # 排除所有其他未被上方规则允许的文件 - '.' # 源路径为当前构建工作目录 - 'gs://${_GCS_BUCKET}/dags'
该方案无需修改流程结构,仅调整参数即可满足过滤图片、文档、csv、ipynb等无关文件的需求。
方案2:预构建临时同步目录(适配复杂过滤规则场景)
如果后续你有更复杂的过滤需求,比如仅同步特定目录下的py文件、排除测试类py脚本等,可以先在构建步骤中把符合要求的文件提取到临时目录,再同步该目录即可。配置示例如下:
steps: - name: ubuntu args: ['bash', '-c', "echo '$COMMIT_SHA' > REVISION.txt"] # 新增预处理步骤,提取符合要求的文件到临时目录,保留原目录结构 - name: ubuntu args: - 'bash' - '-c' - | mkdir -p /workspace/sync_dir # 复制所有.py文件,可按需调整find规则,比如仅扫描指定目录、排除测试文件 find . -name "*.py" -exec cp --parents {} /workspace/sync_dir/ \; # 复制版本标记文件到临时目录根路径 cp REVISION.txt /workspace/sync_dir/ - name: gcr.io/cloud-builders/gsutil args: - '-m' - 'rsync' - '-d' - '-r' - '/workspace/sync_dir/' - 'gs://${_GCS_BUCKET}/dags'
该方案灵活性更高,比如你要限制仅同步PROJECT_A和Project_B_APAC目录下的py文件,只需要把find命令修改为find ./PROJECT_A ./Project_B_APAC -name "*.py"即可。
内容的提问来源于stack exchange,提问作者Abhinav Dhiman
相关产品推荐
相关产品推荐

