Зависимости задач Fabric

Я работаю над файлом структуры, чтобы немного упростить процесс развертывания нашего кода. Теперь я хотел бы иметь зависимости между определенными задачами, подобные тому, что обсуждается в одном здесь .

Упростим задачу и скажем, что у меня есть две задачи: build и deploy. Задача build должна построить наш код, а задача deploy передаст его на сервер развертывания.

Итак, deploy, очевидно, зависит от build, но build также может быть отдельной задачей. Таким образом, кто-то может просто собрать код с помощью fab build или развернуть код с помощью fab build deploy. Но я также хочу, чтобы люди использовали fab deploy для удобства, но тогда сначала нужно запускать build. Но build следует выполнять только один раз.

Поэтому, если я включу build в задачу deploy, а затем выполню fab build deploy, она будет запускать build дважды, а затем deploy.


person Timo D    schedule 30.12.2014    source источник
comment
Если мое текущее понимание верно, единственный способ смоделировать это, требующий функциональности на данный момент с тканью, — это создать подкласс из базового класса задач. Но для вашего варианта использования подклассы выглядят излишними. Если процесс сборки дорог, я бы включил проверку необходимости сборки.   -  person tobltobs    schedule 02.01.2015
comment
Создание подклассов звучит как разумный подход, но мне удалось сделать это немного проще. Спасибо за ваш комментарий   -  person Timo D    schedule 02.01.2015


Ответы (1)


Мне удалось сделать это с помощью runs_once декоратор и функцию execute.

Задача build теперь украшена runs_once, и каждая задача, которая зависит от build, например. deploy, сначала сделает execute(build). Это выполнит задачу сборки или молча завершит работу, если она уже была выполнена (спасибо декоратору).

Это больше похоже на обходной путь, чем на решение, но в моем случае это работает. В любом случае спасибо всем за участие

person Timo D    schedule 02.01.2015
comment
Спасибо за хороший обходной путь - он напоминает мне кэширование в динамическом программировании. Вы можете (как я собираюсь сделать) создать декоратор зависимостей, который вызывает функции, которые передаются перед вызовом базовой функции. Это делает код более описательным в некотором смысле. Я также меняю задачу, чтобы включить run_once. - person Att Righ; 21.01.2020