Hi,
I’ve created this generic jenkinsfile for deploying Django web application with CICD deployment. I want to expand this further when tests on development server completes successfully deployment and tests should start on QA server as a next step in-line. If tests and deployment are failed on development server, the next step should not be attempted.
pipeline {
agent any
environment {
// Define environment variables
DJANGO_PROJECT_NAME = 'your_project_name'
DJANGO_SETTINGS_MODULE = 'your_project_name.settings'
VENV_PATH = '/path/to/virtualenv'
APP_PATH = '/path/to/your/django/app'
REQUIREMENTS_FILE = 'requirements.txt'
}
stages {
stage('Checkout') {
steps {
// Checkout the source code from your repository
git 'your_repository_url'
}
}
stage('Install Dependencies') {
steps {
// Create a virtual environment and install dependencies
sh "python3 -m venv ${VENV_PATH}"
sh "${VENV_PATH}/bin/pip install -r ${APP_PATH}/${REQUIREMENTS_FILE}"
}
}
stage('Database Migrations') {
steps {
// Apply database migrations
sh "${VENV_PATH}/bin/python ${APP_PATH}/manage.py makemigrations --settings=${DJANGO_SETTINGS_MODULE}"
sh "${VENV_PATH}/bin/python ${APP_PATH}/manage.py migrate --settings=${DJANGO_SETTINGS_MODULE}"
}
}
stage('Run Tests') {
steps {
// Run tests
sh "${VENV_PATH}/bin/python ${APP_PATH}/manage.py test --settings=${DJANGO_SETTINGS_MODULE}"
}
post {
always {
// Archive test reports or any other artifacts
junit '**/test-reports/*.xml'
}
}
}
stage('Collect Static Files') {
steps {
// Collect static files
sh "${VENV_PATH}/bin/python ${APP_PATH}/manage.py collectstatic --settings=${DJANGO_SETTINGS_MODULE} --noinput"
}
}
stage('Deploy') {
steps {
// Add deployment steps here
// For example, copy files to a server, restart services, etc.
}
}
}
post {
success {
echo 'Deployment successful'
// You can add additional steps here, like running notifications.
}
failure {
echo 'Deployment failed. Rolling back..'
// Implement rollback steps if needed
}
}
}
Best Regards,
RK