Commandline usage ¶
RKD command-line usage is highly inspired by GNU Make and Gradle, but it has its own extended possibilities to make your scripts smaller and more readable.
-
Tasks are prefixed always with “:”.
-
Each task can handle it’s own arguments (unique in RKD)
-
“@” allows to propagate arguments to next tasks (unique in RKD)
Tasks arguments usage in shell and in scripts ¶
Executing multiple tasks in one command:
./rkdw :task1 :task2
Multiple tasks with different switches:
./rkdw :task1 --hello :task2 --world --become=root
Second task will run as root user, additionally with
--world
parameter.
Tasks sharing the same switches
Both tasks will receive switch “–hello”
# expands to:
# :task1 --hello
# :task2 --hello
./rkdw @ --hello :task1 :task2
# handy, huh?
Advanced usage of shared switches
Operator “@” can set switches anytime, it can also clear or replace switches in NEXT TASKS .
# expands to:
# :task1 --hello
# :task2 --hello
# :task3
# :task4 --world
# :task5 --world
./rkdw @ --hello :task1 :task2 @ :task3 @ --world :task4 :task5
Written as a pipeline (regular bash syntax)
It’s exactly the same example as above, but written multiline. It’s recommended to write multiline commands if they are longer.
./rkdw @ --hello \
:task1 \
:task2 \
@
:task3 \
@ --world \
:task4 \
:task5
Arguments ¶
Each task has it’s own arguments parsing and –help method
# see a list of commandline switches
./rkdw :task1 --help
# increase log level
./rkdw :task1 --log-level debug
# log output to file
./rkdw :task1 --log-to-file=/tmp/task1.log
# change user for task execution time
./rkdw :task1 --become=root
Global commandline switches
To apply default, global error level use a switch before all tasks.
./rkdw --log-level=debug :task1 :task2
# alternatively (changes log level on earlier stage than argument parsing)
RKD_SYS_LOG_LEVEL=debug ./rkdw :task1 :task2
# or like shown in 'Tasks arguments usage in shell and in scripts' - any commandline switches
# can be propagated, including RKD internal switches
./rkdw @ --log-level=debug --task-workdir=/tmp :task1 :task2
Advanced: Blocks for error handling ¶
Blocks allow to retry single failed task, or a group of tasks, execute a failure or rescue task.
Tip
Blocks cannot be nested.
Retry a task - @retry
Retry task until it will return success, up to defined retries. If there are multiple tasks, then a single task is repeated, not a whole block.
./rkdw '{@retry 3}' :unstable-task '{/@}'
Retry a block (set of tasks) - @retry-block
Works very similar to @retry, but in case, when at least one task fails - all tasks in the block are repeated.
./rkdw '{@retry-block 3}' :unstable-task :task2 '{/@}'
Rescue - @rescue
When a failure happens in any of tasks, then those tasks are interrupted and a rollback task is executed. Whole block status depends on the rollback task status. After a successful rollback execution next tasks from outside of the blocks are normally executed.
./rkdw :db:shutdown :db:backup '{@rescue :db:restore}' :db:upgrade '{/@}' :db:start
Error - @error
When at least one task fails, then a error task is notified and the execution is stopped.
./rkdw '{@error :notify "Task failed!"}' :some-task :some-other-task '{/@}'