Challenge ·Medium

Ship a Change Through Fleet and a Git Server

Run the continuous delivery loop against a self-hosted Gitea Git server: point Fleet at a repository, then commit and push a manifest change and watch Fleet reconcile it onto the cluster. This is the GitOps contract Rancher Fleet enforces - the cluster follows Git, with no manual kubectl apply.

Continuous delivery with Fleet is a contract: the cluster runs exactly what Git declares, and a commit is what triggers a rollout. In this challenge you run that loop end to end against a Git server you control.

The playground has a self-hosted Gitea server on its own machine (open the Gitea tab, user student, password student). It hosts a student/sample-app repository with manifests/web.yaml, an nginx Deployment set to one replica. You work from the dev-machine workstation.

Step 1: Point Fleet at the Gitea Repository

Create a GitRepo in the fleet-local namespace that points at the Gitea repo. Use the server's IP address 172.16.0.4:3000, not its hostname - Fleet clones from a cluster pod, and cluster DNS does not resolve the gitea machine name.

Hint 1 - the GitRepo

A GitRepo needs repo, branch, and paths. The repo is http://172.16.0.4:3000/student/sample-app, the branch is main, and the path is manifests. Create it in fleet-local so it targets the local cluster.

Step 2: Let Fleet Deploy the App

Fleet clones the repo, builds a bundle, and applies it. The web Deployment should appear.

Hint 2 - nothing deployed

Check kubectl -n fleet-local get gitrepo and get bundles. If the GitRepo shows no commit, the repo URL is likely wrong (must be the IP, not gitea). If the bundle stays NotReady, check the branch (main) and path (manifests).

Step 3: Commit a Change and Watch It Reconcile

Now the real loop. Clone the Gitea repository, change the replica count in manifests/web.yaml, commit, and push. Do not run kubectl scale - the change must come through Git. Fleet will reconcile it.

Hint 3 - push the change, do not scale by hand

Clone with git clone http://student:student@172.16.0.4:3000/student/sample-app.git, edit manifests/web.yaml to set replicas above 1, commit, and git push origin main. Fleet polls Gitea (about every 15 seconds) and reconciles the change. A kubectl scale would satisfy nothing here - the point is that the commit drives the rollout.