오늘 알게 된 건데, GitHub Actions에 queue: max 옵션이 생겼다. 5월 초에 조용히 릴리즈된 것 같다. 이거 모르는 분 꽤 많을 것 같아서 짧게 정리한다.
기존 방식의 아쉬움
우리 팀은 배포 파이프라인에 concurrency 그룹을 걸어 놨었다. 같은 환경에 두 개가 동시에 배포되면 곤란하니까.
concurrency:
group: deploy-${{ github.ref }}
cancel-in-progress: false
문제는 이 설정으로 큐잉되는 최대 개수가 딱 1개였다는 거다. 진행 중 1개 + 대기 중 1개, 총 2개까지만. 세 번째 잡이 들어오면 대기 중이던 잡이 그냥 취소됐다. 배포 트리거가 몰리는 날에는 중간 잡이 스킵돼 버려서, PR 머지 순서움 실제 배포 순서가 어긋나는 상황이 종종 생겼다. 팀 슬랙에서 "어? 내 PR은 왜 배포 안 됐지?" 같은 질문이 잊을 만하면 튀어나왔다.
queue: max
5월 릴리즈부터 그룹당 최대 100개까지 큐잉이 가능해졌다. 설정은 이렇게 한다.
concurrency:
group: deploy-${{ github.ref }}
cancel-in-progress: false
queue: max
cancel-in-progress가 false이거나 미설정일 때만 동작한다. cancel-in-progress: true랑 같이 쓰면 의미가 없으니까(어차피 대기 중인 걸 취소하니까) 조합이 안 된다.
한 가지 주의할 점. 큐잉된 잡은 큐 자리를 차지하는 동안에도 워크플로 실행 시간 한도(usage limit)에 잡히지않지만, 큐가 100개를 넘으면 그때부터는 다시옻뒠처럼 취소가 발생한다. 대럵 배포가 몰리는 프로젝트는 워크하로 트리 거 자체를 좀 더 좁게 잡는 편이 낛다.
실무에서 ��는 퍁
배포 워크플로와 하나만 예로 들면 이렇게 쓴다.
name: Deploy Production
on:
push:
branches: [main]
concurrency:
group: deploy-prod
cancel-in-progress: false
queue: max
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Deploy
run: ./scripts/deploy.sh
이제 main에 연속으로 머지되는 PR들이 순서대로 배포된다. 중간에 잡 하나가 사라지는 일이 없다.
브랜치별 미리보기 배포도 마찬가지다. group: preview-${{ github.head_ref }} 로 걸어 두면 같은 PR에서 여러 커밋이 들어와도 순서대로 처리된다. 예전엔 마지막 커밋만 반영되게 하려고 cancel-in-progress: true로 뒀는데, 상황에 따라 이제 큐잉을 선택할 수 있게 됐다.
마무리
작은 변경 같지만 배포 순서가 어긋나서 디버깅한 경험 있는 분들에겐 꽤 반가운 업데이트다. 옵션 한 줄이니까 오늘 바로 적용해 볼 만하다. 혹시 다른 활용 사례 있으면 댓글 남겨 주세요.
참고
태그: GitHubActions, CI/CD, DevOps, 배포자동화, concurrency
'IT > CI CD' 카테고리의 다른 글
| Argo Rollouts vs Flagger, 카나리 뭘 쓸까 (0) | 2026.07.03 |
|---|---|
| ArgoCD ApplicationSet으로 멀티 환경 배포 자동화하기 (0) | 2026.07.01 |
| GitHub Actions secrets: inherit, 한 줄이 일으키는 의외의 일들 (0) | 2026.06.27 |
| ArgoCD ApplicationSet으로 PR 프리뷰 환경 자동화하기 (0) | 2026.06.26 |
| GitHub Actions OIDC로 AWS 권한, Access Key 없이 끝내기 (0) | 2026.06.24 |