Deploy Publish Site to Server Using Git

Deploy Publish Site to Server Using Git

Publish by Sundell provides two deploy methods: gitHub(_: branch: useSSH:) and git(_: branch: ), one for GitHub and the other for generic git servers.

It is quite straight forward to deploy using GitHub (Setup a repository on GitHub), but deploying to generic git servers require some additional steps.

This is not a tutorial for using Git. So I would like to assume you already have your Git installed and setup (with SSH key) on both of your local OS and server. If you haven't, the official documentation is a good point to start: Git Book

Create a New Git Repository on Server

Create a folder on your server, at a location you that have write permission and initiate the repository. This can be your home folder, the home folder of git user, or any location you like.

1 2 3 4
cd /path/to/folder mkdir MyPublishSite.git cd MyPublishSite.git git init --bare

Where /path/to/folder is the location you want the repository to be, and MyPublishSite.git is the name of git repository.

Add a Post-Receive Hook

Create a file named post-receive in the hooks directory of the new created repository.

1 2
cd hooks vim post-receive

Put the following content in the file:

1 2
#!/bin/sh GIT_WORK_TREE=/path/to/website/root git checkout -f

Where /path/to/website/root is the root directory of your website. On some systems, this may be /var/www/

Then, make the file executable.

chmod +x post-receive

Setup Deploy Pipeline Step in Publish

Add a deploy step using git in your pipeline:

1 2 3 4
try MyPublishSite().publish(using: [ ... .deploy(using: .git("username@yourserver:/path/to/folder/MyPublishSite.git/", branch: "master")) }

Where username is the user name on server (your user name or git, depends on your setup). yourserver is the server name or address, and /path/to/folder/MyPublishSite.git/ is the git repository you just created.


Run the package to generate the website (without --deploy flag), and then run the package to deploy website to server, with --deploy flag.


Tagged with: