We are going to use the GitLab CI runner to automatically publish the site (this CI runner is already included in your repository if you use GitLab.com).

Repository setup

Your repository needs to be set up to be a user or group website. This means the name of the repository has to be in the correct format.

For example, assuming that the username is john, you have to create a project called john.gitlab.io. Your project URL will be https://gitlab.com/john/john.gitlab.io. Once you enable GitLab Pages for your project, your website will be published under https://john.gitlab.io.

Under your group websites, you created a project called websites.gitlab.io. Your project’s URL will be https://gitlab.com/websites/websites.gitlab.io. Once you enable GitLab Pages for your project, your website will be published under https://websites.gitlab.io.

This guide assumes that your zola project is located in the root of your repository.

Ensuring that the CI runner can access your theme

Depending on how you added your theme, your repository may not contain it. The best way to ensure that the theme will be added is to use submodules. When doing this, ensure that you are using the https version of the URL.

$ git submodule add {THEME_URL} themes/{THEME_NAME}

For example, this could look like:

$ git submodule add https://github.com/getzola/hyde.git themes/hyde

Setting up the GitLab CI/CD Runner

The second step is to tell the GitLab continous integration runner how to create the GitLab page.

To do this, create a file called .gitlab-ci.yml in the root directory of your repository.

variables:
  # This variable will ensure that the CI runner pulls in your theme from the submodule
  GIT_SUBMODULE_STRATEGY: recursive  
  # Specify the zola version you want to use here
  ZOLA_VERSION: "v0.9.0"

pages:
  script:
    # Download the zola executable and store it in zola.tar.gz
    - curl -L https://github.com/getzola/zola/releases/download/$ZOLA_VERSION/zola-$ZOLA_VERSION-x86_64-unknown-linux-gnu.tar.gz > zola.tar.gz
    # Unpack the zola executable
    - tar -xzf zola.tar.gz
    # Execute zola build
    - ./zola build
    
  artifacts:
    paths:
      # Path of our artifacts
      - public
      
  # This config will only publish changes that are pushed on the master branch
  only:
  - master

Push this new file and ... Tada! You're done! If you navigate to settings > pages, you should be able to see something like this:

Congratulations! Your pages are served under:
https://john.gitlab.io

More information on the process to host on GitLab pages and additional information like using a custom domain is documented in this GitLab blog post.