2026-03-28 21:49:58 +01:00
2026-03-28 21:49:58 +01:00
2026-03-28 21:49:58 +01:00
2026-03-28 21:49:58 +01:00
2026-03-28 21:49:58 +01:00
2026-03-28 21:49:58 +01:00
2026-03-28 21:49:58 +01:00
2026-02-07 16:23:38 +01:00
2026-03-28 21:49:58 +01:00
2026-03-28 21:49:58 +01:00
2026-03-28 21:49:58 +01:00
2026-03-28 21:49:58 +01:00
2026-03-28 21:49:58 +01:00
2026-03-28 21:49:58 +01:00
2026-03-28 21:49:58 +01:00
2026-03-28 21:49:58 +01:00
2026-03-28 21:49:58 +01:00
2026-02-07 16:23:38 +01:00
2026-03-28 21:49:58 +01:00

Homework Backend - Docker & Jenkins CI/CD Setup

This project includes complete CI/CD setup with Jenkins pipeline and Docker containerization.

🏗️ Build & Deploy

Local Development

  1. Build and run locally:

    # Build the application
    ./build.sh
    
    # Run with Docker Compose
    docker-compose up --build
    
  2. Access the application:

Jenkins Pipeline

The Jenkins pipeline includes the following stages:

  1. Checkout - Clone the repository
  2. Restore Dependencies - Install NuGet packages
  3. Build - Compile the application
  4. Test - Run unit tests
  5. Publish - Create deployment artifacts
  6. Build Docker Image - Create Docker image
  7. Push Docker Image - Push to registry
  8. Deploy to Staging - Deploy to staging environment
  9. Integration Tests - Run tests against staging
  10. Deploy to Production - Manual approval then production deploy

Environment Variables

Set these environment variables for Jenkins:

DOCKER_REGISTRY=your-registry.com
DB_PASSWORD=your-database-password

Docker Registry Credentials

Configure Docker registry credentials in Jenkins:

  • Credential ID: docker-registry-credentials
  • Type: Username with password

📁 File Structure

├── Dockerfile                    # Multi-stage Docker build
├── Jenkinsfile                  # Jenkins pipeline definition
├── docker-compose.yml           # Local development setup
├── docker-compose.staging.yml   # Staging environment
├── docker-compose.prod.yml      # Production environment
├── .dockerignore               # Docker build exclusions
├── build.sh                    # Local build script
├── deploy.sh                   # Deployment script
├── init.sql                    # Database initialization
├── nginx/
│   └── nginx.conf              # Nginx reverse proxy config
└── Homework/
    ├── appsettings.json        # Application configuration
    └── ...                     # Application code

🚀 Deployment Environments

Development

  • Single container setup with PostgreSQL
  • Hot reload enabled
  • Logs mounted to host

Staging

  • Load balanced (2 replicas)
  • Resource limits applied
  • Integration testing environment

Production

  • Load balanced (3 replicas)
  • Nginx reverse proxy with SSL
  • Resource limits and health checks
  • Database persistence

🔧 Configuration

Application Settings

Update Homework/appsettings.json for different environments:

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  },
  "JwtSettings": {
    "Key": "your-jwt-secret-key",
    "Issuer": "your-issuer",
    "Audience": "your-audience"
  },
  "ConnectionStrings": {
    "DefaultConnection": "Host=postgres;Database=homework;Username=homework_user;Password=homework_password"
  }
}

Jenkins Pipeline Customization

Modify the Jenkinsfile to:

  • Change Docker registry URL
  • Add additional test stages
  • Modify deployment targets
  • Add notification channels

🏥 Health Checks

The application includes health check endpoints:

  • /health - Basic health check
  • Container health checks configured in Docker

🔒 Security

  • Non-root user in containers
  • Security headers in Nginx
  • Resource limits applied
  • Secrets management via environment variables

📊 Monitoring

  • Application logs are written to files and console
  • Nginx access logs
  • Docker container logs
  • Health check monitoring

🐛 Troubleshooting

Common Issues

  1. Build fails: Check .NET SDK version in Dockerfile
  2. Database connection: Verify PostgreSQL credentials
  3. Port conflicts: Ensure ports 8080, 5432 are available
  4. Registry push fails: Check Docker registry credentials

Logs

# View application logs
docker-compose logs homework-backend

# View database logs
docker-compose logs postgres

# View all logs
docker-compose logs
Description
Backend service for homework project
Readme MIT 3.7 MiB
Languages
C# 84.6%
Shell 9.8%
Dockerfile 5.6%