This is the multi-page printable view of this section. Click here to print.

Return to the regular view of this page.

Documentation Overview

You are at the right place to learn about the Jumpstarter project!

What is Jumpstarter?

Jumpstarter is a project to enable Hardware in the Loop testing and development for Edge devices.



Embedded and Edge devices have been traditionally tested in a manual way, with a human operator. This is not scalable, and it is not suitable for CI/CD pipelines, i.e. Tekton, GitHub CI, GitLab CI, Jenkins, etc.

In a modern development cycle we want to know that our software changes work well into our device hardware. We need to test the onboarding process, the software stack, the hardware, the updates and the interaction between all of them.

Why do I want it?

  • I need my software to be tested in real hardware for every new pull/merge request to my project.

  • I need my software to be tested for every new release or commit of my project.

  • I want my software to be automatically tested in newer versions of the hardware.

  • I have multiple variants of the hardware where my software needs to run, and I want to test them all.

  • I want a hands-free operation of hardware in my development environment, i.e. I don’t want to manually flash images, reboot the DUT, insert usb sticks, manually interact with a bootloader, etc.

  • I want to create a lab where developers can test their software in real hardware.

  • What is it good for?: Integrating your hardware edge devices into your software CI/CD pipeline. Creating a distributed lab for your developers to test their software in real hardware.

  • What is it not good for?: Managing edge devices. Jumpstarter is not a device management tool, it is a testing and development tool.

Where should I go next?

1 - Getting Started

What do you need to get started with Jumpstarter?

This section covers the basics of getting started with jumpstarter

1.1 - Installation

This section contains the installation instructions for the Jumpstarter distributed service, and the python framework.

Installing the distributed service

When building a distributed environment with Jumpstarter, you will need to install the Jumpstarter distributed service. This service is responsible for managing the devices, and the communication between the devices and and clients.

kind create cluster
helm upgrade jumpstarter --install oci://quay.io/jumpstarter-dev/helm/jumpstarter \
    --create-namespace --namespace jumpstarter-lab \
    --set global.baseDomain=devel.jumpstarter.dev \
    --set global.metrics.enabled=true \
    --set jumpstarter-controller.grpc.mode=route \
    --version=0.0.4-24-g1a8a159
kind create cluster
helm upgrade jumpstarter --install oci://quay.io/jumpstarter-dev/helm/jumpstarter \
    --create-namespace --namespace jumpstarter-lab \
    --set global.baseDomain=devel.jumpstarter.dev \
    --set global.metrics.enabled=true # disable if metrics not available \
    --set jumpstarter-controller.grpc.mode=ingress \
    --version=0.0.4-24-g1a8a159

Create namespace

First, we must create a namespace for the Jumpstarter installation. This namespace should be labeled with argocd.argoproj.io/managed-by=to allow ArgoCD to manage the resources in the namespace.
In this case, using the default openshift-gitops ArgoCD deployment, the command would be:
kubectl create namespace jumpstarter-lab
kubectl label namespace jumpstarter-lab argocd.argoproj.io/managed-by=openshift-gitops

Application

jumpstarter-controller.controllerSecret and jumpstarter-controller.routerSecret are secrets that are used to secure the authentication between clients and the jumpstarter elements. These secrets should be unique and not shared between installations. Helm installation can auto-generate values for these, but with ArgoCD such mechanism doesn't work. You need to manually create these secrets in the namespace where the jumpstarter is installed.
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: jumpstarter
  namespace: openshift-gitops
spec:
  destination:
    name: in-cluster
    namespace: jumpstarter-lab
  project: default
  source:
    chart: jumpstarter
    helm:
      parameters:
      - name: global.baseDomain
        value: devel.jumpstarter.dev
      - name: global.metrics.enabled
        value: "true"
      - name: jumpstarter-controller.controllerSecret
        value: "pick-a-secret-DONT-USE-THIS-DEFAULT"
      - name: jumpstarter-controller.routerSecret
        value: "again-pick-a-secret-DONT-USE-THIS-DEFAULT"
      - name: jumpstarter-controller.grpc.mode
        value: "route"
    repoURL: quay.io/jumpstarter-dev/helm
    targetRevision: "0.0.4-24-g1a8a159"

Note: CRDs

ArgoCD needs to be able to manage the CRDs that Jumpstarter uses. This is done by creating a ClusterRole and ClusterRoleBinding that allows the ArgoCD application controller to manage the CRDs. An alternative to this is to manually create and update the CRDs that jumpstarter uses.
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  annotations:
    argocds.argoproj.io/name: openshift-gitops
    argocds.argoproj.io/namespace: openshift-gitops
  name: openshift-gitops-argocd-appcontroller-crd
rules:
- apiGroups:
  - 'apiextensions.k8s.io'
  resources:
  - 'customresourcedefinitions'
  verbs:
  - '*'
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  annotations:
    argocds.argoproj.io/name: openshift-gitops
    argocds.argoproj.io/namespace: openshift-gitops
  name: openshift-gitops-argocd-appcontroller-crd
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: openshift-gitops-argocd-appcontroller-crd
subjects:
- kind: ServiceAccount
  name: openshift-gitops-argocd-application-controller
  namespace: openshift-gitops
Kind is a tool for running local Kubernetes clusters using Podman or Docker container “nodes”.
kind create cluster
helm upgrade jumpstarter --install oci://quay.io/jumpstarter-dev/helm/jumpstarter \
    --create-namespace --namespace jumpstarter-lab \
    --set global.baseDomain=devel.jumpstarter.dev \
    --set global.metrics.enabled=false \
    --set jumpstarter-controller.grpc.mode=ingress \
    --version=0.0.4-24-g1a8a159

Where can I find help?

Look at the Community page for more information on how to get in touch with the Jumpstarter developers, we have a Matrix channel where we’ll be happy to help you with your installation.

1.2 - Concepts

In this section you can find a more detailed explanation of the concepts used in the Jumpstarter project.

Please refer to the Jumpstarter documentation glossary for details.

2 - Contribution guidelines

If you want to contribute to Jumpstarter you can write a PR to one of our repositories (small changes and bugfixes), if you plan on implementing a new feature or a new driver, we recommend you to contact us first, this project is moving rapidly and we’d love to make it easier for you to contribute.

Get in touch with us via our Community page, we have a weekly meeting as well as a matrix channel.

This contribution guideline is still under development and our community is very new, so we are open to suggestions on how to improve it.