4.3 KiB
4.3 KiB
CI/CD Setup — Forgejo Actions Registry Credentials
Required Configuration
The CI pipeline (.forgejo/workflows/build.yaml) automatically builds and pushes Docker images on each push to main. However, it requires registry credentials to be configured as repository secrets.
Setup Steps
1. Get Registry Credentials
From the homelab setup:
# Get ci-bot token (or use your personal access token)
kubectl get secret -n poimen $(kubectl get secret -n poimen -l app.kubernetes.io/name=ci-bot -o name | head -1) -o jsonpath='{.data.token}' | base64 -d
Or use a personal Forgejo access token:
- URL: https://forgejo.riotpiao.com/user/settings/tokens
- Create token with
write:packagescope
2. Set Repository Secrets
Go to: https://git.riotpiao.com/rock/poimen-memory/settings/secrets
Add two secrets:
REGISTRY_USER:ci-bot(or your username)REGISTRY_TOKEN:<token-from-step-1>
3. Verify Setup
Push a commit and check:
# Via web UI
https://git.riotpiao.com/rock/poimen-memory/actions
# Or check if image exists
docker pull forgejo.riotpiao.com/rock/poimen-memory:latest
How It Works
┌─────────────────┐
│ Push to main │
└────────┬────────┘
│
↓
┌─────────────────────────────────────────┐
│ Forgejo Actions (rust runner) │
│ 1. cargo build --workspace │
│ 2. cargo test --all │
└────────┬────────────────────────────────┘
│
↓ (only if tests pass)
┌─────────────────────────────────────────┐
│ Build Docker Image │
│ docker build -t forgejo.../latest . │
└────────┬────────────────────────────────┘
│
↓
┌─────────────────────────────────────────┐
│ Push to Registry │
│ docker login + push │
│ Uses: REGISTRY_USER + REGISTRY_TOKEN │
└────────┬────────────────────────────────┘
│
↓
┌─────────────────────────────────────────┐
│ ArgoCD Detects Image │
│ Syncs k8s/app/ with new image │
└────────┬────────────────────────────────┘
│
↓
┌─────────────────────────────────────────┐
│ K8s Deployment │
│ Pulls new image, restarts pods │
└─────────────────────────────────────────┘
Troubleshooting
Build Fails During Tests
- Check workflow logs: https://git.riotpiao.com/rock/poimen-memory/actions
- Run locally:
cargo test --all
Image Not Pushing
- Verify
REGISTRY_TOKENsecret is set correctly - Check docker login error in workflow logs
- Ensure token has
write:packagescope
ArgoCD Not Syncing
kubectl get application -n argocd poimen-memory-app -o yaml | grep -A 5 status
Manual Alternative
If CI is not working, you can push manually:
# From homelab machine (has registry access)
cd ~/workplace/Poimen/memory
cargo build --release
docker build -t forgejo.riotpiao.com/rock/poimen-memory:latest .
docker push forgejo.riotpiao.com/rock/poimen-memory:latest
But the goal is zero-touch CI/CD, so set up the secrets once and forget about it.
Status
- ✅ Workflow file:
.forgejo/workflows/build.yaml - ✅ ArgoCD App:
k8s/argocd/memory-app.yaml - ⏳ Required: Set
REGISTRY_USERandREGISTRY_TOKENsecrets - ⏳ Then: Push to main, watch image build and deploy automatically