Dev./Github Actions

[Cloud] CD: Github Actions - 환경변수, docker-compose

Ivan'show 2023. 8. 21.
728x90
반응형

workflow 내 환경변수 설정 및 docker-compose.prod.yml 수정

  • repository 가 sercret 에 있던걸 variables 로 변경

https://docs.github.com/en/actions/learn-github-actions/variables#using-the-env-context-to-access-environment-variable-values

 

name: CD using Docker Image

on:
    push:
        branches:
            -
                main

env: # 자주 사용하는 부분은 묶어서 사용할 수 있다.
    IMAGE_TAG: ${{ vars.NCP_CONTAINER_REGISTRY }}/lion-app:latest

jobs:
    build_push_to_ncp:
        name: push to NCP container registry
        runs-on: ubuntu-latest
        steps:
            # checkout to the branch and get the codes
            - name: Checkout code
              uses: actions/checkout@v3

            # buildx - support amd64, arm64
            - name: Set up Docker buildx
              uses: docker/setup-buildx-action@v2
            
            # NCP Login
            - name: Login to NCR
              uses: docker/login-action@v2
              with:
                # registry: where to login
                registry: ${{ vars.NCP_CONTAINER_REGISTRY }}
                username: ${{ secrets.NCP_ACCESS_KEY }}
                password: ${{ secrets.NCP_SECRET_KEY }}
            
            - name: Build and Export
              uses: docker/build-push-action@v4
              with:
                context: lion_app # location where image will be built
                push: true # This indicates push event
                tags: ${{ env.IMAGE_TAG }}
  
    pull_from_ncp:
        name: Connect to Server via SSH and pull from NCP
        needs: build_push_to_ncp
        runs-on: ubuntu-latest
        steps:
            - name: git pull via SSH
              uses: appleboy/ssh-action@v1.0.0
              with:
                host: ${{ secrets.HOST }}
                username: ${{ secrets.USERNAME }}
                password: ${{ secrets.PASSWORD }}
                script: | # while actions is running, please use options !
                    cd dev_django_app
                    git pull
                    echo "${{ secrets.NCP_SECRET_KEY }}" | dockers login ${{ vars.NCP_CONTAINER_REGISTRY }} --username ${{ secrets.NCP_ACCESS_KEY }} --password-stdin
                    docker pull ${{ env.IMAGE_TAG }}
                    docker-compose -f docker-compose.prod.yml up --build -d

이제 Deploy 를 github actions 에서 진행하면서 이미지를 새로 만들고 ncp 를 통해서 가져와서 실행하기 때문에 docker-compose.prod.yml 파일에서 이미지를 가져오는 작업을 없애줘야 한다.

lion-app:
    # depends_on:
    #   - db
    container_name: lion-app-dc
    build:
      context: lion_app
      dockerfile: Dockerfile # 사용할 도커 파일의 이름
    image: likelion-cr-mh.kr.ncr.ntruss.com/lion-app
    ports:
      - "8000:8000" # 앞쪽이 호스트 시스템의 포트 : 뒤쬑이 컨테이너의 포트
    volumes:
      - ~/.aws:/root/.aws:ro # read only 
      # - ./lion_app:/app # docker 이미지를 github actions 에서 가져오게 되는데,
      # 위 코드를 실행하면 최신 이미지를 이전 이미지 파일이 덮어 쓰게 되니 삭제해 준다.
      - staticfiles:/var/www/html/static
    command:
      - "/start"
    env_file:
      - ./.envs/prod/django
      - ./.envs/prod/db
      - ./.envs/prod/server
    environment:
      - AWS_SECRET_NAME=like/lion/prod

 

  • docker 컨테이너 독립

k8s 를 사용하게되면 컨테이너를 각각 띄워야 하기 때문에 docker-compose 가 아닌 개별 도커로 컨테이너를 띄워야 한다.

  • docker-compose 실행문을 주석처리
  • docker build 커맨드로 변경
script: | # while actions is running, please use options !
    cd dev_django_app
    git pull
    echo "${{ secrets.NCP_SECRET_KEY }}" | dockers login ${{ vars.NCP_CONTAINER_REGISTRY }} --username ${{ secrets.NCP_ACCESS_KEY }} --password-stdin
    docker pull ${{ env.IMAGE_TAG }}
    # docker-compose -f docker-compose.prod.yml up --build -d
    docker stop lion-app-dc && docker rm lion-app-dc
    docker run -p 8000:8000 -d \\
    -v ~/.aws:/root/.aws:ro \\
    --env-file .envs/prod/django --env-file .envs/prod/db --env-file .envs/prod/server \\
    --name lion-app-dc \\
    ${{ env.IMAGE_TAG }} \\
    /start

 

728x90
반응형

댓글