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_NAMEas a Webhook Payload URL to your repository underSettings -> Webhooks. Chooseapplication/jsonas the Content type. - Start server:
$ skynet server
Config file arguments
Required configuration variables for each project:
-
urlValue passed from post-receive hook to verify that the deploy should happen -
typeThe builder type to invoke for this application - Either
branchanddestinationtogether or onlybranchesmust be specified
Optional configuration variables:
-
keySSH private key file to be used to clone and pull from private repositories. Should be given as an absolute path -
repositoryThe location to clone the repository from. This is usually inferred fromurl, but can be overridden here -
branchThe branch to be deployed -
destinationAbsolute path to the deployed application -
branchesFor when multiple branches should be deployed to this machine (such as a production + staging strategy).branchesis 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
repositorykey in the config to the ssh-compatible url. Previously this was optional for Github repos