Gitkube Logo


Gitkube is a tool for building and deploying Docker images on Kubernetes using git push.

After a simple initial setup, users can simply keep git push-ing their repos to build and deploy to Kubernetes automatically.



When should I use gitkube?

  1. Ideal for development where you can push your WIP branch to the cluster to test.
  2. Reference implementation for writing git-based automation on your server. Fork this repo and create your own CRD + controller + git remote hook that can do things on the Kubernetes cluster.


Getting started

Gitkube will run on any Kubernetes vendor/distribution AS IS. In case you find any difficulties in the setup, please comment on #33

Install gitkube

Using kubectl
kubectl create -f

#expose gitkubed service
kubectl --namespace kube-system expose deployment gitkubed --type=LoadBalancer --name=gitkubed
Using gitkube CLI (DEPRECATED)
  1. Install Gitkube CLI:
    • Linux/MacOS
      curl | bash
    • Windows (using scoop)
      scoop install gitkube

      Or download the latest release and add it to your PATH.

  2. Use Gitkube CLI to install Gitkube on the cluster:
    gitkube install


Local dev

User should have a git repo with source code and a Dockerfile. User should also create a base K8s deployment for the application.

Setting Remote

A Remote resource consists of 3 parts:

  1. authorizedKeys: List of ssh-keys for authorizing git push.
  2. registry: Details of docker registry where images are pushed post-build.
  3. deployments: Spec for building docker image and updating corresponding K8s deployment.

Here is a typical spec for a Remote:

kind: Remote
  name: sampleremote
  namespace: default

# Insert ssh-keys for allowing users to git push
  - "ssh-rsa your-ssh-public-key"

# Provide registry details:
    url: ""
      secretRef: regsecret                # Name of docker-registry secret

# Define deployment rules
  - name: www                             # Name of K8s deployment which is updated on git push
    - name: www                           # Name of container in the deployment which is built during git push
      path: example/www                   # Docker build context path in the git repo
      dockerfile: example/www/Dockerfile  # Location of Dockerfile for the source code

Deploying application

Once a Remote is created, it gets a git remote URL which you can find in its status spec

$ kubectl get remote sampleremote -o yaml
  remoteUrl: ssh://[email protected]/~/git/default-sampleremote
  remoteUrlDesc: ""

Add the generated remoteUrl in git

$ git remote add sampleremote ssh://[email protected]/~/git/default-sampleremote

And finally, git push

$ git push sampleremote master

More examples

Follow this example repo for more workflows with gitkube.

How it works

Gitkube has three components:

  1. Remote: Custom resource defined by a K8s CRD
  2. gitkube-controller: Controller that manages Remote objects and propogates changes to gitkubed
  3. gitkubed: Git host that builds docker image from the repo and rolls out deployment

High-level architecture



Gitkube is an open source project licensed under Apache License 2.0

Contributions are welcome.

Community and Support


This project has come out of the work at Current maintainers @Tirumarai, @shahidh_k.

Follow @gitkube to stay updated.

Gitkube logo concept and design by Samudra Gupta.