我想使用像Luigi或其他Workflow自动化套件这样的东西。我的问题是我的节点具有未知数量的输入。例如,Luigi要求您提前对输入进行硬编码。
让我们说我有一个图表,其中节点代表任务,所有线路都向下流动并从输出指向其他任务的输入
A
/ \
| B
\ /
C
我们从A开始但向下流向B,然后C和C也接受A的输出。
我找到了像SciLuigi这样的东西,但它并没有完全解决我的问题。
答案 0 :(得分:0)
您需要回答的问题是:C如何知道何时运行? A和B如何知道何时运行?这是Luigi任务的requires
方法。 Luigi模型是拉模型,其中每个批处理任务根据它所依赖的任务的完成来决定何时运行。 (考虑A
或B
"向下流动"到C
)
在您展示的简单模型中,C
是管道的启动任务。 {}将加载C
(但不会调用run
),并检查A
和B
是否已完成。如果其中任何一个未完成,它将告诉该子集运行。如果它们已经完成,或者一旦完成,C
将致电run
。如果任务A
和B
只能有条件地执行工作,那么他们的complete
方法可以在没有工作要做的情况下返回True
。然后C
可以run
。
但是,我不确定这是你的特殊问题。也许您希望C
为A
运行一次,C
为B
运行一次run
?在这种情况下,我通常编写C
C
方法来操作任意输入列表(无论它们是目录中的文件,状态数据库中的行还是其他一些引用列表) )。但是,在这种情况下,有时候将A
添加到B
和C
的定义中也可能更好,或许可以定义在后处理中添加的Task的子类由version: '2'
services:
drone-server:
image: drone/drone:0.5
ports:
- 8000:8000
volumes:
- /opt/docker/drone:/var/lib/drone
- /path/to/ssh:/key
environment:
- DRONE_OPEN=true
- DRONE_GOGS=true
- DRONE_GOGS_URL=http://gogs.xx.xx
- DRONE_GOGS_GIT_USERNAME=user
- DRONE_GOGS_GIT_PASSWORD=password
- DRONE_SECRET=key
- DEPLOY_KEY=@/key/id_rsa
- DRONE_DEBUG=true
drone-agent:
image: drone/drone:0.5
command: agent
restart: unless-stopped
depends_on: [ drone-server ]
volumes:
- /var/run/docker.sock:/var/run/docker.sock
environment:
- DRONE_SERVER=ws://drone-server:8000/ws/broker
- DRONE_SECRET=key
提供的步骤。
在任何情况下,有许多方法可以运行管道,但很难在您描述的极高抽象级别上提出好的替代方案。我发现将你的思维转变为拉模型可能是找到它们的第一步。