Deploying GitLab pages for different branches

2 min read 06-10-2024
Deploying GitLab pages for different branches


Deploying GitLab Pages for Different Branches: A Guide to Dynamic Content

GitLab Pages is a powerful tool for hosting static websites directly from your GitLab repository. But what if you need to deploy different versions of your site based on specific branches, like a staging environment for your development work? This is where deploying GitLab Pages for different branches comes in handy.

The Problem: Static Sites, Dynamic Needs

Imagine you're developing a website and want to preview changes before merging them into the main branch. You could manually upload files, but this is tedious and prone to errors. With GitLab Pages, you can easily deploy different versions of your site directly from different branches.

The Solution: Leveraging GitLab Pages' Flexibility

GitLab Pages lets you configure deployments to different branches by customizing your gitlab-ci.yml file. This allows you to have a separate website for each branch you want to deploy.

Here's a basic example of how you can configure your gitlab-ci.yml to deploy your site from the main and staging branches:

stages:
  - deploy

pages:
  stage: deploy
  image: docker:latest
  script:
    - echo 'Deploying to Pages'
    - apt-get update -qq
    - apt-get install -y nginx
    - echo '<h1>This is the main branch</h1>' > /usr/share/nginx/html/index.html
  artifacts:
    paths:
      - public/*
  only:
    - main

pages_staging:
  stage: deploy
  image: docker:latest
  script:
    - echo 'Deploying to Pages (Staging)'
    - apt-get update -qq
    - apt-get install -y nginx
    - echo '<h1>This is the staging branch</h1>' > /usr/share/nginx/html/index.html
  artifacts:
    paths:
      - public/*
  only:
    - staging

This code defines two jobs: pages and pages_staging. The only directive in each job specifies the branch that triggers it. This ensures that the pages job runs only when changes are made to the main branch, while pages_staging runs only when changes are made to the staging branch.

Breaking Down the Solution

  • stages: Defines the different stages in your CI/CD pipeline. Here, we have the deploy stage.
  • pages & pages_staging: Job names for deploying to the main branch and staging branch respectively.
  • image: Specifies the Docker image used to run the job. Here, we're using the docker:latest image.
  • script: Defines the commands to be executed within the job. This includes installing the necessary packages and generating content for the website.
  • artifacts: Specifies the files or directories that will be deployed to the GitLab Pages server.
  • only: Defines the branch(es) that trigger the specific job.

The Benefits of Branch-Based Deployment

  • Testing & Feedback: Develop and test features on separate branches before merging them into the main branch, providing a controlled environment for feedback and collaboration.
  • Previewing Changes: Give stakeholders a chance to see the website as it will appear in production before it goes live.
  • Rolling Back Changes: Easily revert to previous versions by switching to the appropriate branch.

Beyond the Basics: Advanced Techniques

  • Custom Domains: Use custom domains for each branch to create distinct URLs for different versions of your site.
  • Environment Variables: Utilize environment variables within your gitlab-ci.yml file to configure different settings for each branch, such as different database credentials or API keys.
  • Auto Deployments: Automate the deployment process for each branch by triggering deployments on merge requests or specific events.

Conclusion

By utilizing GitLab Pages' flexibility and branch-based deployment, you can significantly streamline your workflow and create a more efficient and organized development process. This approach allows you to build, test, and deploy multiple versions of your website simultaneously, ensuring a seamless and collaborative experience for your entire team.