InfoGrab DocsInfoGrab Docs

개발자를 위한 Rake 태스크

요약

GitLab에 기여하는 개발자와 그 외 기여자가 사용할 수 있는 Rake 태스크가 있습니다. 데이터베이스 사용자에게 고급 권한이 없으면 이 명령을 실행하기 전에 데이터베이스를 수동으로 생성해야 합니다. setup 태스크는 gitlab:setup의 별칭입니다.

GitLab에 기여하는 개발자와 그 외 기여자가 사용할 수 있는 Rake 태스크가 있습니다.

개발자 시드로 데이터베이스 설정#

데이터베이스 사용자에게 고급 권한이 없으면 이 명령을 실행하기 전에 데이터베이스를 수동으로 생성해야 합니다.

bundle exec rake setup

setup 태스크는 gitlab:setup의 별칭입니다. 이 태스크는 db:reset을 호출해 데이터베이스를 생성하고, db:seed_fu를 호출해 데이터베이스에 시드 데이터를 삽입합니다. db:setup은 db:seed를 호출하지만 아무 동작도 하지 않습니다.

환경 변수#

MASS_INSERT: 수백만 개의 사용자(200만), 프로젝트(500만)와 그 관련 데이터를 생성합니다. 개발 중에 느린 쿼리를 찾으려면 이 옵션과 함께 시드를 실행하는 것을 강력히 권장합니다. 이 프로세스에는 최대 20분이 추가로 소요됩니다.

Rails 모델 대량 삽입도 참고합니다.

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

시드 데이터#

모든 프로젝트 또는 단일 프로젝트에 이슈 시드 삽입#

gitlab:seed:issues 태스크로 모든 프로젝트 또는 지정한 프로젝트에 이슈 시드를 삽입할 수 있습니다.

# All projects
bin/rake gitlab:seed:issues

# A specific project
bin/rake "gitlab:seed:issues[group-path/project-path]"

기본적으로 이 태스크는 프로젝트마다 최근 5주 동안 주당 평균 2개의 이슈를 삽입합니다.

Insights 차트를 위한 이슈 시드 삽입#

gitlab:seed:insights:issues 태스크로 Insights 차트 작업에 특화된 이슈 시드를 삽입할 수 있습니다.

# All projects
bin/rake gitlab:seed:insights:issues

# A specific project
bin/rake "gitlab:seed:insights:issues[group-path/project-path]"

기본적으로 이 태스크는 프로젝트마다 최근 52주 동안 주당 평균 10개의 이슈를 삽입합니다. 모든 이슈에는 team, type, severity, priority 레이블도 무작위로 지정됩니다.

하위 그룹이 포함된 그룹 시드 삽입#

gitlab:seed:group_seed 태스크로 마일스톤 및 프로젝트가 포함된 하위 그룹을 가진 그룹 시드를 삽입할 수 있습니다.

bin/rake "gitlab:seed:group_seed[subgroup_depth, username, organization_path]"

GitLab 인스턴스에서 에픽 기능을 사용할 수 있으면 그룹에 에픽 시드도 함께 삽입됩니다.

러너 플릿 테스트 환경 시드 삽입#

gitlab:seed:runner_fleet 태스크로 전체 러너 플릿, 즉 러너와 파이프라인이 포함된 프로젝트와 하위 그룹을 가진 그룹의 시드를 삽입합니다.

bin/rake "gitlab:seed:runner_fleet[username, registration_prefix, runner_count, job_count]"

기본적으로 이 Rake 태스크는 root 사용자 이름으로 40개의 러너와 400개의 job을 생성합니다.

Mermaid 다이어그램 (39줄)
소스 코드 보기
%%{init: { "fontFamily": "GitLab Sans" }}%%
graph TD
    accTitle: Seeding a runner fleet test environment
    accDescr: Diagram showing how the runner seed rake task seeds a full runner fleet with groups, subgroups, and projects with runners and pipelines
G1[Top-level group 1] --> G11
G2[Top-level group 2] --> G21
G11[Group 1.1] --> G111
G11[Group 1.1] --> G112
G111[Group 1.1.1] --> P1111
G112[Group 1.1.2] --> P1121
G21[Group 2.1] --> P211

P1111[Project 1.1.1.1<br><i>70% of jobs, sent to first 5 runners</i>]
P1121[Project 1.1.2.1<br><i>15% of jobs, sent to first 5 runners</i>]
P211[Project 2.1.1<br><i>15% of jobs, sent to first 5 runners</i>]

IR1[Instance runner]
P1111R1[Shared runner]
P1111R[Project 1.1.1.1 runners<br>20% total runners]
P1121R[Project 1.1.2.1 runners<br>49% total runners]
G111R[Group 1.1.1 runners<br>30% total runners<br><i>remaining jobs</i>]
G21R[Group 2.1 runners<br>1% total runners]

P1111 --> P1111R1
P1111 --> G111R
P1111 --> IR1
P1111 --> P1111R
P1121 --> P1111R1
P1121 --> IR1
P1121 --> P1121R
P211 --> P1111R1
P211 --> G21R
P211 --> IR1

classDef groups stroke-width:3px;
classDef projects stroke-width:2px;
class G1,G2,G11,G111,G112,G21 groups
class P1111,P1121,P211 projects</code></pre></details></div>

모니터링 대시보드의 커스텀 메트릭 시드 삽입#

모니터링 대시보드는 다양한 유형의 메트릭을 지원합니다.

이러한 메트릭을 가져오려면 다음을 실행합니다.

bundle exec rake 'gitlab:seed:development_metrics[your_project_id]'

취약점이 포함된 프로젝트 시드 삽입#

프로젝트에 보안 취약점 시드를 삽입할 수 있습니다.

# Seed all projects
bin/rake 'gitlab:seed:vulnerabilities'

# Seed a specific project
bin/rake 'gitlab:seed:vulnerabilities[group-path/project-path]'

환경이 포함된 프로젝트 시드 삽입#

프로젝트에 환경 시드를 삽입할 수 있습니다.

기본적으로 접두사가 ENV_인 환경 10개가 생성됩니다. 이 명령을 실행하는 데는 project_path만 필요합니다.

bundle exec rake "gitlab:seed:project_environments[project_path, seed_count, prefix]"

# Examples
bundle exec rake "gitlab:seed:project_environments[flightjs/Flight]"
bundle exec rake "gitlab:seed:project_environments[flightjs/Flight, 25, FLIGHT_ENV_]"

의존성이 포함된 그룹 시드 삽입#

bundle exec rake gitlab:seed:dependencies

CI 변수 시드 삽입#

프로젝트, 그룹 또는 인스턴스에 CI 변수 시드를 삽입할 수 있습니다.

기본적으로 각 명령은 CI 변수 10개를 생성합니다. 변수 이름 앞에는 각각의 기본 접두사가 붙습니다(프로젝트 수준 변수는 VAR_, 그룹 수준 변수는 GROUP_VAR_, 인스턴스 수준 변수는 INSTANCE_VAR_).

인스턴스 수준 변수에는 환경 범위가 없습니다. 프로젝트 수준 변수와 그룹 수준 변수는 environment_scope를 지정하지 않으면 기본 "*" 환경 범위를 사용합니다. environment_scope를 "unique"로 설정하면 각 변수가 고유한 환경과 함께 생성됩니다.

# Seed a project with project-level CI variables
# Only `project_path` is required to run this command.
bundle exec rake "gitlab:seed:ci_variables_project[project_path, seed_count, environment_scope, prefix]"

# Seed a group with group-level CI variables
# Only `group_name` is required to run this command.
bundle exec rake "gitlab:seed:ci_variables_group[group_name, seed_count, environment_scope, prefix]"

# Seed an instance with instance-level CI variables
bundle exec rake "gitlab:seed:ci_variables_instance[seed_count, prefix]"

# Examples
bundle exec rake "gitlab:seed:ci_variables_project[flightjs/Flight]"
bundle exec rake "gitlab:seed:ci_variables_project[flightjs/Flight, 25, staging]"
bundle exec rake "gitlab:seed:ci_variables_project[flightjs/Flight, 25, unique, CI_VAR_]"

bundle exec rake "gitlab:seed:ci_variables_group[group_name]"
bundle exec rake "gitlab:seed:ci_variables_group[group_name, 25, staging]"
bundle exec rake "gitlab:seed:ci_variables_group[group_name, 25, unique, CI_VAR_]"

bundle exec rake "gitlab:seed:ci_variables_instance"
bundle exec rake "gitlab:seed:ci_variables_instance[25, CI_VAR_]"

머지 트레인 개발을 위한 프로젝트 시드 삽입#

머지 트레인이 구성된 프로젝트와 머지 리퀘스트 20개(각각 커밋 3개 포함)의 시드를 삽입합니다. 명령은 다음과 같습니다.

rake gitlab:seed:merge_trains:project

자동화#

현재 데이터베이스를 완전히 지우고 시드를 다시 채우려는 것이 확실하면 FORCE 환경 변수를 yes로 설정할 수 있습니다.

FORCE=yes bundle exec rake setup

이렇게 하면 동작 확인 및 안전 검사를 건너뛰므로 yes를 수동으로 입력하지 않아도 됩니다.

stdout 버리기#

스크립트가 많은 정보를 출력하므로 터미널이 느려질 수 있고, 그대로 파일로 리디렉션하면 20G 이상의 로그가 생성됩니다. 출력에 관심이 없다면 그냥 /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은 통과하는 데 상당한 시간이 걸립니다. 전체 테스트 스위트를 로컬에서 실행하는 대신 변경 사항과 관련된 단일 테스트나 디렉터리만 실행하면 많은 시간을 절약할 수 있습니다. 머지 리퀘스트를 제출하면 CI가 전체 테스트 스위트를 실행합니다. 머지 리퀘스트의 CI 상태가 녹색이면 전체 테스트 스위트가 통과했다는 뜻입니다.

rspec .은 실행할 수 없습니다. 찾을 수 있는 모든 _spec.rb 파일을 실행하려고 하며, /tmp에 있는 파일까지 대상으로 삼기 때문입니다.

spec:unit, spec:integration, spec:system 태스크에는 RSpec 명령줄 옵션을 전달할 수 있습니다. 예를 들면 bin/rake "spec:unit[--tag ~geo --dry-run]"입니다.

RSpec 테스트에서 단일 테스트 파일을 실행하려면 다음을 실행합니다.

bin/rspec spec/controllers/commit_controller_spec.rb

한 디렉터리 안의 여러 테스트를 실행하려면 다음을 실행합니다.

  • bin/rspec spec/requests/api/: API만 테스트하려는 경우의 RSpec 테스트입니다.

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

머지 리퀘스트 파이프라인이 RSpec 테스트 실패로 끝났으면 다음 Rake 태스크로 실패한 모든 테스트를 로컬 머신에서 실행할 수 있습니다.

bin/rake spec:merge_request_rspec_failure

이 Rake 태스크에는 다음 몇 가지 주의 사항이 있습니다.

  • 로컬 머신에서 머지 리퀘스트의 소스 브랜치와 같은 브랜치에 있어야 합니다.
  • 파이프라인이 완료된 상태여야 합니다.
  • 테스트 리포트가 파싱될 때까지 기다린 후 다시 시도해야 할 수 있습니다.

이 Rake 태스크는 단위 테스트 리포트 기능에 의존하며, 이 기능은 처음 요청될 때만 파싱됩니다.

테스트, Rake 태스크, 마이그레이션 속도 향상#

Spring은 Rails 애플리케이션 사전 로더입니다. 애플리케이션을 백그라운드에서 계속 실행해 두어 테스트, Rake 태스크, 마이그레이션을 실행할 때마다 애플리케이션을 부팅하지 않아도 되므로 개발 속도가 빨라집니다.

Spring을 사용하려면 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을 "graceful mode"로 실행할 수 있습니다. 이 모드에서는 "grace period"가 활성화된(Details: grace period로 지정된) 모든 cop 규칙이 무음 처리됩니다.

다음을 실행합니다.

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 에셋을 컴파일하고 최소화한 다음, 그 외 모든 프론트엔드 에셋(이미지, 폰트 등)과 함께 /public/assets로 복사하며, 해당 위치에서 쉽게 확인할 수 있습니다.

이모지 태스크#

이모지 별칭 파일(이모지 자동 완성에 사용)을 업데이트하려면 다음을 실행합니다.

bundle exec rake tanuki_emoji:aliases

대체 이모지 이미지를 가져오려면 다음을 실행합니다.

bundle exec rake tanuki_emoji:import

현재 사용 가능한 이모지를 기준으로 이모지 다이제스트 파일(이모지 자동 완성에 사용)을 업데이트하려면 다음을 실행합니다.

bundle exec rake tanuki_emoji:digests

모든 이모지가 포함된 스프라이트 파일을 생성하려면 다음을 실행합니다.

bundle exec rake tanuki_emoji:sprite

자세한 절차는 이모지 업데이트 방법을 참고합니다.

프로젝트 템플릿 업데이트#

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 쿼리 하나 이상의 유효성을 확인하려면 다음을 실행합니다.

# Validate all queries
bundle exec rake gitlab:graphql:validate
# Validate one query
bundle exec rake gitlab:graphql:validate[path/to/query.graphql]
# Validate a directory
bundle exec rake gitlab:graphql:validate[path/to/queries]

이 명령은 쿼리별 항목이 담긴 리포트를 출력하며, 유효성 검사를 통과하지 못한 쿼리에 대해서는 유효하지 않은 이유를 설명합니다.

유효성 검사 중에 @client 필드는 제거되므로, 거짓 양성을 피하려면 클라이언트 필드를 @client 지시문으로 표시하는 것이 중요합니다.

GraphQL 쿼리 분석#

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

사용법:

# Analyze all queries
bundle exec rake gitlab:graphql:analyze
# Analyze one query
bundle exec rake gitlab:graphql:analyze[path/to/query.graphql]
# Analyze a directory
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의 스키마 파서와 헬퍼 메서드 같은 일부 기능을 사용합니다. 문서 생성기 코드는 GitLab 측에서 제공하므로 Haml 템플릿 사용이나 Markdown 파일 생성처럼 더 유연하게 대응할 수 있습니다.

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

  • 템플릿. 템플릿은 tooling/graphql/docs/templates/default.md.haml에서 편집할 수 있습니다. 실제 렌더러는 Tooling::Graphql::Docs::Renderer입니다.
  • 코드에서 해당하는 description 필드. 이 필드는 머신 가독형 스키마 파일을 업데이트하며, 그 결과가 앞에서 설명한 rake 태스크에 사용됩니다.

@parsed_schema는 graphql-docs gem이 사용할 수 있어야 한다고 기대하는 인스턴스 변수입니다. Gitlab::Graphql::Docs::Helper는 GitLab이 사용하는 object 메서드를 정의합니다. 표시하려는 새 유형에 필요한 새 메서드도 이곳에 구현해야 합니다.

머신 가독형 스키마 파일 업데이트#

GitLab 스키마를 기준으로 GraphQL 스키마 파일을 생성하려면 다음을 실행합니다.

bundle exec rake gitlab:graphql:schema:dump

이 태스크는 GraphQL Ruby에 내장된 Rake 태스크를 사용해 IDL과 JSON 두 형식으로 파일을 생성합니다.

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

다음 명령은 GraphQL 문서 및 스키마 정의 업데이트와 머신 가독형 스키마 파일 업데이트의 목적을 함께 수행합니다.

bundle exec rake gitlab:graphql:update_all

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

감사 이벤트 유형 문서를 업데이트하는 방법은 문서 생성을 참고합니다.

Error Tracking 기능을 위한 OpenAPI 클라이언트 업데이트#

Note

이 Rake 태스크를 실행하려면 docker가 설치되어 있어야 합니다.

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

# Run rake task
bundle exec rake gems:error_tracking_open_api:generate

# Review and test the changes

# Commit the changes
git commit -m 'Update ErrorTrackingOpenAPI from OpenAPI definition' 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_URL과 OUTPUT_FILE을 적절한 값으로 바꾸어 다음 명령을 실행합니다.

    # @param git_url - Remote Git URL.
    # @param output_file - Update keys to an output file. Default is 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이 읽어 메모리에 유지합니다. 이 파일의 크기를 1메가바이트 이상으로 늘리는 것은 권장하지 않습니다.

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

이 태스크는 현재 환경 설정(라이선스, 기능 플래그, 프로젝트·그룹)에 의존하므로 실행마다 또는 환경마다 출력이 달라질 수 있습니다. 향후 이터레이션에서 출력을 표준화하는 방안을 검토할 수 있습니다.

Product, UX, 테크니컬 라이팅 팀은 GitLab 내비게이션 전체를 감사할 방법이 필요하지만, lib/sidebars의 코드를 직접 검토하는 것이 편하지 않을 수 있습니다. gitlab:nav:dump_structure Rake 태스크로 전체 내비게이션 구조를 YAML로 덤프할 수 있습니다.

bundle exec rake gitlab:nav:dump_structure

개발자를 위한 Rake 태스크

GitLab v19.4
Tier: Ultimate
Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated
원문 보기

요약

GitLab에 기여하는 개발자와 그 외 기여자가 사용할 수 있는 Rake 태스크가 있습니다. 데이터베이스 사용자에게 고급 권한이 없으면 이 명령을 실행하기 전에 데이터베이스를 수동으로 생성해야 합니다. setup 태스크는 gitlab:setup의 별칭입니다.

GitLab에 기여하는 개발자와 그 외 기여자가 사용할 수 있는 Rake 태스크가 있습니다.

개발자 시드로 데이터베이스 설정#

데이터베이스 사용자에게 고급 권한이 없으면 이 명령을 실행하기 전에 데이터베이스를 수동으로 생성해야 합니다.

bundle exec rake setup

setup 태스크는 gitlab:setup의 별칭입니다. 이 태스크는 db:reset을 호출해 데이터베이스를 생성하고, db:seed_fu를 호출해 데이터베이스에 시드 데이터를 삽입합니다. db:setup은 db:seed를 호출하지만 아무 동작도 하지 않습니다.

환경 변수#

MASS_INSERT: 수백만 개의 사용자(200만), 프로젝트(500만)와 그 관련 데이터를 생성합니다. 개발 중에 느린 쿼리를 찾으려면 이 옵션과 함께 시드를 실행하는 것을 강력히 권장합니다. 이 프로세스에는 최대 20분이 추가로 소요됩니다.

Rails 모델 대량 삽입도 참고합니다.

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

시드 데이터#

모든 프로젝트 또는 단일 프로젝트에 이슈 시드 삽입#

gitlab:seed:issues 태스크로 모든 프로젝트 또는 지정한 프로젝트에 이슈 시드를 삽입할 수 있습니다.

# All projects
bin/rake gitlab:seed:issues

# A specific project
bin/rake "gitlab:seed:issues[group-path/project-path]"

기본적으로 이 태스크는 프로젝트마다 최근 5주 동안 주당 평균 2개의 이슈를 삽입합니다.

Insights 차트를 위한 이슈 시드 삽입#

gitlab:seed:insights:issues 태스크로 Insights 차트 작업에 특화된 이슈 시드를 삽입할 수 있습니다.

# All projects
bin/rake gitlab:seed:insights:issues

# A specific project
bin/rake "gitlab:seed:insights:issues[group-path/project-path]"

기본적으로 이 태스크는 프로젝트마다 최근 52주 동안 주당 평균 10개의 이슈를 삽입합니다. 모든 이슈에는 team, type, severity, priority 레이블도 무작위로 지정됩니다.

하위 그룹이 포함된 그룹 시드 삽입#

gitlab:seed:group_seed 태스크로 마일스톤 및 프로젝트가 포함된 하위 그룹을 가진 그룹 시드를 삽입할 수 있습니다.

bin/rake "gitlab:seed:group_seed[subgroup_depth, username, organization_path]"

GitLab 인스턴스에서 에픽 기능을 사용할 수 있으면 그룹에 에픽 시드도 함께 삽입됩니다.

러너 플릿 테스트 환경 시드 삽입#

gitlab:seed:runner_fleet 태스크로 전체 러너 플릿, 즉 러너와 파이프라인이 포함된 프로젝트와 하위 그룹을 가진 그룹의 시드를 삽입합니다.

bin/rake "gitlab:seed:runner_fleet[username, registration_prefix, runner_count, job_count]"

기본적으로 이 Rake 태스크는 root 사용자 이름으로 40개의 러너와 400개의 job을 생성합니다.

Mermaid 다이어그램 (39줄)
소스 코드 보기
%%{init: { "fontFamily": "GitLab Sans" }}%%
graph TD
    accTitle: Seeding a runner fleet test environment
    accDescr: Diagram showing how the runner seed rake task seeds a full runner fleet with groups, subgroups, and projects with runners and pipelines
G1[Top-level group 1] --&gt; G11
G2[Top-level group 2] --&gt; G21
G11[Group 1.1] --&gt; G111
G11[Group 1.1] --&gt; G112
G111[Group 1.1.1] --&gt; P1111
G112[Group 1.1.2] --&gt; P1121
G21[Group 2.1] --&gt; P211

P1111[Project 1.1.1.1&lt;br&gt;&lt;i&gt;70% of jobs, sent to first 5 runners&lt;/i&gt;]
P1121[Project 1.1.2.1&lt;br&gt;&lt;i&gt;15% of jobs, sent to first 5 runners&lt;/i&gt;]
P211[Project 2.1.1&lt;br&gt;&lt;i&gt;15% of jobs, sent to first 5 runners&lt;/i&gt;]

IR1[Instance runner]
P1111R1[Shared runner]
P1111R[Project 1.1.1.1 runners&lt;br&gt;20% total runners]
P1121R[Project 1.1.2.1 runners&lt;br&gt;49% total runners]
G111R[Group 1.1.1 runners&lt;br&gt;30% total runners&lt;br&gt;&lt;i&gt;remaining jobs&lt;/i&gt;]
G21R[Group 2.1 runners&lt;br&gt;1% total runners]

P1111 --&gt; P1111R1
P1111 --&gt; G111R
P1111 --&gt; IR1
P1111 --&gt; P1111R
P1121 --&gt; P1111R1
P1121 --&gt; IR1
P1121 --&gt; P1121R
P211 --&gt; P1111R1
P211 --&gt; G21R
P211 --&gt; IR1

classDef groups stroke-width:3px;
classDef projects stroke-width:2px;
class G1,G2,G11,G111,G112,G21 groups
class P1111,P1121,P211 projects</code></pre></details></div>

모니터링 대시보드의 커스텀 메트릭 시드 삽입#

모니터링 대시보드는 다양한 유형의 메트릭을 지원합니다.

이러한 메트릭을 가져오려면 다음을 실행합니다.

bundle exec rake 'gitlab:seed:development_metrics[your_project_id]'

취약점이 포함된 프로젝트 시드 삽입#

프로젝트에 보안 취약점 시드를 삽입할 수 있습니다.

# Seed all projects
bin/rake 'gitlab:seed:vulnerabilities'

# Seed a specific project
bin/rake 'gitlab:seed:vulnerabilities[group-path/project-path]'

환경이 포함된 프로젝트 시드 삽입#

프로젝트에 환경 시드를 삽입할 수 있습니다.

기본적으로 접두사가 ENV_인 환경 10개가 생성됩니다. 이 명령을 실행하는 데는 project_path만 필요합니다.

bundle exec rake "gitlab:seed:project_environments[project_path, seed_count, prefix]"

# Examples
bundle exec rake "gitlab:seed:project_environments[flightjs/Flight]"
bundle exec rake "gitlab:seed:project_environments[flightjs/Flight, 25, FLIGHT_ENV_]"

의존성이 포함된 그룹 시드 삽입#

bundle exec rake gitlab:seed:dependencies

CI 변수 시드 삽입#

프로젝트, 그룹 또는 인스턴스에 CI 변수 시드를 삽입할 수 있습니다.

기본적으로 각 명령은 CI 변수 10개를 생성합니다. 변수 이름 앞에는 각각의 기본 접두사가 붙습니다(프로젝트 수준 변수는 VAR_, 그룹 수준 변수는 GROUP_VAR_, 인스턴스 수준 변수는 INSTANCE_VAR_).

인스턴스 수준 변수에는 환경 범위가 없습니다. 프로젝트 수준 변수와 그룹 수준 변수는 environment_scope를 지정하지 않으면 기본 "*" 환경 범위를 사용합니다. environment_scope를 "unique"로 설정하면 각 변수가 고유한 환경과 함께 생성됩니다.

# Seed a project with project-level CI variables
# Only `project_path` is required to run this command.
bundle exec rake "gitlab:seed:ci_variables_project[project_path, seed_count, environment_scope, prefix]"

# Seed a group with group-level CI variables
# Only `group_name` is required to run this command.
bundle exec rake "gitlab:seed:ci_variables_group[group_name, seed_count, environment_scope, prefix]"

# Seed an instance with instance-level CI variables
bundle exec rake "gitlab:seed:ci_variables_instance[seed_count, prefix]"

# Examples
bundle exec rake "gitlab:seed:ci_variables_project[flightjs/Flight]"
bundle exec rake "gitlab:seed:ci_variables_project[flightjs/Flight, 25, staging]"
bundle exec rake "gitlab:seed:ci_variables_project[flightjs/Flight, 25, unique, CI_VAR_]"

bundle exec rake "gitlab:seed:ci_variables_group[group_name]"
bundle exec rake "gitlab:seed:ci_variables_group[group_name, 25, staging]"
bundle exec rake "gitlab:seed:ci_variables_group[group_name, 25, unique, CI_VAR_]"

bundle exec rake "gitlab:seed:ci_variables_instance"
bundle exec rake "gitlab:seed:ci_variables_instance[25, CI_VAR_]"

머지 트레인 개발을 위한 프로젝트 시드 삽입#

머지 트레인이 구성된 프로젝트와 머지 리퀘스트 20개(각각 커밋 3개 포함)의 시드를 삽입합니다. 명령은 다음과 같습니다.

rake gitlab:seed:merge_trains:project

자동화#

현재 데이터베이스를 완전히 지우고 시드를 다시 채우려는 것이 확실하면 FORCE 환경 변수를 yes로 설정할 수 있습니다.

FORCE=yes bundle exec rake setup

이렇게 하면 동작 확인 및 안전 검사를 건너뛰므로 yes를 수동으로 입력하지 않아도 됩니다.

stdout 버리기#

스크립트가 많은 정보를 출력하므로 터미널이 느려질 수 있고, 그대로 파일로 리디렉션하면 20G 이상의 로그가 생성됩니다. 출력에 관심이 없다면 그냥 /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은 통과하는 데 상당한 시간이 걸립니다. 전체 테스트 스위트를 로컬에서 실행하는 대신 변경 사항과 관련된 단일 테스트나 디렉터리만 실행하면 많은 시간을 절약할 수 있습니다. 머지 리퀘스트를 제출하면 CI가 전체 테스트 스위트를 실행합니다. 머지 리퀘스트의 CI 상태가 녹색이면 전체 테스트 스위트가 통과했다는 뜻입니다.

rspec .은 실행할 수 없습니다. 찾을 수 있는 모든 _spec.rb 파일을 실행하려고 하며, /tmp에 있는 파일까지 대상으로 삼기 때문입니다.

spec:unit, spec:integration, spec:system 태스크에는 RSpec 명령줄 옵션을 전달할 수 있습니다. 예를 들면 bin/rake "spec:unit[--tag ~geo --dry-run]"입니다.

RSpec 테스트에서 단일 테스트 파일을 실행하려면 다음을 실행합니다.

bin/rspec spec/controllers/commit_controller_spec.rb

한 디렉터리 안의 여러 테스트를 실행하려면 다음을 실행합니다.

  • bin/rspec spec/requests/api/: API만 테스트하려는 경우의 RSpec 테스트입니다.

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

머지 리퀘스트 파이프라인이 RSpec 테스트 실패로 끝났으면 다음 Rake 태스크로 실패한 모든 테스트를 로컬 머신에서 실행할 수 있습니다.

bin/rake spec:merge_request_rspec_failure

이 Rake 태스크에는 다음 몇 가지 주의 사항이 있습니다.

  • 로컬 머신에서 머지 리퀘스트의 소스 브랜치와 같은 브랜치에 있어야 합니다.
  • 파이프라인이 완료된 상태여야 합니다.
  • 테스트 리포트가 파싱될 때까지 기다린 후 다시 시도해야 할 수 있습니다.

이 Rake 태스크는 단위 테스트 리포트 기능에 의존하며, 이 기능은 처음 요청될 때만 파싱됩니다.

테스트, Rake 태스크, 마이그레이션 속도 향상#

Spring은 Rails 애플리케이션 사전 로더입니다. 애플리케이션을 백그라운드에서 계속 실행해 두어 테스트, Rake 태스크, 마이그레이션을 실행할 때마다 애플리케이션을 부팅하지 않아도 되므로 개발 속도가 빨라집니다.

Spring을 사용하려면 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을 "graceful mode"로 실행할 수 있습니다. 이 모드에서는 "grace period"가 활성화된(Details: grace period로 지정된) 모든 cop 규칙이 무음 처리됩니다.

다음을 실행합니다.

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 에셋을 컴파일하고 최소화한 다음, 그 외 모든 프론트엔드 에셋(이미지, 폰트 등)과 함께 /public/assets로 복사하며, 해당 위치에서 쉽게 확인할 수 있습니다.

이모지 태스크#

이모지 별칭 파일(이모지 자동 완성에 사용)을 업데이트하려면 다음을 실행합니다.

bundle exec rake tanuki_emoji:aliases

대체 이모지 이미지를 가져오려면 다음을 실행합니다.

bundle exec rake tanuki_emoji:import

현재 사용 가능한 이모지를 기준으로 이모지 다이제스트 파일(이모지 자동 완성에 사용)을 업데이트하려면 다음을 실행합니다.

bundle exec rake tanuki_emoji:digests

모든 이모지가 포함된 스프라이트 파일을 생성하려면 다음을 실행합니다.

bundle exec rake tanuki_emoji:sprite

자세한 절차는 이모지 업데이트 방법을 참고합니다.

프로젝트 템플릿 업데이트#

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 쿼리 하나 이상의 유효성을 확인하려면 다음을 실행합니다.

# Validate all queries
bundle exec rake gitlab:graphql:validate
# Validate one query
bundle exec rake gitlab:graphql:validate[path/to/query.graphql]
# Validate a directory
bundle exec rake gitlab:graphql:validate[path/to/queries]

이 명령은 쿼리별 항목이 담긴 리포트를 출력하며, 유효성 검사를 통과하지 못한 쿼리에 대해서는 유효하지 않은 이유를 설명합니다.

유효성 검사 중에 @client 필드는 제거되므로, 거짓 양성을 피하려면 클라이언트 필드를 @client 지시문으로 표시하는 것이 중요합니다.

GraphQL 쿼리 분석#

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

사용법:

# Analyze all queries
bundle exec rake gitlab:graphql:analyze
# Analyze one query
bundle exec rake gitlab:graphql:analyze[path/to/query.graphql]
# Analyze a directory
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의 스키마 파서와 헬퍼 메서드 같은 일부 기능을 사용합니다. 문서 생성기 코드는 GitLab 측에서 제공하므로 Haml 템플릿 사용이나 Markdown 파일 생성처럼 더 유연하게 대응할 수 있습니다.

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

  • 템플릿. 템플릿은 tooling/graphql/docs/templates/default.md.haml에서 편집할 수 있습니다. 실제 렌더러는 Tooling::Graphql::Docs::Renderer입니다.
  • 코드에서 해당하는 description 필드. 이 필드는 머신 가독형 스키마 파일을 업데이트하며, 그 결과가 앞에서 설명한 rake 태스크에 사용됩니다.

@parsed_schema는 graphql-docs gem이 사용할 수 있어야 한다고 기대하는 인스턴스 변수입니다. Gitlab::Graphql::Docs::Helper는 GitLab이 사용하는 object 메서드를 정의합니다. 표시하려는 새 유형에 필요한 새 메서드도 이곳에 구현해야 합니다.

머신 가독형 스키마 파일 업데이트#

GitLab 스키마를 기준으로 GraphQL 스키마 파일을 생성하려면 다음을 실행합니다.

bundle exec rake gitlab:graphql:schema:dump

이 태스크는 GraphQL Ruby에 내장된 Rake 태스크를 사용해 IDL과 JSON 두 형식으로 파일을 생성합니다.

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

다음 명령은 GraphQL 문서 및 스키마 정의 업데이트와 머신 가독형 스키마 파일 업데이트의 목적을 함께 수행합니다.

bundle exec rake gitlab:graphql:update_all

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

감사 이벤트 유형 문서를 업데이트하는 방법은 문서 생성을 참고합니다.

Error Tracking 기능을 위한 OpenAPI 클라이언트 업데이트#

Note

이 Rake 태스크를 실행하려면 docker가 설치되어 있어야 합니다.

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

# Run rake task
bundle exec rake gems:error_tracking_open_api:generate

# Review and test the changes

# Commit the changes
git commit -m 'Update ErrorTrackingOpenAPI from OpenAPI definition' 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_URL과 OUTPUT_FILE을 적절한 값으로 바꾸어 다음 명령을 실행합니다.

    # @param git_url - Remote Git URL.
    # @param output_file - Update keys to an output file. Default is 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이 읽어 메모리에 유지합니다. 이 파일의 크기를 1메가바이트 이상으로 늘리는 것은 권장하지 않습니다.

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

이 태스크는 현재 환경 설정(라이선스, 기능 플래그, 프로젝트·그룹)에 의존하므로 실행마다 또는 환경마다 출력이 달라질 수 있습니다. 향후 이터레이션에서 출력을 표준화하는 방안을 검토할 수 있습니다.

Product, UX, 테크니컬 라이팅 팀은 GitLab 내비게이션 전체를 감사할 방법이 필요하지만, lib/sidebars의 코드를 직접 검토하는 것이 편하지 않을 수 있습니다. gitlab:nav:dump_structure Rake 태스크로 전체 내비게이션 구조를 YAML로 덤프할 수 있습니다.

bundle exec rake gitlab:nav:dump_structure