We already saw a way to deploy our pelican website. To do it we add a SSH private SSH key to the environment variables. That not so nice since everybody that have access to the project can get the SSH private key. We will see here an other possibility to deploy our pelican website by mounting the final repository directly inside the build environment.
You will need to have functional installation of GitLab and GitLab Runner with
Docker. In addition we suppose that the required python are in the
requirements.txt
file. The build and deployment will be managed with
python and classical tools like mv
, so a minimal docker image with
python should be enough to do the job. The GitLab Runner should be on the
machine that serve the website.
Create a runner
We will first create a runner that use docker that have python 2 installation
and the web destination folder mounted (in our case it will be
/var/www
).
General runner registration
If not already done, you will need to setup a runner for the project:
# gitlab-runner register
Put the address of the coordinator. If GitLab is accessible trough http://gitlab.com, it should be something like http://gitlab.com/ci
Enter then the token that will link GitLab and the runner:
- If you would like to have a shared runner go to the Admin Area, then Overview and finally Runners, to get the token.
- If you prefer to have a runner for the project, go in the configuration menu of the projects and select Runners and use the token of the project.
Give a name to your runner and eventually some tags. I suggest to had as tags
all the functionality of the runner. Indeed we can specify in the build system
to use only the runners that carry specified tags. In our example the tags will
be python2
, www-mount
Specify the executor as docker
and the docker image as
python:2-alpine
.
Configuration of the mounted volume
At the creation of the runner, automatically a volume is created as cache
(/cache
). We will add an other one that will be linked to a real path on
the machine running the gitlab-ci-multi-runner.
To do it we need to edit the /etc/gitlab-runner/config.toml
. Search the
runner you are interested and change the volumes
line as follow:
volumes = ["/cache", "/var/www:/var/www:rw"]
Each time the runner will be executed the /var/www
folder of the host at
the same place in the container as read write.
Deployment
Here are the different steps for the deployment.
- Clone the repository.
- First install dependencies with the help of pip and the
requirements.txt
file. - Generate pelican website.
- Backup the old version of the website (just in case)
- Move the output directory in the destination
Configuration of the continuous integration
We will create a Gitlab continuous integration configuration file
(.gitlab-ci.yml
) at the root of the repository. It is automatically
recognised by GitLab. The file is inspired from the one proposed by GitLab.
image: python:2.7-alpine
pages:
tags:
- www-mount
- python2
script:
- pip install -r requirements.txt
- pelican -s publishconf.py
- mv -f /var/www/website.domain /var/www/archives/website.domain.$(date "+%Y%m%d_%H%M%S") || true
- mv output /var/www/website.domain
For the build we specify two tags here: www-mount
and python2
.
This will allow the build system to select the runner that have the same tags.