Skip to content

5 Powerful GitLab CI/CD Templates

  • 12 min read

Are you tired of copy-pasting the same old GitLab CI/CD configuration for every project? It’s a common pain point for many DevOps engineers. The good news is that you don’t have to reinvent the wheel each time. GitLab CI/CD templates are ready-made pipeline configurations you can tweak to fit your needs. In this article, we’ll explore five powerful templates that will boost your workflow.

Streamlining DevOps with GitLab CI/CD Templates

GitLab CI/CD templates act like blueprints for your deployment pipelines. They provide a structure with pre-defined jobs and stages. This helps you automate the build, test, and deploy processes with less effort. These templates are not rigid structures. They are designed to be flexible. You can adjust them to suit your project needs. This makes them a valuable tool to speed up development cycles and maintain consistency. With reusable components you can save a lot of time and ensure best practices are followed across all your projects.

Why Use GitLab CI/CD Templates?

Using templates can give you several clear advantages:

  • Time Savings: Start with a base configuration and adjust only what’s necessary, instead of creating everything from scratch.
  • Consistency: Templates allow a consistent deployment process across all your projects.
  • Maintainability: Update a template once, and those changes apply to all projects that use it.
  • Best Practices: Many templates come with the best practices built in. This gives you a strong starting point.
  • Reduced Errors: Standardized processes lower the risk of misconfigurations.

You can see that templates are a big help for your team, by reducing manual steps and speeding up the whole process. This brings more efficiency and reliability to your DevOps.

5 Powerful GitLab CI/CD Templates

Let’s jump into the five GitLab CI/CD templates that you should know about:

1. Basic Docker Build and Push Template

Docker has become a must-have tool in most DevOps workflows, and this template can be a great place to start. It outlines the steps to build a Docker image from your source code, and then push it to a container registry.

Here’s a simplified version of how the template looks:

stages:
  - build
  - push

build_image:
  stage: build
  image: docker:latest
  services:
    - docker:dind
  before_script:
    - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
  script:
    - docker build -t $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA .
    - docker tag $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA $CI_REGISTRY_IMAGE:latest

push_image:
  stage: push
  image: docker:latest
  services:
    - docker:dind
  before_script:
    - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
  script:
    - docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
    - docker push $CI_REGISTRY_IMAGE:latest

Explanation:

  • stages: Defines the two main steps of the pipeline: build and push.
  • build_image: A job within the build stage, which builds a Docker image.
    • image: docker:latest: Specifies the Docker image to use for the job.
    • services: - docker:dind: Enables Docker-in-Docker so that you can run Docker commands.
    • before_script: Logs into the Docker registry before building the image.
    • script: Executes the commands to build the image using docker build and tags it.
  • push_image: A job within the push stage, which pushes the Docker image to a registry.
    • Uses the same configurations to login into the registry.
    • script: Pushes the images to registry using docker push.

Why is it useful?

  • Standardization: You can use this template to ensure all your Docker builds follow a common pattern.
  • Integration: It works seamlessly with GitLab’s Container Registry.
  • Customizable: You can adjust it to add image scanning or other specific needs.

How to customize it?

  • Build arguments: You can pass build arguments to the docker build command to customize the build process.
  • Registry: Change the registry variables to suit your specific registry.
  • Image Tagging: Add more elaborate tags that fit your image management strategy.

This template helps you get a basic Docker workflow in place quickly and with consistency. You can then adjust it as your needs become more complex.

2. Multi-Environment Deployment Template

Having a way to manage deployments to several environments is key. This template shows you how to deploy your app to different locations. Such as development, staging, and production. This adds control to your delivery pipeline.

Here’s what the template might look like:

stages:
  - deploy_dev
  - deploy_staging
  - deploy_prod

deploy_dev:
  stage: deploy_dev
  environment:
    name: development
  script:
    - echo "Deploying to development environment..."
    - # Your deployment commands for development

deploy_staging:
  stage: deploy_staging
  environment:
    name: staging
  script:
    - echo "Deploying to staging environment..."
    - # Your deployment commands for staging

deploy_prod:
  stage: deploy_prod
  environment:
    name: production
    on_stop: rollback_prod
  script:
    - echo "Deploying to production environment..."
    - # Your deployment commands for production

rollback_prod:
  stage: deploy_prod
  when: manual
  environment:
    name: production
  script:
    - echo "Rolling back production deployment..."
    - # Commands to roll back the deployment

Explanation:

  • stages: This defines three deployment stages: deploy_dev, deploy_staging, and deploy_prod.
  • deploy_dev, deploy_staging, deploy_prod: Three similar job definitions, one for each environment.
    • environment: Defines the name of the deployment environment.
    • script: It includes the commands to do the deployment for the specific environment.
  • rollback_prod: A job that provides a rollback option for a deployment to production.
    • when: manual: This defines that the rollback job will not run unless manually activated from the GitLab interface.
    • environment: name: production: Declares this job related to the production environment.

Why is it useful?

  • Clear Separation: It sets clear stages for different environments, enhancing organization.
  • Controlled Rollouts: You can set a workflow with well defined deployments to each environment.
  • Environment Management: GitLab’s environment management is integrated into this template.

How to customize it?

  • Deployment Logic: You can replace the simple echo commands with actual deployment logic.
  • Environment Variables: Set up specific variables for each environment.
  • Approval Processes: Include manual approval jobs for each environment.

This template gives you a way to define the sequence of steps for deploying in several environments. It lets you manage every aspect of the process clearly.

3. Static Website Deployment Template

Static websites are a popular choice for many projects. This template can give you a good way to manage deployments for these types of sites. It uses GitLab Pages to host static content. This simplifies the process of getting a website online.

Here is how a static website deployment template may look:

stages:
  - build
  - deploy

build_website:
  stage: build
  image: node:latest
  script:
    - npm install
    - npm run build

deploy_website:
  stage: deploy
  image: alpine:latest
  dependencies:
    - build_website
  script:
    - cp -r public/* /
  artifacts:
    paths:
      - public
  only:
    - main

Explanation:

  • stages: This defines two stages: build and deploy.
  • build_website: This is where the static website will be built.
    • image: node:latest: Uses Node.js to build the website.
    • script: Installs dependencies and builds the website.
  • deploy_website: It deploys the generated content.
    • image: alpine:latest: Uses a light weight alpine image.
    • dependencies: Declares it has a dependency on the build step to complete before the deploy step.
    • script: Moves the built files to the root of the deployment location.
    • artifacts: Defines that this job should make the generated files available as artifacts.
    • only: - main: This only deploys when there are changes on the main branch.

Why is it useful?

  • Simple Setup: Deploy static sites quickly.
  • GitLab Pages: It works seamlessly with GitLab Pages.
  • Automated Builds: Builds and deploys every time you push code.

How to customize it?

  • Build tools: Change the build commands to use your preferred static site generators.
  • Custom Domain: Change the domain for deployment with your own domain.
  • Branch Control: Adjust the deployment branch to your specific needs.

This template provides a good starting point for static website deployments using GitLab. It has all the basic steps you need to publish your website, saving you a lot of time.

4. Testing and Code Quality Template

Testing and code quality are key in the development process. This template provides an automated way to run different types of tests and quality checks within your pipeline. These checks ensure your code is reliable, secure, and meets quality standards.

Here is how a testing and code quality template can look like:

stages:
  - test
  - code_quality

unit_tests:
  stage: test
  image: python:latest
  script:
    - pip install -r requirements.txt
    - pytest

integration_tests:
  stage: test
  image: docker:latest
  services:
    - docker:dind
  script:
    - docker run --rm my-test-image:latest

code_analysis:
  stage: code_quality
  image: sonarqube:latest
  script:
    - sonar-scanner -Dsonar.projectKey=$CI_PROJECT_ID -Dsonar.sources=. -Dsonar.host.url=$SONARQUBE_HOST -Dsonar.login=$SONARQUBE_TOKEN

Explanation:

  • stages: This includes two main steps: test and code_quality.
  • unit_tests: A job that is part of the test stage which runs the unit tests.
    • image: python:latest: Uses the latest version of Python to run the test.
    • script: Install the required packages and runs the tests.
  • integration_tests: A job to run integration tests, also part of the test stage.
    • image: docker:latest: Uses Docker to run an image with the integration tests.
    • services: - docker:dind: Docker-in-Docker to run docker commands.
    • script: Runs a pre-built Docker image that contains integration tests.
  • code_analysis: This job uses SonarQube to do code analysis, part of the code_quality stage.
    • image: sonarqube:latest: Uses the SonarQube image.
    • script: Executes the SonarQube scanner.

Why is it useful?

  • Automated Testing: It automates both unit and integration tests.
  • Code Quality Checks: It does automated code analysis with tools like SonarQube.
  • Early Issue Detection: Detects issues early on in the development cycle.

How to customize it?

  • Testing Tools: Use other testing tools that better suit your project needs.
  • Code Analyzers: Add more code analysis tools to fit your needs.
  • Test Suites: Adjust this to cover more types of tests.

This template improves the quality and reliability of your code. You’ll find it easy to integrate with your pipelines to ensure high standards.

5. Infrastructure as Code Template

Infrastructure as code (IaC) has changed the way resources are provisioned and managed. This template lets you manage your infrastructure as part of your code repository. It shows you how to use tools such as Terraform to provision resources for your application.

Here is how an Infrastructure as Code template may look:

stages:
  - plan
  - apply

terraform_plan:
  stage: plan
  image: hashicorp/terraform:latest
  script:
    - terraform init
    - terraform plan -out=tfplan

terraform_apply:
  stage: apply
  image: hashicorp/terraform:latest
  dependencies:
    - terraform_plan
  script:
    - terraform apply tfplan
  only:
    - main

Explanation:

  • stages: Defines two main steps in the pipeline: plan and apply.
  • terraform_plan: This job that executes the plan.
    • image: hashicorp/terraform:latest: It uses the official Terraform image.
    • script: Initializes Terraform and creates the plan output.
  • terraform_apply: This applies the infrastructure plan.
    • image: hashicorp/terraform:latest: It uses the Terraform image again.
    • dependencies: It is dependent on the plan step to complete first.
    • script: Applies the plan.
    • only: - main: Only applies on changes to the main branch.

Why is it useful?

  • Version Control: Manage your infrastructure with version control.
  • Automation: Automates the provisioning of infrastructure.
  • Consistency: Ensures that all your infrastructure is deployed in the same way.

How to customize it?

  • Providers: You can use this with any cloud provider that Terraform supports.
  • State Management: Setup state management to persist changes in a remote backend.
  • Approval Process: Add manual approval for production infrastructure changes.

This template provides a reliable way to manage your infrastructure using Terraform. This process provides consistency and prevents errors in your infrastructure deployments.

Making the Most of GitLab CI/CD Templates

Here are a few ways you can make these templates work best for you:

  • Start Simple: Begin with the basic templates and increase complexity.
  • Version Control: Track the changes you make to your templates.
  • Modularize: Break up larger templates into smaller more manageable components.
  • Documentation: Document how the templates are used and why.
  • Share and Collaborate: Share your templates with other teams. This promotes collaboration and uniformity.

By integrating templates into your workflow, you’ll see improvements in speed, consistency, and the quality of your code.

Tailoring Templates to Fit Your Needs

Remember, the templates you see here are starting points. You will need to customize them to fit your exact use case. Always test these templates in a controlled environment, to make sure that they fit your needs before deploying to production. There are several ways to tailor these templates:

  • Environment Variables: Use GitLab CI/CD variables to define configuration values based on the specific environment.
  • Script Modification: Adjust scripts to include the exact commands you need, whether it’s setting up a deployment, or running a specific test suite.
  • Adding Dependencies: Use the dependency feature in GitLab CI/CD to ensure that jobs run in the right sequence.
  • Branching Strategy: Set jobs to run for specific branches, or only when certain conditions are met, such as a deployment to main.
  • Manual Approvals: Add jobs that require manual intervention before production deployments, to reduce the risk of misconfiguration.

Always start with small changes, and test every change before moving forward. With a careful, iterative approach you can avoid major issues during your deployments.

Key Takeaways

GitLab CI/CD templates provide a solid way to build and manage your development workflows. The five templates discussed here include:

  1. Basic Docker Build and Push Template: Use this to standardize your Docker workflows.
  2. Multi-Environment Deployment Template: To manage your deployments to different environments.
  3. Static Website Deployment Template: A simple way to deploy static sites using GitLab Pages.
  4. Testing and Code Quality Template: Automates testing and code analysis.
  5. Infrastructure as Code Template: Use this for infrastructure management with Terraform.

These templates offer you a starting point. You can customize them to suit your needs. This lets you build pipelines that are highly automated, reliable, and tailored to your workflows.

Making Your Pipelines More Efficient

GitLab CI/CD templates can help you build efficient pipelines, but it’s also wise to adopt a continuous improvement mindset to your deployments. Here are some tips to keep optimizing your pipelines:

  • Monitor Performance: Keep an eye on pipeline execution times to spot slow spots, and make changes to improve those parts of the pipelines.
  • Regular Updates: Update your template configurations regularly to use the best tools, and include the best practices.
  • Feedback Loops: Create feedback loops to include the developers and operations team into your optimization process.
  • Iterate Often: Always look for ways to make small changes and improvements, using an agile method can be a huge help.
  • Keep it Clean: Keep your configuration files readable and structured, this helps maintain them over the long term.

By keeping a mindset of regular improvement, your pipelines will stay efficient over time. This keeps your team running at the best levels.

Ready to Transform Your CI/CD?

These five powerful GitLab CI/CD templates are great tools that you can use to streamline your deployments. By integrating these templates into your development process, you can save time, and enhance efficiency. Are you ready to take your DevOps to the next level?