# Jenkins for Cloudron - Build Notes

This document provides instructions for building, testing, and deploying the Jenkins package to Cloudron.

## Prerequisites

- Cloudron server (version 5.4.0 or higher)
- Docker installed on your build machine
- Cloudron CLI tool installed (`npm install -g cloudron`)

## File Structure

```
jenkins-cloudron/
├── CloudronManifest.json     # Package definition
├── Dockerfile                # Docker image build instructions
├── start.sh                  # Initialization script
├── nginx.conf                # NGINX configuration
├── supervisor.conf           # Supervisor configuration for process management
├── logo.png                  # App icon (128x128 PNG)
├── casc_templates/           # Jenkins Configuration as Code templates
│   ├── default.yaml          # Default authentication config
│   ├── ldap.yaml             # LDAP authentication config
│   └── oauth.yaml            # OAuth/OIDC authentication config
```

## Building the Package

1. Create a directory for your package and place all files in the appropriate structure.

2. Download a Jenkins logo (128x128 PNG) and save it as `logo.png`

3. Build the Docker image:
   ```bash
   cloudron build
   ```

4. Test the package locally:
   ```bash
   cloudron install —image cloudron/jenkins
   ```

## Authentication Configuration

The package supports three authentication methods:

1. **Default (Local)**: Uses Jenkins’ built-in user database
2. **LDAP**: Uses Cloudron’s LDAP server for authentication
3. **OAuth/OIDC**: Uses Cloudron’s OAuth service for single sign-on

The authentication method is automatically configured based on the presence of environment variables provided by Cloudron.

## Testing

After installation, test the following:

1. **Basic functionality**:
   - Access Jenkins through your Cloudron dashboard
   - Verify the initial admin password works
   - Create a simple pipeline job

2. **Authentication**:
   - Test LDAP integration by enabling the LDAP addon
   - Test OAuth/OIDC integration by enabling the OAuth addon
   - Verify user permissions are correctly applied

3. **Persistence**:
   - Install plugins through the Jenkins UI
   - Restart the app to verify plugins persist
   - Check that job configurations are maintained

## Troubleshooting

- **Jenkins doesn’t start**: Check logs using `cloudron logs -f`
- **Authentication issues**: Verify the correct addons are enabled and configuration is applied
- **Permission problems**: Check the ownership and permissions of files in `/app/data`

## Updating Jenkins

When a new version of Jenkins is released, update the Dockerfile to pull the latest version and rebuild the package.

## Additional Notes

- The package uses Jenkins Configuration as Code (JCasC) to automate the setup process
- Jenkins runs as the `cloudron` user for proper permissions
- Files in `/app/data/jenkins_home` are persisted across restarts and updates
- Initial admin password is set to ‘adminpass’ for local authentication
- **Java Version**: The package uses `openjdk-17-jdk`, which is a recommended Java version for Jenkins 2.516.1 LTS.
- **Plugin Installation**: Plugins are now installed using `jenkins-plugin-cli` during the Docker build process, which handles dependencies automatically.

## Deployment to Cloudron App Store

If you wish to publish your app to the Cloudron App Store:

1. Update the CloudronManifest.json with your details
2. Test thoroughly on your own Cloudron instance
3. Follow the Cloudron App Publishing guidelines

Happy CI/CD with Jenkins on Cloudron!