diff --git a/Terraform/module.tf b/Terraform/module.tf index 535b7c9..1d21c01 100644 --- a/Terraform/module.tf +++ b/Terraform/module.tf @@ -151,6 +151,7 @@ module "gitfolio_alb" { backend_resume_id = module.gitfolio_back[1].instance_id backend_notification_id = module.gitfolio_back[2].instance_id k8s_id = null #module.gitfolio_k8s[0].instance_id + jenkins_id = module.gitfolio_cicd[0].jenkins_instance_id route53_domain = var.route53_domain lb_type = var.lb_type diff --git a/Terraform/module/LB/alb.tf b/Terraform/module/LB/alb.tf index eeb1069..b19a4b4 100644 --- a/Terraform/module/LB/alb.tf +++ b/Terraform/module/LB/alb.tf @@ -50,6 +50,14 @@ resource "aws_security_group" "alb" { cidr_blocks = [var.any_ip] } + ingress { + description = "Jenkins" + from_port = 8080 + to_port = 8080 + protocol = "tcp" + cidr_blocks = [var.any_ip] + } + egress { from_port = 0 to_port = 0 diff --git a/Terraform/module/LB/jenkins.tf b/Terraform/module/LB/jenkins.tf new file mode 100644 index 0000000..0145bf9 --- /dev/null +++ b/Terraform/module/LB/jenkins.tf @@ -0,0 +1,53 @@ +resource "aws_lb_listener_rule" "jenkins" { + listener_arn = aws_lb_listener.https.arn + priority = 50000 // 다른 서비스들과 겹치지 않는 우선순위 사용 + + action { + type = "forward" + target_group_arn = aws_lb_target_group.jenkins.arn + } + + condition { + path_pattern { + values = ["/jenkins", "/jenkins/*"] // /jenkins 하위의 모든 경로를 Jenkins로 라우팅 + } + } + + condition { + host_header { + values = ["dev.gitfolio.site"] + } + } + + tags = { + Name = "Gitfolio Jenkins routing" + } +} + +resource "aws_lb_target_group" "jenkins" { + name = "gitfolio-jenkins-tg" + port = 8080 // Jenkins의 기본 포트 + protocol = var.target_protocol + vpc_id = var.vpc_id + + health_check { + enabled = true + healthy_threshold = var.health_threshold + interval = var.health_interval + matcher = "200,302,403" // Jenkins는 로그인 페이지로 리다이렉트할 수 있으므로 302도 허용 + path = "/jenkins/login" + port = var.health_port + protocol = var.health_protocol + timeout = var.health_timeout + unhealthy_threshold = var.health_unthreshold + } + + tags = { + Name = "Gitfolio lb jenkins target group" + } +} + +resource "aws_lb_target_group_attachment" "jenkins" { + target_group_arn = aws_lb_target_group.jenkins.arn + target_id = var.jenkins_id // Jenkins 인스턴스 ID +} \ No newline at end of file diff --git a/Terraform/module/LB/variable.tf b/Terraform/module/LB/variable.tf index 588fe0a..78c24cd 100644 --- a/Terraform/module/LB/variable.tf +++ b/Terraform/module/LB/variable.tf @@ -121,4 +121,9 @@ variable "redis_id" { variable "k8s_id" { description = "ID of k8s master instance" type = string +} +# 젠킨스용 +variable "jenkins_id" { + description = "ID of k8s jenkins_instance_id instance" + type = string } \ No newline at end of file diff --git a/Terraform/module/node/cicd/jenkins-init.sh b/Terraform/module/node/cicd/jenkins-init.sh new file mode 100644 index 0000000..1f15752 --- /dev/null +++ b/Terraform/module/node/cicd/jenkins-init.sh @@ -0,0 +1,14 @@ +# Java 설치 (Jenkins 필요조건) +sudo yum update -y +sudo yum install java-17-amazon-corretto -y + +# Jenkins 리포지토리 설정 +sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo +sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io-2023.key + +# Jenkins 설치 +sudo yum install jenkins -y + +# Jenkins 서비스 시작 +sudo systemctl start jenkins +sudo systemctl enable jenkins \ No newline at end of file diff --git a/Terraform/module/node/cicd/output.tf b/Terraform/module/node/cicd/output.tf index 5f86b5f..7a33eb5 100644 --- a/Terraform/module/node/cicd/output.tf +++ b/Terraform/module/node/cicd/output.tf @@ -1,4 +1,4 @@ -output "instance_id" { - description = "ID of the instance" +output "jenkins_instance_id" { + description = "The ID of the Jenkins EC2 instance" value = aws_instance.jenkins.id } \ No newline at end of file