배포 GitHub Actions 개선하기
· 약 4분
현재 회사에서는 GitHub Actions를 통해 Docker 이미지를 만들고 배포하고 있습니다.
하지만 제가 합류하기 이전에 사용하고 있었던 배포 워크플로우에는 약간의 문제가 있었는데요, 이를 개선한 후기를 적어 보려 합니다.
배경
현재 저희 백엔드 소스 코드는 단일 저장소에 여러 개의 폴더가 있고, 각각의 폴더가 Kubernetes 상에서 독립된 서버로 구동되도록 나뉘어 있습니다. 이들을 독립적으로 배포하기 위해, 기존에는 코드 변경이 일어났을 때 경로를 감지해서 관련 파일이 변경된 경우에만 각각의 워크플로우가 작동되도록 설정되어 있었습니다.
예를 들면, 이러한 파일이 여러 개 있는 것 이죠.
name: foo app Actions
on:
push:
branches:
# ...
paths:
- 'apps/foo/**/*'
- 'common/**/*'
jobs:
build-and-push-image:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
# ...
(Build... Push...)
- name: Checkout manifest repository
# ...
- name: Change deployment.yaml
# ...
- name: Pushes to the repository
# ...
이렇게 사용할 경우 코드 변경에 영향을 받는 서버만 선택적으로 빌드가 가능하고, 각각의 과정이 병렬 실행이 되는 장점이 있습니다. 하지만 워크플로우의 마지막 부분에 이미지 태그 업데이트를 위해 Git Push를 하는데, 이 시점이 겹치면 충돌로 인해 에러가 발생하고, 실패한 워크플로우를 다시 수동으로 돌려야 하는 문제가 있었습니다.
그래서 개선된 워크플로우에서는 선택적 빌드와 병렬성이라는 장점은 가져가면서, Git Push에서의 에러를 없애는 것이 주된 목적이었습니다.