GitHub and CircleCI Deployment via SFTP

Written by Pressable on

The tutorial will focus on setting up CircleCI config.yml file to deploy the master branch of a GitHub repository via SFTP.

To follow along with this tutorial you will need:

1. A theme or plugin that you would like to deploy.

2. Have this theme/plugin in an already existing GitHub repository.

3. An account at CircleCI, which requires you to login using your GitHub (or BitBucket) account.

24/7 WordPress Support

from real WordPress experts

LEARN MORE

Setting Up CircleCI

Once logged in to CircleCI, you will want to add a new project by clicking “Add Projects” on the left hand side navigation menu.

From here, you will be presented with a list of repositories in your GitHub account. Choose the repository for the theme or plugin you’d like to deploy and click “Set Up Project.” In the image below, the pressable-theme project is being set up for use in this tutorial.

CircleCI dashboard for setting up a project.

From here, you will be presented with a configuration screen. Choose “Linux” as the Operating System, “PHP” or “Other” as the Language, and then click “Start Building” on the bottom right hand corner.

We will be using a custom config.yml file, so you can safely ignore the one that gets generated for you by the site.

CircleCI deployment dashboard with build, operating system, and language options.

After this, you will need to configure a few variables that will get used by CircleCI to make connections and know where to place your plugin or theme.

You’ll need to click the settings cog on the project that you are wanting to configure variables for. In the image below, the settings cog for the pressable-theme project is selected.

CircleCI project settings button.

From here, click on the “Environment Variables” menu item under the “Build Settings” menu header. Then, click on “Add Variable” and add the following variables:

  • hostname with value sftp.pressable.com
  • username with value set to your Pressable SFTP username.
  • password with value set to your Pressable SFTP password.
  • site_name with value set to the Pressable site name you are deploying to.
  • theme or plugin with value set to the name of the theme or plugin you are deploying. (Ex. pressable-theme in the case of this tutorial)

Setting Up Repository

From here, we need to add our config.yml file to the repository you want to deploy. In order to do this, you will need to create a directory named .circleci in the root of your repository. Inside that directory, you will create a new file named config.yml. In the following config.yml file, you will want to replace /wp-content/themes/ with /wp-content/plugins and ${theme} with ${plugin} if you are deploying a plugin.

Place the following inside the config.yml file:

version: 2.0
jobs:
build:
machine:
image: circleci/classic:latest
branches:
only:
master
steps:
run:
name: Install LFTP
command: |
sudo apt-get update;
sudo apt-get install lftp;
checkout
run:
name: Send Via SFTP
command: lftp sftp://${username}:${password}@${hostname} -e "mirror -v -R –exclude .git/ –exclude .circleci/ ./ ${site_name}/wp-content/themes/${theme}; quit"

view raw
config.yml
hosted with ❤ by GitHub

Once the config.yml file is created inside the .circleci directory, you can make a push to your repository. CircleCI will see the push you made and will fire off a job using the config.yml file as instructions on what to do and where to deploy.

If you visit the CircleCI interface after making a push to master, you can see it spinning up the environment and deploying the repository.

From here, you can add other features to config.yml to make your CI setup complete.

Tags: ,

Web Performance

Load time matters! Do you know how fast your site is?
Take our test to find out.

TAKE TEST
An Automattic Invention A family of WordPress solutions.