erpnext/Jenkinsfile
epistemophiliac 17c2c5ead8 Add custom Frappe image build with HRMS, Lending, and LMS.
Jenkins builds from apps.json, pushes to Forgejo registry, and archives Coolify image tags; compose installs all apps on first site creation.
2026-06-16 19:10:17 -04:00

93 lines
2.2 KiB
Groovy

// ERPNext → Coolify: validate, build custom image, push to Forgejo registry
pipeline {
agent any
environment {
REGISTRY_IMAGE = 'git.aexoradao.com/epistemophiliac/erpnext'
REGISTRY_HOST = 'git.aexoradao.com'
FRAPPE_BRANCH = 'version-16'
}
options {
timestamps()
disableConcurrentBuilds()
buildDiscarder(logRotator(numToKeepStr: '20'))
}
stages {
stage('Verify') {
steps {
sh '''
echo "=== ERPNext custom image CI ==="
echo "commit: $(git rev-parse --short HEAD)"
echo "branch: ${BRANCH_NAME:-main}"
test -f Jenkinsfile
test -f docker-compose.yml
test -f example.env
test -f apps.json
test -f images/layered/Containerfile
'''
}
}
stage('Production readiness') {
steps {
sh '''
chmod +x scripts/ci/*.sh
bash scripts/ci/ci-readiness.sh .
bash scripts/ci/validate-docker-compose.sh .
'''
}
}
stage('Bootstrap Docker tools') {
steps {
sh 'bash scripts/ci/jenkins-bootstrap.sh'
}
}
stage('Compose validate') {
steps {
sh 'bash scripts/ci/jenkins-compose-validate.sh'
}
}
stage('Build custom image') {
steps {
sh 'bash scripts/ci/jenkins-build-image.sh'
}
}
stage('Push to Forgejo registry') {
steps {
withCredentials([usernamePassword(
credentialsId: 'forgejo-erpnext',
usernameVariable: 'REGISTRY_USER',
passwordVariable: 'REGISTRY_PASSWORD'
)]) {
sh 'bash scripts/ci/jenkins-push-image.sh'
}
}
}
stage('Verify registry pull') {
steps {
sh 'bash scripts/ci/jenkins-verify-image.sh'
}
}
}
post {
success {
archiveArtifacts artifacts: 'dist/*', fingerprint: true, onlyIfSuccessful: true
echo '''
CI passed.
Image: git.aexoradao.com/epistemophiliac/erpnext:main-<sha> (+ :main)
Coolify: set CUSTOM_IMAGE / CUSTOM_TAG from dist/coolify-image.env
'''
}
failure {
echo 'CI failed — image was not published.'
}
}
}