Netlify continuous deployment#
This guide shows you how to configure Semaphore to continuously deploy a static website to Netlify.
Before getting started, you'll need:
- A Netlify account.
- A working Semaphore project with a CI pipeline that will build the website.
For the initial CI pipeline, you can refer to Semaphore's open source demo static website project, which uses a Node.js framework to generate site pages, and the companion guide.
Writing a deployment pipeline#
Create a deployment pipeline as a new file in your .semaphore
directory:
# .semaphore/production-deploy-netlify.yml
version: v1.0
name: Deploy website
agent:
machine:
type: e1-standard-2
os_image: ubuntu2004
blocks:
- name: 🏁 Deploy
task:
# Mount a secret which defines /home/semaphore/.netlify/config.json and
# /home/semaphore/.netlify/state.json.
# For info on creating secrets, see:
# https://docs.semaphoreci.com/essentials/using-secrets/
secrets:
- name: netlify-authentication
jobs:
- name: Copy to netlify
commands:
- npm install netlify-cli -g
# restore the website cached as website-build
- cache restore website-build
# deploy the contents of the public directory
- netlify deploy --dir=public --prod
The pipeline shown above assumes that the website files are generated in
the public
directory and
cached
with the following key: website-build
. You may need to adjust the last two
commands of the job to suit your needs.
Adding a promotion to deployment#
Next, add a promotion
to your existing semaphore.yml
file, as shown below:
- name: Netlify Production deploy
pipeline_file: production-deploy-netlify.yml
auto_promote:
when: "result = 'passed' and branch = 'master'"
This will start the deployment on every successful revision on the master branch. For more details regarding promotions, consult the reference documentation.
Managing Netlify credentials#
To obtain your Netlify credentials:
-
Install the netlify command line interface with the following command:
bash $ npm install netlify-cli -g
-
Log in to your Netlify account, as shown below:
bash $ netlify login
This opens a browser window, follow the instructions to get authorized.
-
Link your project's directory with the Netlify site. The actual command depends on whether you are updating an existing site or creating a new one:
-
If you are creating a new site, enter the following command:
bash $ cd /your/project/path $ netlify init
-
If you are updating a previously existing site, enter the following command:
bash $ cd /your/project/path $ netlify link
Storing credentials on Semaphore#
You need to upload two files to Semaphore in order to allow access to your Netlify account and site. Secrets are the best way to store private data such as authentication tokens and passwords. You can securely send the files to Semaphore using sem CLI, as shown below:
$ cd /your/project/path
$ sem create secret netlify-authentication \
--file .netlify/state.json:/home/semaphore/.netlify/state.json \
--file ~/.netlify/config.json:/home/semaphore/.netlify/config.json
To see the secrets stored on Semaphore enter the following command:
$ sem get secrets
Launching your first deployment#
The workflow will start as soon as the changes are pushed to your repository, as shown below:
$ git add .semaphore/production-deploy-netlify.yml
$ git add .semaphore/semaphore.yml
$ git commit -m "add deployment"
$ git push
That’s all. Your website will be automatically deployed on every successful update of the master branch. With a setup such as this, you can ship updates quickly while preventing any errors from reaching your site.