피드로 돌아가기
rails-local-ci: Essential Local CI for Older Rails Apps
Dev.toDev.to
DevOps

개발자가 Rails 7 환경에서 Rails 8.1의 bin/ci 워크플로우와 Bitbucket용 커밋 상태 알림 도구를 직접 구현하여 로컬 CI 파이프라인을 구축한 사례

rails-local-ci: Essential Local CI for Older Rails Apps

Mohamed Magdy Omar2026년 3월 30일7intermediate

Context

Rails 8.1은 ActiveSupport::ContinuousIntegration 클래스와 bin/ci 스크립트를 표준 제공한다. 그러나 Rails 5.2~7.x에는 해당 클래스가 존재하지 않아 teams가 쉘 스크립트로 CI 워크플로우를 직접 구성해야 했다. Basecamp의 gh-signoff 도구는 GitHub API만 지원하여 Bitbucket 사용자는 커밋 상태(post) 기능을 사용할 수 없었다.

Technical Solution

  • rails-local-ci 젬이 Rails 8.1과 동일한 로드패스(lib/active_support/continuous_integration.rb)에 ActiveSupport::ContinuousIntegration 클래스를 배치하여 Rails 5.2~7.x에서 bin/ci 워크플로우를 제공한다.
  • Gemfile에 젬을 추가하고 rails generate rails_local_ci:install 명령을 실행하면 bin/ci 러너와 config/ci.rb 설정 파일이 생성된다.
  • config/ci.rb에서 CI 스텝을 정의하고 ./bin/ci 또는 ./bin/ci --fail-fast 명령으로 실행한다.
  • bb-signoff는 Bitbucket REST API를 호출하여 테스트 통과 후 녹색 커밋 상태를 게시하는 Bash 스크립트다.
  • bb-signoff install 명령으로 Bitbucket 브랜치 제한을 설정하면 signoff 미완료 시 머지를 차단한다.

Impact

CI 서버나 클라우드 비용 없이 로컬에서 전체 테스트, 린팅, 보안 검사를 실행하고 Bitbucket PR에 상태를 알릴 수 있다.

Key Takeaway

rails-local-ci는 영구 의존성이 아닌 마이그레이션 브릿지로 설계되어 Rails 8.1 업그레이드 시 젬만 제거하면 된다.


Rails 5.2~7.x 환경에서 rails-local-ci 젬과 bb-signoff 스크립트를 함께 사용하여 CI 서버 없이 로컬에서 테스트부터 Bitbucket 커밋 상태(post)까지 자동화할 수 있다.

원문 읽기