Using static site generator like Pelican involved to rebuild it each time you modify it. Modern software forge like GitLab are able not only to manage code repositories but also make some continuous integration. Therefore they are able to run some command after each commit such as test, or build. In our case we will see how to rebuild and deploy our pelican website at each commit.
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 the
make and therefore the Pelican generated Makefile
should be correctly
setup and notably the SCP parameters that will be used.
Create a runner
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.
Specify the executor as docker
and the docker image as
python:2.7
. This docker image not only include python but also some
development tools such as GNU Make.
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. - Setup a SSH configuration directory with correct POSIX right (
~/.ssh
) - Get the SSH public key of the server and had it to known_hosts with the
ssh-keyscan
command. - Create the required private key files (from
SSH_PRIVATE_KEY
environment variable). This will allow us to have it outside of the repository and therefore secret. - Generate pelican and upload to the ssh server with the help of
make
command.
Setup of the private SSH key
To avoid to have the private SSH key in the repository and therefore able to be read by everybody accessing it, we will save it in a GitLab Internal variable.
Put the content of the private key in a variable named SSH_PRIVATE_KEY
.
For this in the configuration menu of the project select Variables and create
a new one with the name SSH_PRIVATE_KEY and put the content of id_rsa
corresponding that is in between the -----BEGIN RSA PRIVATE KEY-----
and
-----END RSA PRIVATE KEY-----
as a value. This variables will be
specific to the project and available in the build environment. We will need to
past this key in the correct file to be able to use it for SSH connection.
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
reconnised by GitLab. The file is inspired from the one proposed by GitLab.
image: python:2
pages:
script:
- pip install -r requirements.txt
- mkdir -p ~/.ssh
- chmod 700 ~/.ssh
- ssh-keyscan -t rsa domaine.tld > ~/.ssh/known_hosts
- echo "-----BEGIN RSA PRIVATE KEY-----" > ~/.ssh/id_rsa
- echo "$SSH_PRIVATE_KEY" >> ~/.ssh/id_rsa
- echo "-----END RSA PRIVATE KEY-----" >> ~/.ssh/id_rsa
- chmod 600 ~/.ssh/id_rsa
- make ssh_upload