[Docker]Github Action CI 구축 실습

Uk-Jake·2024년 10월 21일

Docker

목록 보기
9/11
post-thumbnail

Github을 이용해서 CI/CD 구축하기

1. Django 애플리케이션 생성 및 테스트

  1. 가상 환경 생성 : python3 -m veny [가상환경 이름]

  2. 가상환경 활성화 : source [가상환경이름]/bin/activate

    • 가상환경을 활성화 시키면 command line 맨 앞에 (가상환경이름)이 활성화 됩니다.
    • 가상환경 비활성화 : deactivate
  3. Django API Server를 만들기 위한 패키지 설치

    • pip install django
    • pip install djangorestframework
  4. 프로젝트 생성

    • django-admin startproject apiserver

  5. setting.py 수정

    # 허용 포트 설정
    ALLOWED_HOSTS = ['*']
    
    #사용할 Application 등록
    INSTALLED_APPS = [
        'django.contrib.admin',
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.messages',
        'django.contrib.staticfiles',
        'apiserver',
        'rest_framework'
    ]
    
    #사용할 시간대 설정
    TIME_ZONE = 'Asia/Seoul'
    
  6. views.py 생성

    from rest_framework.response import Response
    from rest_framework.decorators import api_view
    from rest_framework import status
    
    @api_view(['GET'])
    def index(request):
        data = {"result":"success", "data":[{"id":"itstudy", "name":"adam"}]
        return Response(data, status=status.HTTP_200_OK)
  7. urls.py 수정

    from django.contrib import admin
    from django.urls import path
    # 추가
    from .views import index
    
    urlpatterns = [
        path('admin/', admin.site.urls),
        # 추가
        path('', index)
    ]
    

2. Image 생성 후 컨테이너 실행

  1. requirements.txt 파일 생성

    pip freeze > requirements.txt

  2. Dockerfile 작성

    name: django
    on:
      push:
        branches: [ "main" ]
      pull_request:
        branches: [ "main" ]
    
    jobs:
      build:
        runs-on: ubuntu-latest
    
        steps:
        - name: Checkout
          uses: actions/checkout@v3
    
        - name: Set up Python 3.10
          uses: actions/setup-python@v4
          with:
            python-version: '3.10'
    
        - name: Install dependencies
          run: |
            python -m pip install --upgrade pip
            pip install -r requirements.txt
    
        - name: Login to DockerHub
          uses: docker/login-action@v1
          with:
            username: ${{secrets.DOCKERHUB_USERNAME}}
            password: ${{secrets.DOCKERHUB_TOKEN}}
    
        - name: build and release to DockerHub
          env:
            NAME: ${{secrets.DOCKERHUB_USERNAME}}
            REPO: djangocicd
          run: |
            docker build -t $REPO .
            docker tag $REPO:latest $NAME/$REPO:latest
            docker push $NAME/$REPO:latest
    
  3. Image 빌드

    docker build -t apiserver .

  4. 컨테이너 실행

    docker run -d -p 80:80 --name apiserver apiserver

3. CI 파이프라인 구축 (Github)

  1. Repository 생성

  2. Github Token key 발급

  3. Repository에 Push

4. CI 파이프라인 구축 (Dockerhub)

  1. dockerhub - repository 생성

  2. Token 발급

    • Token 발급 시 write권한 추가하기

5. CI 파이프라인 구축 (Github Action)

  1. .github/workflows 디렉토리를 생성

  2. docker-image.yml 파일 작성 (파일이름 상관 없음)

    # 워크플로우 이름 정의
    name: django
    
    # on : 해당 플로우가 언제 실행되는지 정의
    # main branch로 push할 때, main branch로 request할 때
    on:
      # main 브랜치로 push할 때 트리거
      push:
        branches: [ "main" ]
      # main 브랜치로 pull request할 때 트리거
      pull_request:
        branches: [ "main" ]
    
    # 실행시킬 작업들 정의
    jobs:
      build:
        # 최신 버전의 Ubuntu에서 작업 실행
        runs-on: ubuntu-latest
    		
    		# 작업의 순서 정
        steps:
        # 코드 체크아웃 단계
        - name: Checkout
          uses: actions/checkout@v3  # GitHub의 checkout 액션을 사용하여 저장소 클론
    
        # Python 3.10 환경 설정
        - name: Set up Python 3.10
          uses: actions/setup-python@v4  # setup-python 액션 사용
          with:
            python-version: '3.10'  # 사용할 Python 버전 명시
    
        # 의존성 설치 단계
        - name: Install dependencies
          run: |
            python -m pip install --upgrade pip
            pip install -r requirements.txt
    
        # DockerHub 로그인 단계
        - name: Login to DockerHub
          uses: docker/login-action@v1  # DockerHub 로그인 액션 사용
          with:
            username: ${{secrets.DOCKERHUB_USERNAME}}  # GitHub Secrets에 저장된 DockerHub 사용자 이름 사용
            password: ${{secrets.DOCKERHUB_TOKEN}}  # GitHub Secrets에 저장된 DockerHub 비밀번호(토큰) 사용
    
        # Docker 이미지 빌드 및 DockerHub로 푸시
        - name: build and release to DockerHub
          env:
            NAME: ${{secrets.DOCKERHUB_USERNAME}}  # GitHub Secrets에서 가져온 DockerHub 사용자 이름 설정
            REPO: djangocicd  # Docker 이미지의 이름(리포지토리) 설정
          run: |
            docker build -t $REPO .
            docker tag $REPO:latest $NAME/$REPO:latest
            docker push $NAME/$REPO:latest
    
  3. Github에 Secrets and variables 등록

    • new repository secret 버튼을 누른 후 아래 2개 변수 추가
      • DOCKERHUB_USERNAME
      • DOCKERHUB_TOKEN
  4. Git Repository에 변경된 코드 push

    1. git add .
    2. git commit -m “커밋메세지”
    3. git push
  5. Git Action Page 확인

  6. 지정한 Dockerhub에 image 올라갔는지 확인

0개의 댓글