Add comprehensive README and update module documentation
This commit is contained in:
commit
ddfb8888d5
127
README.md
Normal file
127
README.md
Normal file
@ -0,0 +1,127 @@
|
|||||||
|
# Terraform AWS Jenkins Module
|
||||||
|
|
||||||
|
## Overview
|
||||||
|
|
||||||
|
The `terraform-aws-jenkins` module provisions a Jenkins CI/CD infrastructure on AWS with auto-scaling capabilities, load balancing, and persistent storage support.
|
||||||
|
|
||||||
|
⚠️ **WARNING**: This module is currently in an incomplete state and requires additional development before production use.
|
||||||
|
|
||||||
|
## Intended Features
|
||||||
|
|
||||||
|
- Jenkins master server on EC2
|
||||||
|
- Auto Scaling Group for high availability
|
||||||
|
- Elastic Load Balancer for traffic distribution
|
||||||
|
- Persistent EBS volume for Jenkins data
|
||||||
|
- SSL/TLS support via ACM certificates
|
||||||
|
- Placement group for optimized network performance
|
||||||
|
|
||||||
|
## Current Status
|
||||||
|
|
||||||
|
### Known Issues
|
||||||
|
|
||||||
|
This module contains several implementation issues that need to be resolved:
|
||||||
|
|
||||||
|
1. **Syntax Errors**:
|
||||||
|
- Incorrect variable interpolation syntax
|
||||||
|
- Malformed resource references
|
||||||
|
|
||||||
|
2. **Missing Resources**:
|
||||||
|
- Placement group resource not defined
|
||||||
|
- Launch configuration resource not defined
|
||||||
|
- Subnet resources referenced but not created
|
||||||
|
- Security group configuration missing
|
||||||
|
|
||||||
|
3. **Missing Outputs**:
|
||||||
|
- No outputs.tf file
|
||||||
|
- Load Balancer DNS, Auto Scaling Group details not exposed
|
||||||
|
|
||||||
|
4. **Hardcoded Values**:
|
||||||
|
- Environment-specific values embedded (region, AMI ID, volume ID)
|
||||||
|
- Domain-specific Jenkins URL
|
||||||
|
|
||||||
|
### Resources (Partial Implementation)
|
||||||
|
|
||||||
|
The module attempts to create:
|
||||||
|
|
||||||
|
- **AWS Auto Scaling Group** - Single instance configuration
|
||||||
|
- **AWS Placement Group** (referenced, not defined)
|
||||||
|
- **AWS Launch Configuration** (referenced, not defined)
|
||||||
|
- **AWS Elastic Load Balancer** (implied by health check)
|
||||||
|
- **AWS EBS Volume** (referenced, not created)
|
||||||
|
|
||||||
|
## Variables
|
||||||
|
|
||||||
|
| Variable | Type | Default | Description |
|
||||||
|
|----------|------|---------|-------------|
|
||||||
|
| `project` | string | Required | Project name |
|
||||||
|
| `env` | string | Required | Environment/Stage identifier |
|
||||||
|
| `jenkins_version` | string | `""` | Version of Jenkins to install |
|
||||||
|
| `jenkins_url` | string | `stg-jenkins.build.edubase.malmberg.nl` | Jenkins URL |
|
||||||
|
| `loadbalancer_name` | string | `stg-jenkins` | ELB name |
|
||||||
|
| `loadbalancer_certificate` | string | `arn:aws:acm:...` | ACM certificate ARN for HTTPS |
|
||||||
|
| `ami_id` | string | `ami-03a779dec4508895a` | AMI ID for Jenkins instance |
|
||||||
|
| `instance_type` | string | `c5.xlarge` | EC2 instance type |
|
||||||
|
| `persistent_volume_id` | string | `vol-03dde8c1fabe3de46` | EBS volume ID for persistence |
|
||||||
|
|
||||||
|
## Prerequisites
|
||||||
|
|
||||||
|
- Existing VPC with subnets
|
||||||
|
- Pre-existing ACM SSL certificate
|
||||||
|
- Pre-existing EBS volume for persistent storage
|
||||||
|
- AMI with Jenkins pre-installed or provisioning script
|
||||||
|
- Route53 DNS configuration
|
||||||
|
|
||||||
|
## Development Roadmap
|
||||||
|
|
||||||
|
Before this module can be used in production:
|
||||||
|
|
||||||
|
1. Fix syntax errors and variable interpolation
|
||||||
|
2. Define missing resources (placement group, launch configuration)
|
||||||
|
3. Implement security groups
|
||||||
|
4. Create outputs.tf with essential values
|
||||||
|
5. Parameterize hardcoded values
|
||||||
|
6. Add IAM role configuration
|
||||||
|
7. Implement proper error handling
|
||||||
|
8. Add comprehensive examples
|
||||||
|
9. Write integration tests
|
||||||
|
|
||||||
|
## Intended Usage Pattern
|
||||||
|
|
||||||
|
```hcl
|
||||||
|
# Example (NOT WORKING - for reference only)
|
||||||
|
module "jenkins" {
|
||||||
|
source = "path/to/terraform-aws-jenkins"
|
||||||
|
|
||||||
|
project = "myproject"
|
||||||
|
env = "staging"
|
||||||
|
jenkins_version = "2.361.1"
|
||||||
|
jenkins_url = "jenkins.example.com"
|
||||||
|
loadbalancer_name = "jenkins-lb"
|
||||||
|
loadbalancer_certificate = "arn:aws:acm:region:account:certificate/..."
|
||||||
|
ami_id = "ami-xxxxxxxxx"
|
||||||
|
instance_type = "c5.xlarge"
|
||||||
|
persistent_volume_id = "vol-xxxxxxxxx"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Contributing
|
||||||
|
|
||||||
|
Contributions to complete this module are welcome. Priority areas:
|
||||||
|
|
||||||
|
- Fix existing syntax errors
|
||||||
|
- Complete resource definitions
|
||||||
|
- Add comprehensive documentation
|
||||||
|
- Implement security best practices
|
||||||
|
- Add examples and tests
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
See project license file.
|
||||||
|
|
||||||
|
## Authors
|
||||||
|
|
||||||
|
Maintained by WebBuildYourCloud team.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Note**: Do not use this module in production environments until the known issues have been resolved.
|
||||||
12
main.tf
Executable file
12
main.tf
Executable file
@ -0,0 +1,12 @@
|
|||||||
|
resource "aws_autoscaling_group" "jenkins_autoscaling_group" {
|
||||||
|
name = ""
|
||||||
|
max_size = 1
|
||||||
|
min_size = 1
|
||||||
|
health_check_grace_period = 300
|
||||||
|
health_check_type = "ELB"
|
||||||
|
desired_capacity = 1
|
||||||
|
force_delete = true
|
||||||
|
placement_group = "aws_placement_group.jenkins-${env}.id"
|
||||||
|
launch_configuration = "aws_launch_configuration.jenkins.jenkins-${env}"
|
||||||
|
vpc_zone_identifier = [ "aws_subnet.jenkins1.id, aws_subnet.jenkins2.id, aws_subnet.jenkins3.id" ]
|
||||||
|
}
|
||||||
0
provider.tf
Executable file
0
provider.tf
Executable file
0
terraform.tfvars
Executable file
0
terraform.tfvars
Executable file
51
variables.tf
Executable file
51
variables.tf
Executable file
@ -0,0 +1,51 @@
|
|||||||
|
variable "project" {
|
||||||
|
description = "Project name"
|
||||||
|
type = string
|
||||||
|
}
|
||||||
|
|
||||||
|
variable "env" {
|
||||||
|
description = "Environment/Stage"
|
||||||
|
type = string
|
||||||
|
}
|
||||||
|
|
||||||
|
variable "jenkins_version" {
|
||||||
|
description = "Define the version of Jenkins that needs to be installed"
|
||||||
|
type = string
|
||||||
|
default = ""
|
||||||
|
}
|
||||||
|
|
||||||
|
variable "jenkins_url" {
|
||||||
|
description = "Define the url on which Jenkins should be reachable"
|
||||||
|
type = string
|
||||||
|
default = "stg-jenkins.build.edubase.malmberg.nl"
|
||||||
|
}
|
||||||
|
|
||||||
|
variable "loadbalancer_name" {
|
||||||
|
description = "Define name for the ELB"
|
||||||
|
type = string
|
||||||
|
default = "stg-jenkins"
|
||||||
|
}
|
||||||
|
|
||||||
|
variable "loadbalancer_certificate" {
|
||||||
|
description = "Define certificate for ELB"
|
||||||
|
type = string
|
||||||
|
default = "arn:aws:acm:eu-west-1:439778125761:certificate/07ea8bf6-f5ae-4c65-ae87-921fc29c980f"
|
||||||
|
}
|
||||||
|
|
||||||
|
variable "ami_id" {
|
||||||
|
description = "Define the AMI for the Jenkins master"
|
||||||
|
type = string
|
||||||
|
default = "ami-03a779dec4508895a"
|
||||||
|
}
|
||||||
|
|
||||||
|
variable "instance_type" {
|
||||||
|
description = "EC2 Instance type for the Jenkins master"
|
||||||
|
type = string
|
||||||
|
default = "c5.xlarge"
|
||||||
|
}
|
||||||
|
|
||||||
|
variable "persistent_volume_id" {
|
||||||
|
description = "Define ID of the persistent volume"
|
||||||
|
type = string
|
||||||
|
default = "vol-03dde8c1fabe3de46"
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user