Getting Started with Continuous Integration and Continuous Delivery (CI/CD)

April 13, 2024

Introduction to DevOps

Getting Started with Continuous Integration and Continuous Delivery (CI/CD)

Continuous Integration (CI) and Continuous Delivery (CD) are foundational practices in the world of DevOps, helping teams deliver code changes more frequently and reliably. This tutorial will guide you through setting up a basic CI/CD pipeline using GitHub Actions, a popular tool that integrates directly with GitHub repositories for an easy start.

What is CI/CD?

Continuous Integration involves merging all developed code to a shared branch several times a day and testing each change automatically and immediately. This helps detect errors quickly, improve software quality, and reduce the time it takes to validate and release new software updates.

Continuous Delivery builds on CI by automating the release process so you can deploy your application at any time by just clicking a button. In essence, CD automates the software release process so that it is reliable and requires minimal manual intervention.

Setting Up a CI/CD Pipeline Using GitHub Actions

Step 1: Understand GitHub Actions

GitHub Actions makes it easy to automate all your software workflows by building, testing, and deploying your code right from GitHub. You can write individual tasks, called actions, and combine them to create a custom workflow.

Step 2: Create Your GitHub Repository

If you don't already have a GitHub repository for your project, create one. Go to GitHub, sign in, click on "New repository," name your repository, and then click "Create repository."

Step 3: Create a New Workflow

Navigate to your GitHub repository and click on the "Actions" tab. You’ll likely see suggestions for workflows based on the language and tools your project uses. For a custom workflow, click "set up a workflow yourself."

Here’s a simple workflow configuration to get started:

name: Continuous Integration Workflow

on:
  push: # Triggers the workflow on push events to any branch in the repository

jobs:
  build:
    runs-on: ubuntu-latest # Specifies the runner environment

    steps:
    - name: Checkout Repository
      uses: actions/checkout@v2 # Checks out the repository under $GITHUB_WORKSPACE, so the job can access it

    - name: Display Hello Message
      run: echo "Hello, world!" # Executes a simple one-line script to display a message

    - name: Set Up Python
      uses: actions/setup-python@v2
      with:
        python-version: '3.8' # Sets up Python 3.8

    - name: Execute Multi-Line Script
      run: |
        sudo apt-get update
        sudo apt-get install -y tree
        echo "Installed Tree Command"
        tree .
        python --version
        echo "Listed directory structure and Python version"
      # This script updates packages, installs the 'tree' command, lists the directory structure, and prints the Python version

This workflow is triggered on every push to the repository. It checks out your code and runs some simple scripts.

Step 4: Add Build and Test Steps

Modify the workflow to build and test your project by adding steps that execute your build and test scripts. For example, if you’re using Python, you might add:

    - name: Upgrade pip And Install Python Dependencies
      run: |
       python -m pip install --upgrade pip
      # pip install -r requirements.txt
      # If you have a requirements.txt file at the root of your repository, uncomment the line above

    - name: Run Python Tests
      run: |
       python -m unittest discover
      # This uses Python's unittest module to discover and run tests

Step 5: Commit and Push Your Workflow

Commit the .github/workflows/ci.yml file to your repository and push it. GitHub will trigger the workflow you defined each time you push changes to your repository.

Conclusion

Setting up a CI/CD pipeline can seem complex, but with tools like GitHub Actions, it becomes much more approachable. By integrating CI/CD into your development processes, you ensure that your software can be reliably released at any time, with minimal effort. This introduction merely scratches the surface, so as you grow more comfortable with these concepts, you’ll continue refining your pipelines for better efficiency and reliability.


Profile picture

Written by Justin who tries to build many nice things high up in the clouds, and most of the time fails. He defaults to taking over the world, one vpc at a time. You should follow them on Twitter