Rails 8.1의 Local CI는 config/ci.rb 파일에 정의된 간단한 DSL과 새로운 bin/ci 러너를 통해 로컬 머신과 CI 서버 전반에 걸쳐 워크플로우를 표준화합니다.
Local CI의 핵심 기능
config/ci.rb를 통한 워크플로우 정의
-
ci.workflow블록 내에서task와run을 사용하여 각 단계를 정의합니다. -
task는 단계의 이름을 부여하고,run은 실행될 명령어를 설정합니다. -
이는 애플리케이션 검증 방식에 대한 신뢰할 수 있는 단일 참조 역할을 합니다.
ruby
# config/ci.rb (예시)
ci.workflow do
task "Lint" do
run "bundle exec rubocop"
end
task "Tests" do
run "bin/rails test"
end
task "System Tests" do
run "bin/rails test:system"
end
end
bin/ci를 통한 로컬 워크플로우 실행
-
bin/ci명령어를 통해config/ci.rb에 정의된 작업을 순서대로 실행합니다. -
이는 여러 명령어를 기억하거나 CI와 동일한 검사를 수행하는지 고민할 필요를 없애줍니다.
-
로컬에서 테스트를 실행함으로써 CI 서비스 사용 비용을 절감하고, CI 파이프라인 실행 시간을 단축하여 개발자 시간을 절약할 수 있습니다.
-
새로운 Rails 8.1 앱은 기본적으로 설정, 스타일, 보안 감사(Gem audit, Importmap audit, Brakeman), Rails 및 시스템 테스트, 시드 테스트 등 포괄적인 CI 단계를 포함합니다.
-
선택적으로 GitHub CLI와
gh-signoff확장을 사용하여 모든 CI 단계 통과 시 GitHub 커밋 상태를 자동으로 ‘병합 준비 완료’로 설정할 수 있습니다.
CI 서버 통합
-
GitHub Actions와 같은 CI 파이프라인에서도 단순히
bin/ci를 호출하여 동일한 워크플로우를 실행할 수 있습니다. -
이를 통해 CI 서버와 개발자가 ‘통과 빌드의 기준’에 대한 정확히 동일한 정의를 공유하게 됩니다.
yaml
# .github/workflows/ci.yml (예시)
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: ruby/setup-ruby@v1
with:
ruby-version: 3.4
- run: bin/ci
추가 작업 통합
- Local CI DSL은 테스트 외에도 보안 검사(
brakeman,bundler-audit), JavaScript 린터(yarn eslint), 데이터베이스 마이그레이션 등 파이프라인에서 실행하는 모든 작업을 포함할 수 있습니다.