Each check runs in its own pipeline stage (readiness, compose, image pull) so Jenkins shows clear pass/fail per section. Co-authored-by: Cursor <cursoragent@cursor.com>
3.2 KiB
Jenkins setup (Forgejo)
Repo: https://git.aexoradao.com/epistemophiliac/erpnext.git
Branch: main
Pipeline file: Jenkinsfile (repo root)
Option A — Simple Pipeline (fastest)
If Multibranch shows an empty folder, use this instead.
- New Item → Pipeline → name
erpnext - Pipeline → Definition: Pipeline script from SCM
- SCM: Git
- Repository URL:
https://git.aexoradao.com/epistemophiliac/erpnext.git - Credentials: Forgejo user + access token
- Branch:
*/main
- Repository URL:
- Script Path:
Jenkinsfile - Save → Build Now
Option B — Multibranch Pipeline
Indexing succeeds but the folder stays empty when Discover branches is missing.
- New Item → Multibranch Pipeline → name
erpnext - Branch Sources → Git
- URL + credentials (same as above)
- Behaviours → Add → Discover branches
- Strategy: All branches (or include
mainvia wildcard filter)
- Strategy: All branches (or include
- Build Configuration
- Mode: by Jenkinsfile
- Script Path:
Jenkinsfile
- Save → Scan Repository Now
You should see a main branch under the folder. Click it → Build Now.
Optional: Forgejo webhook
Install the Gitea plugin in Jenkins, then use Gitea as the branch source (Forgejo-compatible) for automatic scans on push.
Credentials
Manage Jenkins → Credentials → Add
- Kind: Username with password
- Username:
epistemophiliac - Password: Forgejo personal access token (repo read scope)
Pipeline stages
| Stage | What it checks |
|---|---|
| Verify | Jenkinsfile, docker-compose.yml, example.env present |
| Production readiness | ci-readiness.sh + validate-docker-compose.sh (Coolify rules, no secrets tracked) |
| Bootstrap Docker tools | Static docker + docker-compose in .ci-bin/, socket access |
| Compose validate | docker compose config on Coolify-stripped compose (no exclude_from_hc, no host ports) |
| Verify ERPNext image | docker pull frappe/erpnext:<ERPNEXT_VERSION> from example.env |
Post-success: archives dist/docker-compose.coolify.yml (the compose file Coolify actually parses).
This validates the repo before deploy; Coolify deploy is separate (set DB_PASSWORD, SITE_NAME, ADMIN_PASSWORD, domain on frontend:8080).
Troubleshooting
fatal: not in a git directory (branch indexing)
Usually a corrupt Jenkins git cache after changing container user. In the jenkins container terminal (Coolify):
rm -rf /var/jenkins_home/caches/git-*
chown -R jenkins:jenkins /var/jenkins_home
Then Scan Repository Now on the multibranch job.
permission denied on /var/run/docker.sock
Jenkins must be in the host docker group. On the Coolify host:
stat -c '%g' /var/run/docker.sock
Set that number as DOCKER_GID on the jenkins Coolify service (was wrong at 999 on this host — use 991), redeploy Jenkins, rebuild.
Do not run Jenkins as user: 0:0 — it breaks jenkins_home ownership and git caches.
Always use Build Now on main, not Rebuild on old builds
Old rebuilds replay old commits with old Jenkinsfile content.