Skynet
GitHub-aware website builder
Skynet builds and deploys web sites on your VPS or bare metal server. It is triggered by the post-receive hook.
Current Builder Types
- Static. Copies the entire repository to the specified destination and then removes the destination .git folder
- Jekyll. Run jekyll on your repository. Entirely controlled by
site's
_config.yml
Usage
- Install Skynet:
$ gem install skynet-deploy
- Install basic config file:
$ skynet config <first project name>
- edit config file to add your repositories
- Run builder by hand to ensure everything works:
$ skynet build
- Add
http://YOUR_SKYNET_SERVER/PROJECT_NAME
as a Webhook Payload URL to your repository underSettings -> Webhooks
. Chooseapplication/json
as the Content type. - Start server:
$ skynet server
Config file arguments
Required configuration variables for each project:
url
Value passed from post-receive hook to verify that the deploy should happentype
The builder type to invoke for this application- Either
branch
anddestination
together or onlybranches
must be specified
Optional configuration variables:
key
SSH private key file to be used to clone and pull from private repositories. Should be given as an absolute pathrepository
The location to clone the repository from. This is usually inferred fromurl
, but can be overridden herebranch
The branch to be deployeddestination
Absolute path to the deployed applicationbranches
For when multiple branches should be deployed to this machine (such as a production + staging strategy).branches
is a hash with keys being the branch name and values being the destination
Example Post-Receive Hook
Add this to your .git/hooks/post-receive
file to use Skynet with
a git server other than GitHub.
read oldrev newrev refname
curl -d "payload={\"repository\":{\"url\":\"<<same path as in config.yml>>\"},\"before\":\"$oldrev\",\"after\":\"$newrev\",\"ref\":\"$refname\"}" http://YOUR_SKYNET_SERVER/PROJECT_NAME
The URL must be visible from the Skynet server, as it will pull a new copy of the repository from this server.
Upgrading from 1.x
- Private repositories must explicitly set the
repository
key in the config to the ssh-compatible url. Previously this was optional for Github repos