Apache 在服务器上部署dag文件的有效方法

Apache 在服务器上部署dag文件的有效方法,apache,airflow,airflow-scheduler,Apache,Airflow,Airflow Scheduler,在将新DAG部署到airflow时,是否遵循了任何最佳实践 我在google论坛上看到一些评论,说DAG保存在GIT存储库中,并且定期同步到airflow集群中的本地位置。关于这种方法,我有几个问题 我们是否为单独的环境维护单独的dag文件?(测试.生产) 如果新版本有bug,如何处理ETL回滚到旧版本 非常感谢您的帮助。如果您需要任何进一步的详细信息,请告诉我。以下是我们如何为团队管理它 首先在命名约定方面,我们的每个DAG文件名都与来自DAG本身(包括DAG版本)内容的DAG Id相匹配。

在将新DAG部署到airflow时,是否遵循了任何最佳实践

我在google论坛上看到一些评论,说DAG保存在GIT存储库中,并且定期同步到airflow集群中的本地位置。
关于这种方法,我有几个问题
  • 我们是否为单独的环境维护单独的dag文件?(测试.生产)
  • 如果新版本有bug,如何处理ETL回滚到旧版本


    非常感谢您的帮助。如果您需要任何进一步的详细信息,请告诉我。

    以下是我们如何为团队管理它

    首先在命名约定方面,我们的每个DAG文件名都与来自DAG本身(包括DAG版本)内容的DAG Id相匹配。这是很有用的,因为最终它是您在Airflow UI中看到的DAG Id,因此您将确切知道每个DAG后面使用了哪个文件

    类似这样的DAG示例:

    from airflow import DAG
    from datetime import datetime, timedelta
    
    default_args = {
      'owner': 'airflow',
      'depends_on_past': False,
      'start_date': datetime(2017,12,05,23,59),
      'email': ['me@mail.com'],
      'email_on_failure': True
    }
    
    dag = DAG(
      'my_nice_dag-v1.0.9', #update version whenever you change something
      default_args=default_args,
      schedule_interval="0,15,30,45 * * * *",
      dagrun_timeout=timedelta(hours=24),
      max_active_runs=1)
      [...]
    
    DAG文件的名称为:my\u nice\u DAG-v1.0.9.py

    • 我们所有的DAG文件都存储在Git存储库中(除其他外)
    • 每次在我们的主分支中完成合并请求时,我们的持续集成管道都会启动一个新的构建,并将我们的DAG文件打包成一个zip(我们使用Atlassian竹子,但还有其他解决方案,如Jenkins、Circle CI、Travis…)
    • 在Bambol中,我们配置了一个部署脚本(shell),该脚本解压包并将DAG文件放置在Airflow服务器的/dags文件夹中
    • 我们通常在DEV中部署dag进行测试,然后部署到UAT,最后部署到PROD。由于上面提到的shell脚本,我们只需在pumbolinui中单击一个按钮即可完成部署
    好处

  • 由于文件名中包含了DAG版本,因此DAG文件夹中不会覆盖DAG文件的先前版本,因此您可以轻松地返回到该文件
  • 当您的新DAG文件加载到Airflow中时,由于版本号,您可以在UI中识别它
  • 由于DAG文件名=DAG Id,您甚至可以通过添加一些命令行来改进部署脚本,以便在部署新DAG后自动打开它们
  • 因为DAGs的每个版本都在Git中进行了历史化,所以如果需要,我们可以随时返回到以前的版本

  • 嗨,Alexis,感谢您的澄清,如果有任何特定于环境的值,比如说HttpOperator中的URL,这些值是如何处理的,您可以为每个环境维护单独的dag文件,或者为相同的环境使用一些配置管理系统?Hello@SreenathKamath,对于特定于环境的值,我们在各自气流环境的气流变量中配置它们。您可以在“管理>变量”下的菜单中找到它们。在您的DAG中,您可以使用AuthFoo.Engult.Simult导入变量和“代码>变量”来调用这些变量。Thanks@alexis如果我只是用相同的名称更新文件(dag),我不需要打开它。@alexis我的另一个问题是如何测试dag文件?