the software for a Ship-It box (to be described in a future blog post)
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.


Ship-It is a physical device (currently a box containing a Raspberry Pi) and software that can be used to trigger events in remote systems. The current implementation is a python script making curl requests to TeamCity to start deploys. The software design goals were to use the software packages natively available on the Raspbian OS and to make the installation/setup as simple as possible.

The hardware design is entirely thanks to @justinisamaker and the current software is an adaptation of his design here. Many thanks go to Justin for the original creation.

Ship-It has only been tested on a Raspberry Pi, but could conceiveably be adapted for other systems.

hardware configuration

I used Fritzing to create the diagram.

wiring diagram

You can find the fzz file in the repo root. I'll supply a parts list at some point in the future...

This is the main script used by ship-it to communicate with the GPIO, make lights blink and fire off the remote requests.


As you'll see in, the curl credentials come from the system environment variables:


You can set these environment variables as you see fit or edit the python to contain the credentials.


The script is a pretty straightforward sysvinit script that uses a bit of bash exec trickery to ensure that stdout is not buffered. You'll notice that is run by root. This is required to be able to communicate with the GPIO pins.

packaging (experimental)

I use fpm to package Ship-It. Here's the command:

fpm -s dir -t deb -n ship-it -v 1.0 --deb-init ./ --deb-user pi --deb-group pi ./


You can either install the deb package:

sudo deb -i ship-it_1.0_amd64.deb

Or you can clone & copy:

cd ~
git clone
cd ship-it
sudo cp ./ /etc/init.d/ship-it
sudo chmod +x /etc/init.d/ship-it
sudo update-rc.d ship-it defaults


  • add bzz sound when launch is pressed but the box isn't armed
  • external config file to define pins, wiring, resistors, etc.
  • make install location/prefix configurable
  • make the http request internal to python (instead of making system calls)
  • figure out licensing for sounds