DEV Community

bankolejohn
bankolejohn

Posted on

Setting Up a Basic CI/CD Pipeline with Automated Build and Test Stages

In today's fast-paced development environments, Continuous Integration and Continuous Deployment (CI/CD) pipelines play a crucial role in ensuring rapid, reliable, and automated software releases. This article will walk you through setting up a basic CI/CD pipeline, focusing on automated build and test stages. Additionally, we'll identify the key stages of a CI/CD pipeline and explore how they can be automated with modern tools.

What is CI/CD?

CI/CD stands for Continuous Integration and Continuous Deployment (or Delivery). CI focuses on automating the integration of code changes from multiple contributors, while CD automates the process of delivering that integrated code to production. Together, they streamline the software development lifecycle, improving efficiency, reliability, and speed.

Key Stages of a CI/CD Pipeline

  1. Source Control:

    • This is the first stage where developers push their code changes. A version control system (VCS) like Git is used to manage and track code changes.
    • Automation Tool: GitHub, GitLab, Bitbucket, or other Git-based platforms.
  2. Build:

    • In this stage, the code is compiled and necessary dependencies are installed. For interpreted languages like JavaScript (Node.js), Python, or Ruby, this might involve installing libraries or setting up the environment.
    • Automation Tool: GitHub Actions, Jenkins, CircleCI.
    • Example: A Node.js project could use npm install to set up dependencies and then run build commands like npm run build.
  3. Test:

    • Automated testing ensures that the new changes don't break existing features. Tests can include unit tests, integration tests, or end-to-end tests.
    • Automation Tool: Jest (JavaScript), PyTest (Python), Mocha, etc.
    • Example: For a Node.js project, you can automate tests by running npm test or using a CI service like GitHub Actions to run tests on each pull request.
  4. Deploy:

    • In this stage, the code is deployed to staging or production environments. This ensures that the pipeline can continuously deploy updates to live environments without human intervention.
    • Automation Tool: Docker, Kubernetes, AWS CodeDeploy, GitHub Actions, Jenkins.
  5. Monitoring and Feedback:

    • After deployment, monitoring is crucial to ensure the system is working as expected. Feedback loops inform the team of issues, allowing rapid fixes.
    • Automation Tool: Prometheus, Grafana, Datadog.

Setting Up a Basic CI/CD Pipeline with GitHub Actions

Let's focus on creating a simple CI/CD pipeline for a Node.js project using GitHub Actions. This will cover the build and test stages.

Step 1: Define a GitHub Workflow

In your GitHub repository, create a new directory called .github/workflows and add a YAML file, such as ci.yml.

name: Node.js CI Pipeline

on:
  push:
    branches:
      - main
  pull_request:
    branches:
      - main

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout code
        uses: actions/checkout@v3

      - name: Set up Node.js
        uses: actions/setup-node@v3
        with:
          node-version: '16'

      - name: Install dependencies
        run: npm install

      - name: Run build
        run: npm run build

      - name: Run tests
        run: npm test
Enter fullscreen mode Exit fullscreen mode

Step 2: Automating the Build Stage

The pipeline begins by checking out the repository's code and setting up Node.js (version 16 in this case). It installs the project's dependencies using npm install and runs the build command, typically npm run build.

Step 3: Automating the Test Stage

After building the project, it automatically runs tests using npm test. This ensures that every push and pull request goes through proper testing before merging or deployment.

Step 4: Extending to Deployment

For deployment, you can add additional steps in the workflow to deploy the code to services like AWS, Heroku, or Docker. Here's a quick example for AWS deployment:

      - name: Deploy to AWS
        uses: appleboy/scp-action@v0.1.2
        with:
          host: ${{ secrets.AWS_HOST }}
          username: ${{ secrets.AWS_USER }}
          key: ${{ secrets.AWS_KEY }}
          source: "./"
          target: "/var/www/html"
Enter fullscreen mode Exit fullscreen mode

Tools for Automating Each CI/CD Stage

  • Source Control: Git, GitHub, GitLab.
  • Build: GitHub Actions, Jenkins, CircleCI.
  • Test: Jest, PyTest, Mocha, Selenium.
  • Deploy: Docker, Kubernetes, AWS CodeDeploy, Ansible.
  • Monitoring: Prometheus, Grafana, New Relic.

Conclusion

Setting up a CI/CD pipeline with automated build and test stages ensures rapid feedback and higher code quality. By utilizing modern automation tools, you can ensure that your project is tested and deployed consistently with minimal manual intervention. This process is vital for maintaining code reliability and enabling frequent deployments in fast-moving development environments.

  • This article gives one a good foundation for setting up a simple CI/CD flow.

Top comments (0)