每次重试时气流触发下游任务

时间:2020-01-13 11:23:38

标签: docker triggers airflow

我每天使用Airflow运行一次DockerOperator任务。由于不推荐使用auto_remove自变量,我将BashOperator与docker rm命令结合使用以清除退出的容器。该命令作为应在docker operator任务之后运行的下游任务执行。我一直在寻找一种即使父代失败也总是执行下游任务的方法。我发现trigger_rule参数正是我使用all_done选项所寻找的,但是如果容器因错误代码而停止并且任务重试,则下游任务不会执行,则容器保持并且下一次尝试失败,因为容器名称已经存在。 有没有一种方法可以在每次重试时运行下游任务?

注意:我不想删除容器名称,因为我不想让容器堆积。

with DAG(DAG_ID, default_args=default_args, schedule_interval=SCHEDULE_INTERVAL, catchup=CATCHUP) as dag:

    docker_launch_container = DockerOperator(
        task_id='docker_launch_container',
        image='my_custom_image',
        api_version='auto',
        container_name='my_custom_container',
    )

    docker_remove_container = BashOperator(
        task_id='docker_remove_container',
        bash_command="docker rm $(docker ps -a | grep my_custom_container | grep Exited | awk '{print $1}')",
        trigger_rule='all_done'
    )

    docker_launch_container >> docker_remove_container

0 个答案:

没有答案