├── README.md ├── outputs.tf ├── backend.tf ├── variables.tf ├── terraform.tfvars ├── provider.tf ├── jenkins-server.tf ├── jenkins-server-script.sh ├── .terraform.lock.hcl └── vpc.tf /README.md: -------------------------------------------------------------------------------- 1 | # JenkinsServer-using-Terraform- -------------------------------------------------------------------------------- /outputs.tf: -------------------------------------------------------------------------------- 1 | output "ec2_public_ip" { 2 | value = aws_instance.myapp-server.public_ip 3 | } 4 | -------------------------------------------------------------------------------- /backend.tf: -------------------------------------------------------------------------------- 1 | terraform { 2 | backend "s3" { 3 | bucket = "arjun-buckett" 4 | region = "us-east-1" 5 | key = "eks/terraform.tfstate" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /variables.tf: -------------------------------------------------------------------------------- 1 | variable "vpc_cidr_block" {} 2 | variable "subnet_cidr_block" {} 3 | variable "avail_zone" {} 4 | variable "env_prefix" {} 5 | variable "instance_type" {} 6 | -------------------------------------------------------------------------------- /terraform.tfvars: -------------------------------------------------------------------------------- 1 | vpc_cidr_block = "10.0.0.0/16" 2 | subnet_cidr_block = "10.0.10.0/24" 3 | avail_zone = "us-east-1a" 4 | env_prefix = "dev" 5 | instance_type = "t2.small" 6 | -------------------------------------------------------------------------------- /provider.tf: -------------------------------------------------------------------------------- 1 | terraform { 2 | required_providers { 3 | aws = { 4 | source = "hashicorp/aws" 5 | version = "4.52.0" 6 | } 7 | } 8 | } 9 | 10 | provider "aws" { 11 | region = "us-east-1" 12 | } 13 | -------------------------------------------------------------------------------- /jenkins-server.tf: -------------------------------------------------------------------------------- 1 | data "aws_ami" "latest-amazon-linux-image" { 2 | most_recent = true 3 | owners = ["amazon"] 4 | filter { 5 | name = "name" 6 | values = ["amzn2-ami-hvm-*-x86_64-gp2"] 7 | } 8 | filter { 9 | name = "virtualization-type" 10 | values = ["hvm"] 11 | } 12 | } 13 | 14 | resource "aws_instance" "myapp-server" { 15 | ami = data.aws_ami.latest-amazon-linux-image.id 16 | instance_type = var.instance_type 17 | key_name = "jenkins-server" 18 | subnet_id = aws_subnet.myapp-subnet-1.id 19 | vpc_security_group_ids = [aws_default_security_group.default-sg.id] 20 | availability_zone = var.avail_zone 21 | associate_public_ip_address = true 22 | user_data = file("jenkins-server-script.sh") 23 | tags = { 24 | Name = "${var.env_prefix}-server" 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /jenkins-server-script.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # install jenkins 4 | sudo yum update –y 5 | sudo wget -O /etc/yum.repos.d/jenkins.repo \ 6 | https://pkg.jenkins.io/redhat-stable/jenkins.repo 7 | sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io-2023.key 8 | sudo yum upgrade 9 | sudo amazon-linux-extras install java-openjdk11 -y 10 | sudo yum install jenkins -y 11 | sudo systemctl enable jenkins 12 | sudo systemctl start jenkins 13 | 14 | 15 | # install git 16 | sudo yum install git -y 17 | 18 | # install terraform 19 | 20 | sudo yum install -y yum-utils 21 | sudo yum-config-manager --add-repo https://rpm.releases.hashicorp.com/AmazonLinux/hashicorp.repo 22 | sudo yum -y install terraform 23 | 24 | # install kubectl 25 | 26 | sudo curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.23.6/bin/linux/amd64/kubectl 27 | sudo chmod +x ./kubectl 28 | sudo mkdir -p $HOME/bin && sudo cp ./kubectl $HOME/bin/kubectl && export PATH=$PATH:$HOME/bin 29 | 30 | -------------------------------------------------------------------------------- /.terraform.lock.hcl: -------------------------------------------------------------------------------- 1 | # This file is maintained automatically by "terraform init". 2 | # Manual edits may be lost in future updates. 3 | 4 | provider "registry.terraform.io/hashicorp/aws" { 5 | version = "4.52.0" 6 | constraints = "4.52.0" 7 | hashes = [ 8 | "h1:5jyRee5bTD77EwiNdoBACpUYBgdTYkdl+Dl1h1yA2cg=", 9 | "zh:00c865de3a0e7643f4e2e5c8d4ba91eee94a46d41090eb134baca6b58c107172", 10 | "zh:1430682e26eba25d8ace19fa780361187f474153e455545235b4fe30637fdcc2", 11 | "zh:1b9a4e5c889bd2022bd59fb924dc78e189f1b7a4fd718fcacda0f0a4cb74d6eb", 12 | "zh:2485260141608f1d386d0f68934092bbf68a27d96f0d83c73222d0382aee02f5", 13 | "zh:2fe67ee94e2df7dabee7e474356f8e907e7c8011533f9d71df8702d59f9060b2", 14 | "zh:37babd1b7ff96ff1f42aa56d7575cacabda6f9f460ff651d70662bfd90076341", 15 | "zh:54aa8d39f22ecab6613169f49d37d2ccfaf417e59dd7a8c8fc6bf92600c3384f", 16 | "zh:5bf4a84b962a8d2da8f4ccf2a7de56fb6c7a1f566e8393b563977fc7872a8740", 17 | "zh:8cb4a51f209a3cc497e53f09188c15c6675697587fe2ea14a6c7fff10c8c8476", 18 | "zh:91f6bdcbb1e36471140982e9048b7ced437d3290b2cc21079e5429cc84fed2fd", 19 | "zh:9b12af85486a96aedd8d7984b0ff811a4b42e3d88dad1a3fb4c0b580d04fa425", 20 | "zh:9f8c01c3f677bc64ddefa41e59c6fc98860c11875d7f148af55969d3e3847f77", 21 | "zh:b6b4fc0bd6f3c0adcd9531da3ccf8c25787ccd6ccc568f13ebbff1336d71a9e1", 22 | "zh:d52a428bd92cc319088685ecac63b9f7d12d4cd6725604edb20d0c4f37a9936e", 23 | "zh:e20252a851a0d38548a3c01a006bfc59ee1fc84217bf9eb95b22724769601b2b", 24 | ] 25 | } 26 | -------------------------------------------------------------------------------- /vpc.tf: -------------------------------------------------------------------------------- 1 | resource "aws_vpc" "myapp-vpc" { 2 | cidr_block = var.vpc_cidr_block 3 | tags = { 4 | Name = "${var.env_prefix}-vpc" 5 | } 6 | } 7 | 8 | resource "aws_subnet" "myapp-subnet-1" { 9 | vpc_id = aws_vpc.myapp-vpc.id 10 | cidr_block = var.subnet_cidr_block 11 | availability_zone = var.avail_zone 12 | tags = { 13 | Name = "${var.env_prefix}-subnet-1" 14 | } 15 | } 16 | 17 | resource "aws_internet_gateway" "myapp-igw" { 18 | vpc_id = aws_vpc.myapp-vpc.id 19 | tags = { 20 | Name = "${var.env_prefix}-igw" 21 | } 22 | } 23 | 24 | resource "aws_default_route_table" "main-rtb" { 25 | default_route_table_id = aws_vpc.myapp-vpc.default_route_table_id 26 | route { 27 | cidr_block = "0.0.0.0/0" 28 | gateway_id = aws_internet_gateway.myapp-igw.id 29 | } 30 | tags = { 31 | Name = "${var.env_prefix}-main-rtb" 32 | } 33 | } 34 | 35 | resource "aws_default_security_group" "default-sg" { 36 | vpc_id = aws_vpc.myapp-vpc.id 37 | ingress { 38 | from_port = 22 39 | to_port = 22 40 | protocol = "tcp" 41 | cidr_blocks = ["0.0.0.0/0"] 42 | } 43 | ingress { 44 | from_port = 8080 45 | to_port = 8080 46 | protocol = "tcp" 47 | cidr_blocks = ["0.0.0.0/0"] 48 | } 49 | egress { 50 | from_port = 0 51 | to_port = 0 52 | protocol = "-1" 53 | cidr_blocks = ["0.0.0.0/0"] 54 | } 55 | tags = { 56 | Name = "${var.env_prefix}-default-sg" 57 | } 58 | } 59 | --------------------------------------------------------------------------------