Rails 8.1의 bin/ci는 config/ci.rb를 통해 CI 스텝을 명확하고 구조화된 방식으로 정의할 수 있는 DSL을 제공합니다. 이 DSL은 다음과 같은 주요 특징을 가집니다.
CI 스텝 정의
CI.run 블록 내에서 step 키워드를 사용하여 개별 CI 작업을 정의합니다. 각 스텝은 이름과 실행할 명령어를 포함합니다.
- 예시 스텝:
- “Setup”:
bin/setup --skip-server(환경 설정 및 종속성 설치) - “Style: Ruby”:
bin/rubocop(Ruby 코드 스타일 검사) - “Security: Brakeman code analysis”:
bin/brakeman(Brakeman을 이용한 보안 취약점 분석) - “Security: Importmap vulnerability audit”:
bin/importmap audit(Importmap 패키지 취약점 감사) - “Tests: Rails”:
bin/rails test test:system(Rails 및 시스템 테스트 실행) - “Tests: Seeds”:
env RAILS_ENV=test bin/rails db:seed:replant(테스트 환경 데이터베이스 시드)
- “Setup”:
조건부 로직 지원
bin/ci DSL은 if success?와 같은 조건부 로직을 지원하여 이전 스텝의 성공 여부에 따라 다음 스텝을 동적으로 결정할 수 있습니다. 이는 CI 파이프라인의 유연성을 크게 향상시킵니다.
- 예시: 모든 이전 스텝이 성공했을 경우 “Signoff: All systems go. Ready for merge and deploy.” 스텝을 실행하고, 실패했을 경우 “Signoff: Failed. Do not merge or deploy.” 메시지와 함께 실패 처리 메시지를 표시합니다.
실행 및 결과
./bin/ci 명령어를 통해 CI 파이프라인을 실행하면, 각 스텝의 실행 과정, 소요 시간, 그리고 성공 또는 실패 여부가 상세하게 콘솔에 출력됩니다. 이는 개발자가 CI 진행 상황을 쉽게 파악하고 문제 발생 시 신속하게 대응할 수 있도록 돕습니다. 예를 들어, bin/rubocop 실행 시 검사 파일 수와 위반 사항 유무가, bin/brakeman 실행 시 보안 경고 유무가 명확히 보고됩니다.