개발자를 위한 Rake 작업

개발자 및 기타 GitLab에 기여하는 사람들을 위한 Rake 작업을 사용할 수 있습니다.

개발자 시드(Developer Seeds)로 데이터베이스 설정

데이터베이스 사용자에게 고급 권한이 없는 경우에는 이 명령을 실행하기 전에 데이터베이스를 매뉴얼으로 만들어야 합니다.

bundle exec rake setup

setup 작업은 gitlab:setup의 별칭입니다.
이 작업은 데이터베이스를 만들기 위해 db:reset을 호출하고, 데이터베이스에 시드(seed)를 생성하기 위해 db:seed_fu를 호출합니다.
db:setupdb:seed를 호출하지만 아무것도 하지 않습니다.

환경 변수

MASS_INSERT: 사용자(2m), 프로젝트(5m) 및 관련 정보를 수백만 개 만듭니다. 개발 중에 느린 쿼리를 확인하기 위해 시드(seed)를 실행하는 것이 매우 권장됩니다. 프로세스가 추가로 20분 정도 소요될 수 있습니다.

루비 온 Rails 모델 대량 삽입도 참조하세요.

LARGE_PROJECTS: 미리 정의된 URL 집합에서 대형 프로젝트(가져오기를 통해)를 만듭니다.

시드 데이터

모든 프로젝트 또는 단일 프로젝트를 위한 이슈 시드 생성

gitlab:seed:issues 작업을 사용하여 모든 프로젝트 또는 지정된 프로젝트에 대해 이슈를 생성할 수 있습니다.

# 모든 프로젝트
bin/rake gitlab:seed:issues

# 특정 프로젝트
bin/rake "gitlab:seed:issues[그룹-경로/프로젝트-경로]"

기본적으로 이 작업은 각 프로젝트에 대해 지난 5주간의 평균 2개의 이슈를 생성합니다.

Insight 차트를 위한 이슈 시드 생성

Tier: Ultimate
Offering: GitLab.com, Self-Managed, GitLab Dedicated

gitlab:seed:insights:issues 작업을 사용하여 Insights 차트를 사용하기 위해 특별히 이슈를 시드로 생성할 수 있습니다.

# 모든 프로젝트
bin/rake gitlab:seed:insights:issues

# 특정 프로젝트
bin/rake "gitlab:seed:insights:issues[그룹-경로/프로젝트-경로]"

기본적으로 이 작업은 각 프로젝트에 대해 지난 52주간의 평균 10개의 이슈를 생성합니다. 또한 모든 이슈는 팀, 유형, 심각도 및 우선 순위로 무작위로 라벨이 지정됩니다.

… (일부 내용 생략) …

Merge Train Development용 프로젝트 시드

Merge Train이 구성된 프로젝트를 20개의 Merge Request과 함께(각각 3개의 커밋 포함) 시드합니다. 다음 명령어를 사용하세요:

rake gitlab:seed:merge_trains:project

자동화

현재 데이터베이스를 완전히 삭제하고 새로 시드하고 싶다면, FORCE 환경 변수를 yes로 설정할 수 있습니다:

FORCE=yes bundle exec rake setup

이렇게 하면 동작 확인/안전 검사를 건너뛸 수 있어서 매뉴얼으로 yes를 입력하지 않아도 됩니다.

stdout 삭제

스크립트는 많은 정보를 출력하기 때문에 터미널 실행이 느려질 수 있으며, 파일로 리다이렉트하면 20GB 이상의 로그가 생성될 수 있습니다. 출력이 필요하지 않은 경우 /dev/null로 리다이렉트할 수 있습니다:

echo 'yes' | bundle exec rake setup > /dev/null

stdout에서 질문을 볼 수 없으므로 echo 'yes'로 실행을 유지할 수 있습니다. 그러나 stderr에 오류가 여전히 출력되므로 오류를 놓치지 않도록 주의하세요.

추가 프로젝트 시드 옵션

프로젝트를 시드하는 방식을 변경하려면 몇 가지 환경 플래그를 전달할 수 있습니다.

  • SIZE: 기본값은 8, 최대: 32. 생성할 프로젝트 수입니다.
  • LARGE_PROJECTS: 기본값은 false. 설정하면 테스트에 도움을 주기 위해 6개의 큰 프로젝트를 복제합니다.
  • FORK: 기본값은 false. true로 설정하면 torvalds/linux를 5번 복제합니다. 기존 프로젝트 full_path로도 설정할 수 있습니다.

테스트 실행

테스트를 실행하려면 다음 명령어를 사용하세요:

  • bin/rake spec을 사용하여 RSpec 스위트를 실행합니다.
  • bin/rake spec:unit을 사용하여 단위 테스트만 실행합니다.
  • bin/rake spec:integration을 사용하여 통합 테스트만 실행합니다.
  • bin/rake spec:system을 사용하여 시스템 테스트만 실행합니다.

bin/rake spec은 상당한 시간이 소요됩니다. 로컬에서 전체 테스트 스위트를 실행하는 대신 변경 사항과 관련된 단일 테스트나 디렉터리를 실행하여 시간을 절약할 수 있습니다. Merge Request을 제출한 후 CI에서 전체 테스트 스위트가 실행됩니다. Merge Request의 녹색 CI 상태는 전체 테스트 스위트가 통과되었음을 의미합니다.

rspec .을 실행할 수 없으므로 모든 _spec.rb 파일 및 /tmp에 있는 파일을 실행하려고 시도합니다.

spec:unit, spec:integration, 및 spec:system 작업에 RSpec 명령줄 옵션을 전달할 수 있습니다. 예를 들어 bin/rake "spec:unit[--tag ~geo --dry-run]"처럼 사용합니다.

RSpect 테스트의 경우, 단일 테스트 파일을 실행하려면 다음과 같이 실행합니다:

bin/rspec spec/controllers/commit_controller_spec.rb

한 디렉터리에 있는 여러 테스트를 실행하려면:

  • bin/rspec spec/requests/api/을 사용하여 API 테스트만 실행합니다.

머지 요청 파이프라인에서 실패한 RSpec 테스트를 로컬에서 실행

만약 머지 요청 파이프라인에서 RSpec 테스트가 실패했다면, 다음 Rake 작업으로 로컬에서 모든 실패한 테스트를 실행할 수 있습니다:

bin/rake spec:merge_request_rspec_failure

이 Rake 작업에는 몇 가지 주의사항이 있습니다:

  • 로컬 머신에서 머지 요청의 소스 브랜치와 동일한 브랜치에 있어야 합니다.
  • 파이프라인이 완료되어 있어야 합니다.
  • 테스트 보고서가 구문 분석되기를 기다리고 다시 시도해야 할 수 있습니다.

이 Rake 작업은 첫 요청시에만 요청되었을 때 구문 분석되는 단위 테스트 보고서 기능에 의존합니다.

테스트, Rake 작업, 그리고 마이그레이션 가속화

Spring은 Rails 애플리케이션 미리로더입니다. 개발을 가속화하기 위해 애플리케이션을 매번 테스트, Rake 작업 또는 마이그레이션을 실행할 때마다 부팅할 필요가 없도록 하는 방식에 사용됩니다.

사용하려면 ENABLE_SPRING 환경 변수를 1로 내보내야 합니다:

export ENABLE_SPRING=1

또는 각각의 spec 실행마다 다음을 사용할 수 있습니다.

bundle exec spring rspec some_spec.rb

RuboCop 작업

초기 RuboCop TODO 디렉터리 생성

초기 디렉터리을 생성하는 한 가지 방법은 rubocop:todo:generate Rake 작업을 실행하는 것입니다:

bundle exec rake rubocop:todo:generate

특정 RuboCop 규칙에 대한 TODO 디렉터리을 생성하려면 Rake 작업에 쉼표로 구분하여 인수로 전달합니다:

bundle exec rake 'rubocop:todo:generate[Gitlab/NamespacedClass,Lint/Syntax]'
bundle exec rake rubocop:todo:generate\[Gitlab/NamespacedClass,Lint/Syntax\]

일부 셸은 괄호를 이스케이프하거나 따옴표로 감싸야 할 수 있습니다.

이제부터 어떻게 진행할 것인지에 대한 RuboCop 예외 해결를 참조하세요.

RuboCop을 우아한 모드로 실행

RuboCop을 “우아한 모드”로 실행할 수 있습니다. 이는 “유예 기간”이 활성화된 모든 활성화된 cop 규칙이 숨겨짐을 의미합니다 (via Details: grace period).

실행:

bundle exec rake 'rubocop:check:graceful'
bundle exec rake 'rubocop:check:graceful[Gitlab/NamespacedClass]'

프론트엔드 에셋 컴파일

개발 중에는 매뉴얼으로 프론트엔드 에셋을 컴파일할 필요가 없지만, 프로덕션 환경에서 에셋이 어떻게 컴파일되는지 테스트해야 하는 경우 다음 명령어를 사용하세요:

RAILS_ENV=production NODE_ENV=production bundle exec rake gitlab:assets:compile

이는 모든 JavaScript 및 CSS 에셋을 컴파일하고 최소화하고 다른 프론트엔드 에셋(images, fonts 등)과 함께 /public/assets로 복사하여 쉽게 검사할 수 있는 위치에 넣습니다.

이모지 작업

이모지 별칭 파일(이모지 자동완성에 사용됨)을 업데이트하려면 다음을 실행하세요:

bundle exec rake tanuki_emoji:aliases

이모지 다이제스트 파일을 업데이트하려면 다음을 실행하세요:

bundle exec rake tanuki_emoji:digests

현재 사용 가능한 이모지를 기반으로 파일 fixtures/emojis/digests.json을 업데이트합니다.

모든 이모지를 포함하는 스프라이트 파일을 생성하려면 다음을 실행하세요:

bundle exec rake tanuki_emoji:sprite

새로운 이모지가 추가되면 스프라이트 시트가 크기가 변할 수 있습니다. 이러한 변경에 대비하기 위해 먼저 위의 Rake 작업으로 emoji.png 스프라이트 시트를 생성한 다음 새 스프라이트 시트의 치수를 확인하고 SPRITESHEET_WIDTHSPRITESHEET_HEIGHT 상수를 이에 맞게 업데이트합니다.

프로젝트 템플릿 업데이트

GitLab 팀원을 위한 프로젝트 템플릿 기여 자세한 내용은 GitLab 팀원을 위한 프로젝트 템플릿 기여를 참조하세요.

경로 디렉터리 생성

모든 API 경로 디렉터리을 확인하려면 다음 명령어를 사용하세요:

bundle exec rake grape:path_helpers

생성된 디렉터리에는 모든 API 엔드포인트와 기능적인 RESTful API 동사의 전체 디렉터리이 포함됩니다.

Rails 컨트롤러의 경우 다음을 실행하세요:

bundle exec rails routes

생성하는 데 시간이 오래 걸리므로 빠르게 참조할 수 있도록 파일에 저장하는 것이 도움이 됩니다.

사용되지 않는 ignored_columns 표시

모든 사용되지 않는 ignored_columns 정의 디렉터리을 확인하려면 다음을 실행하세요:

bundle exec rake db:obsolete_ignored_columns

관련 정의에서 ignored_columns 정의를 제거할 수 있습니다.

GraphQL 쿼리 유효성 검사

프론트엔드 GraphQL 쿼리의 유효성을 확인하려면 다음을 실행하세요:

# 모든 쿼리 유효성 검사
bundle exec rake gitlab:graphql:validate
# 한 쿼리 유효성 검사
bundle exec rake gitlab:graphql:validate[path/to/query.graphql]
# 디렉터리 유효성 검사
bundle exec rake gitlab:graphql:validate[path/to/queries]

이는 각 쿼리에 대해 유효성을 통과하지 못하면 왜 실패했는지에 대한 보고서가 포함된 보고서를 출력합니다.

우리는 유효성 검사 중에 @client 필드를 제거하므로 잘못된 양성을 피하기 위해 클라이언트 필드를 @client로 표시하는 것이 중요합니다.

GraphQL 쿼리 분석

SQL의 ANALYZE와 유사하게 gitlab:graphql:analyze를 실행하여 쿼리 실행 비용을 추정할 수 있습니다.

사용법:

# 모든 쿼리 분석
bundle exec rake gitlab:graphql:analyze
# 하나의 쿼리 분석
bundle exec rake gitlab:graphql:analyze[path/to/query.graphql]
# 디렉터리 분석
bundle exec rake gitlab:graphql:analyze[path/to/queries]

쿼리의 복잡성이 유효한 경우, 각 쿼리에 대한 보고서가 출력됩니다.

복잡성은 경우에 따라 인수에 따라 다르므로 보고된 복잡성은 상한의 추정 노력입니다.

GraphQL 문서 및 스키마 정의 업데이트

GitLab 스키마를 기반으로 GraphQL 문서를 생성하려면 다음을 실행하세요:

bundle exec rake gitlab:graphql:compile_docs

현재 상태에서 Rake 작업은 다음을 수행합니다:

  • GraphQL 객체에 대한 출력 생성
  • 출력을 doc/api/graphql/reference/index.md에 배치

이 작업은 graphql-docs gem에서 일부 기능을 사용하며 스키마 파서와 도우미 메서드를 포함합니다. 문서 생성기 코드는 Haml 템플릿을 사용하고 Markdown 파일을 생성하는 등 유연성이 더 많은 쪽에서 제공됩니다.

콘텐츠를 편집하려면 다음을 편집해야 할 수 있습니다:

  • 템플릿: tooling/graphql/docs/templates/default.md.haml에서 템플릿을 편집할 수 있습니다. 실제 렌더러는 Tooling::Graphql::Docs::Renderer에 있습니다.
  • 코드의 적용 가능한 description 필드를 편집해야 합니다. 기계 판독 가능한 스키마 파일 업데이트에서는 앞에서 설명한 rake 작업을 사용합니다.

@parsed_schemagraphql-docs gem에서 사용 가능해야 하는 인스턴스 변수입니다. Gitlab::Graphql::Docs::Helper는 현재 사용하는 object 메서드를 정의합니다. 여기에 표시하려는 새 유형을 위한 새 메서드를 구현해야 합니다.

기계 판독 가능한 스키마 파일 업데이트

GitLab 스키마를 기반으로 GraphQL 스키마 파일을 생성하려면 다음을 실행하세요:

bundle exec rake gitlab:graphql:schema:dump

이 작업은 IDL 및 JSON 형식의 파일을 생성하기 위해 GraphQL Ruby의 내장 Rake 작업을 사용합니다.

문서 및 스키마 정의 업데이트

다음 명령은 GraphQL 문서 및 스키마 정의 업데이트기계 판독 가능한 스키마 파일 업데이트의 의도를 결합합니다:

bundle exec rake gitlab:graphql:update_all

감사 이벤트 유형 문서 업데이트

감사 이벤트 유형 문서를 업데이트하는 자세한 정보는 문서 생성를 참조하십시오.

오류 추적 기능용 OpenAPI 클라이언트 업데이트

caution
이 Rake 작업에는 docker가 설치되어 있어야 합니다.

gems/error_tracking_open_api에 있는 OpenAPI 클라이언트의 생성 코드를 업데이트하려면 다음 명령을 실행하세요:

# rake 작업 실행
bundle exec rake gems:error_tracking_open_api:generate

# 변경 사항 검토 및 테스트

# 변경 사항 커밋
git commit -m 'OpenAPI 정의에서 ErrorTrackingOpenAPI 업데이트' gems/error_tracking_open_api

금지된 SSH 키 업데이트

gitlab:security:update_banned_ssh_keys Rake 작업을 사용하여 Git 리포지터리에서 금지된 SSH 키를 추가할 수 있습니다:

  1. SSH 공개 키를 포함하는 공용 원격 Git 리포지터리를 찾으세요. 공개 키 파일은 .pub 파일 확장자를 가져야 합니다.
  2. /tmp/ 디렉터리에 원격 Git 리포지터리를 저장할 공간이 충분한지 확인하세요.
  3. 금지할 SSH 키를 금지 키 디렉터리에 추가하려면 해당 명령을 실행하세요. GIT_URLOUTPUT_FILE을 적절한 값으로 대체하세요:

    # @param git_url - 원격 Git URL.
    # @param output_file - 출력 파일로 키를 업데이트합니다. 기본값은 config/security/banned_ssh_keys.yml입니다.
       
    bundle exec rake "gitlab:security:update_banned_ssh_keys[GIT_URL, OUTPUT_FILE]"
    

이 작업은 원격 리포지터리를 복제한 후 .pub로 끝나는 파일을 재귀적으로 확인하고 해당 파일을 SSH 공개 키로 파싱하여 공개 키 지문을 output_file에 추가합니다. config/security/banned_ssh_keys.yml의 내용은 GitLab에서 읽혀지고 메모리에 저장됩니다. 이 파일의 크기를 1MB 이상으로 늘리는 것은 권장되지 않습니다.

현재 내비게이션 구조를 YAML로 출력

이 작업은 현재 환경 설정(라이선스, 피처 플래그, 프로젝트/그룹)에 의존하므로 실행할 때마다 또는 환경마다 출력이 달라질 수 있습니다. 향후 반복에서 출력을 표준화할 수 있습니다.

제품, 사용자 경험 및 기술 문서 작성자는 GitLab의 전체 내비게이션을 감사하기 위한 방법이 필요하지만 lib/sidebars의 코드를 직접 검토하는 것이 편하지 않을 수 있습니다. gitlab:nav:dump_structure Rake 작업을 통해 전체 내비게이션 구조를 YAML로 덤프할 수 있습니다:

bundle exec rake gitlab:nav:dump_structure