프로젝트/AWS Fargate in Jenkins

AWS Fargate를 사용해 jenkins master <-> agent를 구성해보자. Info

Hwan2 2023. 4. 1. 22:33
반응형

 

 

 

AWS Fargate를 사용해서 Jenkins를 구축하는 간단한 프로젝트를 진행해 봅니다.

 

목차.

 

AWS Fargate로 Jenkins master <-> agent를 구성했을 때의 장단점은 다음과 같습니다.

 

장점

  • Agent를 관리할 필요가 없다.
  • 여러 곳에서 Build를 해도 Throughput이 발생하지 않는다.
  • 원하는 Docker image를 정의해놓으면 손쉽게 사용할 수 있고, 재사용 성도 증가한다.
    (예를 들어 python을 빌드하는 Docker image를 만들면 다른 사람도 사용할 수 있다.)
  • Build task 단위를 좀 더 나눌 수 있으며, 로그, 실패지점 파악 등이 용이하다.

단점

  • 속도가 느리다. (Docker가 띄워지는 시간이 좀 걸린다.)
  • Fargate이다 보니 제약사항이 생긴다.
  • Maven agent, python agent 등 Docker agent image 버전관리가 안되어 있는 것들이 있어서,
    직접 만들어서 관리해야 한다.
  • 처음 셋팅하는 부분이 어렵다.
  • Fargate 형태이므로 Build 과정 중 docker in docker 과정이 들어갈 수 있다.

 

관리하는 코드들이 작을 땐 굳이 이렇게 할 필요는 없지만,

여러 곳에서 Jenkins를 사용하고, Slave가 3~4개 이상이 된다면 AWS Fargate 구조를 고려해볼만 하다고 생각합니다.

 

Terraform 코드

https://github.com/dnfwlq8054/jenkins_in_fargate

 

GitHub - dnfwlq8054/jenkins_in_fargate: AWS ECS Fargate to set up a Jenkins master and agent structure.

AWS ECS Fargate to set up a Jenkins master and agent structure. - GitHub - dnfwlq8054/jenkins_in_fargate: AWS ECS Fargate to set up a Jenkins master and agent structure.

github.com

 

 

 

Architecture

설명.

AWS Fargate를 사용하기 때문에 파일을 영구히 저장할 AWS EFS가 필요합니다.

Jenkins master <-> agent간 통신을 IP로도 할 수 있지만,

AWS Cloud Map을 사용해 Private DNS를 설정한 후 Domain name을 사용해 통신하도록 합니다.

 

IaC

Terraform으로 구성합니다.

완성본은 Github에 올립니다.

 

협업과정이 아니기 때문에 Terraform lock은 사용하지 않습니다.

준비물은 AWS IAM계정에서 Architecture에 나와있는 AWS Resource들을 배포할 수 있는 권한만 있으면 됩니다.

(저는 귀찮아서 배포 계정에는 AdministratorAccess 권한을 줬습니다.)

 

혹시나 Cloudformation으로 작업할 분이 계시다면 아래 링크를 참고해 주세요.

https://jenkinshero.com/jenkins-jobs-in-aws-ecs-with-slave-agents/

 

Running Jenkins jobs in AWS ECS with slave agents

Learn how to run Jenkins jobs in slave Fargate containers in AWS ECS.

jenkinshero.com

 

Terraform 구조는 다음과 같습니다.

`-- terraform
    |-- main.tf
    |-- resources
    |   |-- cloud_map
    |   |   |-- main.tf
    |   |   |-- outputs.tf
    |   |   `-- variables.tf
    |   |-- ecs
    |   |   |-- main.tf
    |   |   `-- variables.tf
    |   |-- efs
    |   |   |-- main.tf
    |   |   |-- outputs.tf
    |   |   `-- variables.tf
    |   |-- elb
    |   |   |-- main.tf
    |   |   |-- outputs.tf
    |   |   `-- variables.tf
    |   |-- iam
    |   |   |-- main.tf
    |   |   |-- outputs.tf
    |   |   `-- variables.tf
    |   |-- sg
    |   |   |-- main.tf
    |   |   |-- outputs.tf
    |   |   `-- variables.tf
    |   `-- vpc
    |       |-- main.tf
    |       |-- outputs.tf
    |       `-- variables.tf

 

 

Part 별로 정리한 글입니다. 

Part 1. Jenkins Network 구축

 

https://hwan-shell.tistory.com/376

 

AWS Fargate를 사용해 jenkins master <-> agent를 구성해보자. Part 1.

Info. https://hwan-shell.tistory.com/375 AWS Fargate를 사용해 jenkins master agent를 구성해보자. Info AWS Fargate를 사용해서 Jenkins를 구축하는 간단한 프로젝트를 진행해 봅니다. AWS Fargate로 Jenkins master agent를 구성

hwan-shell.tistory.com

 

 

Part 2. Jenkins AWS ECS Fargate 구축

https://hwan-shell.tistory.com/377

 

AWS Fargate를 사용해 jenkins master <-> agent를 구성해보자. Part 2.

이번장에선 AWS Fargate, Cloud Map, EFS 셋팅을 해보겠습니다. 우선 Fargate에서 사용할 Cloud Map를 구현합니다. 1. AWS Cloud Map # Define Jenkins Cloud Map resource "aws_service_discovery_private_dns_namespace" "jenkins" { name = "lo

hwan-shell.tistory.com

 

반응형