[CI/CD] GitLab를 이용한 CI/CD 파이프라인 구축해보기 1 - 환경 설정 및 도커이미지 ECR 저장소에 푸시하기

Yu Seong Kim·2024년 10월 23일
0
post-thumbnail

GitLab을 이용한 CI/CD 파이프라인 구축하는 스터디를 하면서 공부한 내용을 정리한 포스팅입니다.
포스팅을 참고 하실 분들은 리눅스 환경이 아니라면 먼저 aws ec2인스턴스를 만들고 따라하시는 걸 추천드립니다. 아니면 리눅스 가상환경을 구축해서 해도 좋습니다. (저는 UTM으로 가상환경으로 한번 더 해볼 생각입니다.)

GitLab이란


CI/CD는 개발부터 배포까지의 과정을 자동화하는 방법론입니다. 이를 실제 환경에서 구현하려면 CI/CD 파이프라인을 실행할 수 있는 “툴”이 필요합니다. GitLab은 CI/CD 파이프라인을 설계, 구축, 실행할 수 있는 기능을 제공하는 도구 중 하나입니다. GitLab을 통해 CI/CD 파이프라인을 자동으로 실행하는 스크립트를 작성할 수 있으며, 이 스크립트를 활용하여 코드 기반으로 파이프라인을 실행하게 됩니다. 소프트웨어 개발 환경에서는 다양한 CI/CD 도구들이 존재합니다. GitHub, GitLab, Argo CD, 그리고 Jenkins가 대표적인 예시입니다. 이들은 모두 CI/CD를 자동화하기 위해 사용되는 툴입니다.

  • 버전관리 및 소프트웨어 개발 라이프사이클을 지원.
  • 개발자, 팀, 기업은 GitLab을 통해 협업 및 소프트웨어 관리.
  • 깃 저장소 제공
  • CI/CD
  • Issue 추적 및 관리

GitLab

GitLab 링크를 들어가서 GitLab 가입을 합니다.

GitLab을 이용한 CI 자동화 간략히 알아보기

전체적인 흐름은 다음과 같습니다.

1. flask 애플리케이션 개발
2. 도커 파일 작성
3. 도커 이미지 생성
4. 도커 이미지 AWS ECR에 푸쉬
5. pull 해서 컨테이너 생성

//////////////////////////

그러나 깃랩을 이용하여 이 과정을 자동화 하여 배포하도록 만들예정입니다.

📕 GitLab 환경 설정 및 프로젝트 설정

Group 만들기

  1. GitLab에서 Group을 만듭니다.

    그룹 이름을 지정합니다.

    생성 누르면 아래와같이 만들어진 그룹을 확인할 수 있습니다.

Project 만들기

그룹 우측 상단 New Project를 누르고, 프로젝트를 만듭니다.

저는 test-application이라는 이름으로 만들었습니다.

flask 어플리케이션, 도커 이미지 생성

우분투 서버에 클론

깃 랩을 클론해서 test-application안에 app.py 간단한 파이썬 플라스크 파일을 만들어서 테스트를 진행할 예정입니다.

지난번에 포스팅한 vsCode를 이용한 원격으로 우분투 서버에 들어와서 app.py와 필요한 파일들을 생성합니다.
VSCode에서 Ubuntu 서버로 원격 SSH 접속


간단하게 app.py를 만들어 주었습니다.

우분투 서버에서 app.py 실행해보기

requirements.txt 파일 만들어서 flask 설치해주셔야합니다.

app.py이 잘 실행되는 것을 확인했습니다.

이제 도커 파일을 만들어서 빌드해보도록 하겠습니다. 간단하게 도커파일을 작성합니다.

도커 빌드 및 이미지 run

빌드 완료

이미지 run 완료

📕 Docker Image 저장소 만들기(ECR)

  • aws검색창에 Elastic Container Registry를 검색하여 리포지토리를 생성합니다.

    이렇게 리포지토리가 만들어진 것을 확인합니다.

    리포지토리를 눌러서 푸시 명령 보기를 누르면 4가지의 명령어들을 볼 수 있는데 이 명령어 들을 카피 해서 사용하면 됩니다.

    단 ! ECR은 회사의 중요한 정보를 가지고 있는 자산 입니다. 그래서 아무나 접근할 수 없도록 접근 권한을 설정합니다. IAM을 이용해서 권한 설정을 합니다.

  1. IAM 사용자를 만든 후 테스트용 이기 때문에 모든 리소스에 대한 루트 권한을 부여하는 AdministratorAccess를 추가합니다.
  2. 엑세스 키를 만듭니다.

    액세스 키를 만들고, AWS CLI가 AWS 서비스에 접근할 수 있는 자격 증명을 설정을 합니다.
  3. 위에서 설명한 푸시 명령 보기의 4개의 명령어들을 수행해줍니다.
    <1번째 명령어> :
  • 이 명령어는 AWS Elastic Container Registry(ECR)에 Docker 클라이언트를 인증하기 위한 명령입니다.
  • aws ecr get-login-password --region ap-northeast-2: AWS CLI를 사용하여 지정된 리전(ap-northeast-2)에서 ECR에 로그인할 수 있는 토큰(패스워드)을 얻습니다.
  • docker login --username AWS --password-stdin: 앞서 얻은 토큰을 사용하여 Docker 클라이언트가 ECR에 인증됩니다. AWS는 사용자 이름 대신 사용되며, --password-stdin 옵션은 토큰을 표준 입력으로 전달합니다.
    <2번째 명령어>
  • Dockerfile을 사용해 Docker 이미지를 빌드하는 명령입니다.
    <3번째 명령어>
  • 로컬에 빌드한 이미지를 AWS ECR에 푸시하기 전에, 해당 이미지에 AWS ECR 리포지토리 경로와 태그를 붙이는 과정입니다.
    <4번째 명령어>
  • 태그가 지정된 이미지를 AWS ECR에 업로드(푸시)합니다

이렇게 4가지의 명령어들을 수행하면 아래와 같이 푸쉬된 이미지를 확인할 수 있습니다.

그렇다면 저장소에 있는 이미지를 가져와서 잘 실행되는지 테스트를 해보겠습니다.

저장소에 푸시한 이미지 테스트

테스트를 하기 전 방금 올린 도커 image를 삭제하고 테스트 해보겠습니다.
156764cd9517이라는 이미지를 삭제하겠습니다.

docker rmi 156764cd9517 -f 

그리고 나서 위 사진에서 URL를 복사해서 저장된 이미지를 실행해보겠습니다.

docker run --name ecr-test -p 5000:5000 <복사한 URL>

테스트 어플리케이션이 잘 나오는 것을 확인할 수 있습니다.

ecr-test로 컨테이너가 실행됩니다.

결론

이렇게 테스트 프로젝트를 만들어서 깃랩에 푸쉬하고, 도커파일을 만들어 ECR 저장소에 푸시까지 해보았습니다. 정말 개발 분야에서 느끼는 건 하나의 목표, 똑같은 결과를 만들기 위해서 정말 여러가지 방법이 있구나 라는 것을 또 한번 느끼는 공부가 되었습니다. 깃랩과 깃랩 러너를 이용한 자동화까지 하면 포스팅이 길어질 것 같아서 나눠서 포스팅을 하도록 하겠습니다.

profile
Development Record Page

0개의 댓글