Captain Webhook

Captain Webhook is a very simple Python script that will run an HTTP server and trigger commands whenever a secret URL is requested. It is mainly used for deployments, for example triggering ansible-pull whenever a commit is pushed to GitHub.

Installing

You can install Captain Webhook using pip:

pip install captainwebhook

You can also get the latest source at the canonical location of Captain Webhook, its GitHub repository:

https://github.com/skorokithakis/captainwebhook

How to use

Using Captain Webhook is very simple. Just launch it with the command you want to run:

cptwebhook "echo hello!"

And visit the URL in your browser:

http://localhost:48743/webhook/changeme/

The command you specified will be run.

"Advanced" options

Captain Webhook supports some super-advanced functionality that is detailed below.

Password protection

Obviously, the URL above isn't very secure, since anyone could trigger the command then. To make things a bit more obscure, and thus secure, Captain Webhook allows you to specify a key:

cptwebhook -k ichoKie5IeGhiexa "echo hello!"

The URL now becomes:

http://localhost:48743/webhook/ichoKie5IeGhiexa/

Command templates

Your command doesn't have to be static! Captain Webhook can accept template variables in the command string and populate them with whatever comes in the query string of the request by passing the --template flag. For example:

cptwebhook -t "echo Hello, {name}!"

Try the URL:

http://localhost:48743/webhook/changeme/?name=world

will execute "echo Hello, world!". Isn't that the best thing ever?

Miscellanea

Other options include the interface and port the server will listen on. You can see more details with:

cptwebhook -h

Miscellaneous

Captain Webhook will always return a 200 (some services don't like other return codes), and will always return JSON. A command will never be triggered again while the first one is running, Captain Webhook will just ignore any subsequent invocations until the first one is finished.