If you could extract branch information from fabric tasks, and then merge the branch with associated deployment handled by GitLab CI, the workflow would be the simplest one.
For that reason maybe you could investigate more on your idea of parsing the task description, it could be a single point that solves the matter.
As a side note, if you want to disable CI for a specific commit you can just use [skip ci] or [ci skip] in the commit message and no pipeline is created for that specific case.
If you could extract branch information from fabric tasks, and then merge the branch with associated deployment handled by GitLab CI, the workflow would be the simplest one. For that reason maybe you could investigate more on your idea of parsing the task description, it could be a single point that solves the matter.
As a side note, if you want to disable CI for a specific commit you can just use [skip ci] or [ci skip] in the commit message and no pipeline is created for that specific case.