Airflow Dag CI/CD 구축기 (2)

Pori·2023년 12월 29일
0

Airflow Dag CI/CD

목록 보기
2/2

Custom Airflow image

커스텀 이미지 생성 이유

: 전체적으로 Airflow 동작시에 필요한 기능들이 있는 경우에 매번 설치과정없이 작동하고 싶었기 때문에 사용하게 되었다.

이미지 생성 - Dockerfile

기반 이미지 및 Root 권한 부여

# Dockerfile

FROM apache/airflow:latest
USER root

apt 의존성 설치

# Dockerfile

RUN apt-get update \
  && apt-get install -y --no-install-recommends \
         vim \
  && apt-get autoremove -yqq --purge \
  && apt-get clean \
  && rm -rf /var/lib/apt/lists/*

USER 변경 및 requirements 설치

# Dockerfile

USER airflow
COPY requirements.txt /requirements.txt
RUN pip install --user --upgrade pip
RUN pip install -r /requirements.txt

이미지 빌드 및 푸시

docker build --no-cache -t image_name:tag
docker push image_name:tag

결과

: poriz/airflow_custom이라는 이름으로 docker hub에 이미지를 푸시

참고

Github actions

Workflow 생성

: Docker image를 쉽게 동작하고 푸시하는 Docker image 워크플로를 기반으로 진행하였다.

login step 생성하기

: 로그인 단계를 생성하는 과정이다. steps: 아래에서 진행하며 코드는 다음과 같다.

 steps:
    - uses: actions/checkout@v3
    - name: docker login
      env:
        DOCKER_USER: ${{secrets.DOCKER_USER}}
        DOCKER_PASSWORD: ${{secrets.DOCKER_PASSWORD}}
      run: |
        docker login -u $DOCKER_USER -p $DOCKER_PASSWORD

Build image & push

: repo에 Dockerfile을 올려주어 dockerfile을 기반으로 새 이미지를 구축한다. -> 이미지 변경점이 있다면 Dockerfile을 수정하기.

    - name: Build the Docker image
      run: docker build --tag ${{secrets.DOCKER_USER}}/airflow_custom:latest .

    - name: docker push
      run: docker push ${{secrets.DOCKER_USER}}/airflow_custom:latest

Secrets 생성

: Docker push를 위해서 계정 정보를 입력해야했으나, repo에 바로 올릴 수 없기에 Repository secrets를 사용하였다.

1. repo > settings > Secrets and variables > Actions 접근

2. Repository secrets 생성

: secret name과 value값을 작성해주면 다음과 같이 생성된다.

결과

: repo의 main branch에 변경점이 push, pull_request되면 생성된 Action이 수행되게된다.

마무리

: 이제 local에서 docker hub에 생성된 image를 받아 사용하며, docker-compose를 사용해야하기에 git clone, pull등을 통해 설정파일들을 받아와 사용한다.

한계

: local에서 AIRFLOW_UID 이슈가 존재하였다. local에서 환경변수의 형태로 이를 관리하는 방법을 권장하기에 Dockerfile이나 git에서 .env를 옮길 수는 없었고, UID를 등록하는 sh파일을 작성해 실행을 권장했다.

느낀점

: Docker에 대한 이해도가 좀 더 필요할 것 같다.

  • 단일 컨테이너의 CI/CD 과정을 체험하였을 때에는 큰 무리가 없었으나, compose를 활용하게되면서 각각의 컨테이너를 이미지로 관리해야하는지, 하나의 이미지로 관리해야하는지 알 수 없었고, 이를 Actions에서 어떻게 관리해야할지도 의문이였다.
  • Deploy가 조금 아쉬웠다. 클라우드 서비스와의 연계를 통해서 배포하는 과정도 진행했으면 좋았을 것 같다.

0개의 댓글