Drone handles the continuous integration, it’s integrated with Gitea via webhooks, and kicks off builds on specified branches for every push to a repository. Docs.
Useful features:
-
Repos, auth, and triggers are all managed via Gitea.
-
Each CI step runs in its own isolated container.
-
Successfully built images are published to an internal Harbor registry.
Install Drone
Create an OAuth2 Application in the Gitea settings page.
- http://gitea.home.olirowan.local/user/settings/applications
Complete the form:
- Application Name: drone
- Redirect URI: http://drone.home.olirowan.local/login
Save the resulting Client ID and Client Secret to use in the Helm values.
helm repo add drone https://charts.drone.io
helm repo update
helm install drone drone/drone -f drone/local/values.yaml --namespace drone --create-namespace
Setup a Drone Runner, you may need to install Docker first in this case - for Debian 12, Bookworm
# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
# Add the repository to Apt sources:
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo usermod -aG docker oli
docker run --detach \
--volume=/var/run/docker.sock:/var/run/docker.sock \
--env=DRONE_RPC_PROTO=http \
--env=DRONE_RPC_HOST=drone.home.olirowan.local \
--env=DRONE_RPC_SECRET=f0Xt3EKvabOoJKI35Ml919EG \
--env=DRONE_RUNNER_CAPACITY=2 \
--env=DRONE_RUNNER_NAME=media-runner \
--publish=3000:3000 \
--restart=unless-stopped \
--name=dronerunner \
drone/drone-runner-docker:1
Configure the Harbor, Gitea and MinIO secrets in the Drone UI:
docker_username
docker_password
minio_client
minio_secret
drone_user
drone_pass