반복되는 환경 구축 Jenkins로 자동화하기

Chungeun Choi·2023년 10월 11일
1
post-thumbnail

앞선 ‘반복되는 환경 구축 docker로 간소화하기’ 에 이은 내용으로서 반복적으로 오픈소스 환경을 구축하는 부분을 개선하기위해 Jenkins를 통해 자동화한 내용을 다루고 있습니다 (여담이지만 아델리 펭귄 너무 귀엽네요…)


자동화 내용 소개에 앞서


내용을 설명하기에 앞서 Jenkins를 선택하며 고려했던 점을 적어보려고 합니다

  1. 구축된 컨테이너가 존재하는가?

같은 인프라 환경 위의 여러 가지 형태의 클러스터를 반복적으로 배포하였습니다. 따라서 기존에 생성된 컨테이너가 존재하는지 확인하고 종료하는 프로세스가 필요로 했고 해당 기능을 구현할 수 있어야 했습니다.

→ Jenkins는 pipeline에서 sciprt를 통해 자유로운 배포 프로세스를 정의 할 수 있었습니다. 따라서 해당 문제를 개선하기에 알맞다 판단하였습니다

  1. 인프라 환경을 가능한 쉽게 접근할 수 있는가?

검증하고자 하는 부분이 ‘최적의 인프라 환경 위의 오픈소스 환경 구축’이다 보니 인프라 환경 역시 계속해서 변경되는 부분이 많았습니다. 그중 서버 IP 역시 변경 많이 되었고, 해당 정보의 관리를 지원하는 툴이 필요로 했습니다.

→ jenkins의 plugin과 관리 설정을 통해 연결정보를 지속적으로 갱신하고 관리할 수 있다 판단하였습니다

  1. 기술스택 도입에 어려움이 없는가?

이전 게시글에서 관리 인력이 부족해서 k8s를 도입하지 못했던 점을 고려하여 기술스택에 관리와 도입에 어려움이 없는지 확인이 필요로 하였습니다.

→ 기존에 같은 부서 내에서 다른 팀이 사용하고 있었던지라 기술스택 도입 시 도움을 받을 수 있었고 jenkins 설치와 같은 환경 구성도 이미 진행되어 있던 상태였습니다

Jenkins로 자동화하기


위의 내용과 같이 고려한 내용을 바탕으로 자동화 pipeline을 작성하였습니다.

Elasticsearch

Elasticsearch는 회사에서는 자동화하지 않은 부분이었습니다. 하지만 퇴사 후 이 역시 자동화가 가능할 것이라 판단하여 자동화하도록 파이프라인을 작성해보았습니다.

docker-compose로 정의된 파일을 명령어를 통해 배포하게 됩니다. (docker 관련 내용 링크). 아래와 같이 총 3개의 형태로 배포되어질 수 있습니다

  • Single
  • Master-slave
  • Raft-cluster

따라서 Jenkins pipeline에서도 3개의 버전을 선택할 수 있도록 파이프라인을 구성하였습니다 구성된 파이프라인은 아래의 이미지와 같습니다

  1. 배포하고자 하는 서버에 접속합니다

  2. docker container를 통해 elasticsearch가 배포 되어져있는지 확인합니다

    2.1 실행 중인 컨테이너가 있을 경우 종료합니다

  3. 배포 서버에 git pull을 통해 yaml 파일이 정의되어진 repo를 checkout 합니다

  4. 실행 하고자하는 elasticsearch 형태를 입력 받습니다

  5. 컨테이너를 생성합니다

Airflow

airflow 역시 동일하게 docker-compose로 정의된 파일을 명령어를 통해 배포하게 됩니다. (docker 관련 내용 링크).
대신 airflow의 경우 worflow 개발로 인해 소스코드 배포가 좀 더 빈번하게 이루어지게 됩니다. 이에따라 환경 구축을 확인하는 pipeline 과정과 github 소스코드 배포하는 pipeline과정이 같이 정의되어지게 됩니다.

  1. plugin에 추가한 github repo를 jenkins 서버로 내려받습니다
  2. 환경 구축(docker 관련 파일)의 형상이 변경되었는지 확인합니다
    1. 변경 사항이 있을 경우 ‘4번’ 항목이 종료된 뒤 docker image를 빌드합니다
    2. docker container를 다시 생성합니다 (해당 작업은 component 서버, worker 서버 모두 실행 됩니다)
  3. 배포할 서버에 repository를 내려 받습니다 (airflow-compnent 서버)
  4. 배포할 서버에 repository를 내려 받습니다 (airflow-worker 서버)

마치며


처음으로 반복되는 환경 구축에 직면했을 때, 수동적인 관점에서 벗어나 간소화하고 최적화하기 위한 자동화 도구를 찾아보게 되었습니다. Docker를 통해 환경 구축의 복잡함을 줄였고, 이번에는 Jenkins를 통해 그 환경을 효과적으로 배포하고 관리하는 방법을 찾게 되었습니다.

퇴사 후에도 개인적인 시간을 투자하여 이러한 프로세스를 개선해 보려 노력한 것은 기술적 성장을 위한 목표와, 항상 더 나은 방법을 찾아서 더 효율적인 결과를 내고자 하는 목표 덕분이었던 것 같네요.

한정적인 로컬 개발환경에서 여러 가지 문제를 만나면 해결하는 부분은 여전히 피곤하지만 해결했을 때의 쾌감은 여전히 새롭네요! 읽어주셔서 감사합니다.

추후 데모용으로 서비스를 띄워놓도록 하겠습니다….

profile
소프트웨어 엔지니어 최충은입니다

0개의 댓글

관련 채용 정보