- 개발자 미리 작성된 시드를 사용하여 데이터베이스 설정
- 테스트 실행
- RuboCop 작업
- 초기 RuboCop TODO 목록 생성
- 프런트엔드 에셋 컴파일
- 이모지 작업
- 프로젝트 템플릿 업데이트
- 경로 목록 생성
- 사용되지 않는
ignored_columns
표시 - GraphQL 쿼리 유효성 검증
- GraphQL 쿼리 분석
- GraphQL 문서 및 스키마 정의 업데이트
- 감사 이벤트 유형 문서 업데이트
- 오류 추적 기능용 OpenAPI 클라이언트 업데이트
- 금지된 SSH 키 업데이트
- 현재 탐색 구조를 YAML로 출력
개발자를 위한 Rake 작업
개발자 및 GitLab에 기여하는 다른 사용자들을 위해 Rake 작업을 사용할 수 있습니다.
개발자 미리 작성된 시드를 사용하여 데이터베이스 설정
데이터베이스 사용자가 고급 권한을 갖고 있지 않은 경우에는 이 명령을 실행하기 전에 데이터베이스를 수동으로 생성해야 합니다.
bundle exec rake setup
setup
작업은 gitlab:setup
의 별칭입니다.
이 작업은 데이터베이스를 만들기 위해 db:reset
을 호출하고, db:seed_fu
를 호출하여 데이터베이스를 시드합니다.
db:setup
은 db:seed
를 호출하지만 아무것도 수행하지 않습니다.
환경 변수
MASS_INSERT: (2m) 사용자, (5m) 프로젝트 및 그 관계를 만듭니다. 개발 중에 느린 쿼리를 잡는 데 유용합니다. 작업하는 동안 20분 정도 걸릴 수 있습니다.
레일 모델 대량 삽입도 참조하세요.
LARGE_PROJECTS: 미리 정의된 URL 세트에서 대규모 프로젝트(가져오기를 통해)를 만듭니다.
시드 데이터
모든 프로젝트 또는 단일 프로젝트에 대한 이슈 시딩
gitlab:seed:issues
작업을 사용하여 모든 프로젝트 또는 지정된 프로젝트에 대한 이슈를 시드할 수 있습니다.
# 모든 프로젝트
bin/rake gitlab:seed:issues
# 특정 프로젝트
bin/rake "gitlab:seed:issues[group-path/project-path]"
기본적으로, 이 작업은 프로젝트 당 지난 5주간의 주 평균 2개의 이슈를 시드합니다.
통찰차트용 이슈 시드
Insights 차트로 작업할 때 특별히 이슈를 시드할 수 있습니다.
gitlab:seed:insights:issues
작업을 사용하세요.
# 모든 프로젝트
bin/rake gitlab:seed:insights:issues
# 특정 프로젝트
bin/rake "gitlab:seed:insights:issues[group-path/project-path]"
기본적으로, 이 작업은 프로젝트 당 지난 52주간의 주 평균 10개의 이슈를 시드합니다. 모든 이슈는 팀, 유형, 심각도, 우선순위로 무작위로 라벨이 지정됩니다.
서브그룹을 포함하는 그룹 시드
gitlab:seed:group_seed
작업을 사용하여 마일스톤/프로젝트/이슈를 포함하는 그룹을 시드할 수 있습니다.
bin/rake "gitlab:seed:group_seed[subgroup_depth, username]"
에픽 기능이 사용 가능한 경우 그룹은 에픽으로도 시드됩니다.
러너 플릿 테스트 환경 시딩
러너와 파이프라인을 포함하는 그룹 및 프로젝트를 특별히 시드하려면 gitlab:seed:runner_fleet
작업을 사용하세요.
bin/rake "gitlab:seed:runner_fleet[username, registration_prefix, runner_count, job_count]"
기본적으로, Rake 작업은 root
사용자를 사용하여 40개의 러너와 400개의 작업을 생성합니다.
모니터링 대시보드에 사용자 지정 메트릭 시딩
모니터링 대시보드에서 다양한 유형의 메트릭을 지원합니다.
이러한 메트릭을 가져오려면 다음을 실행할 수 있습니다.
bundle exec rake 'gitlab:seed:development_metrics[your_project_id]'
취약점이 있는 프로젝트 시딩
보안 취약점이 있는 프로젝트를 시드할 수 있습니다.
# 모든 프로젝트
bin/rake 'gitlab:seed:vulnerabilities'
# 특정 프로젝트
bin/rake 'gitlab:seed:vulnerabilities[group-path/project-path]'
환경이 있는 프로젝트 시딩
환경이 있는 프로젝트를 시드할 수 있습니다.
기본적으로, project_path
를 입력하여 실행해야 합니다. 이 명령은 ENV_
접두어가 있는 10개의 환경을 생성합니다.
bundle exec rake "gitlab:seed:project_environments[project_path, seed_count, prefix]"
# 예시
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 변수를 시드할 수 있습니다.
기본적으로 각 명령은 10개의 CI 변수를 생성합니다. 변수 이름은 자체 기본 접두어로 준비됩니다(프로젝트 수준 변수의 경우
VAR_, 그룹 수준 변수의 경우
GROUP_VAR_, 인스턴스 수준 변수의 경우
INSTANCE_VAR_`).
인스턴스 수준 변수는 환경 범위를 갖지 않습니다. 프로젝트 수준 및 그룹 수준 변수는 environment_scope
가 제공되지 않은 경우 기본 *
환경 범위를 사용합니다. environment_scope
가 "unique"
로 설정된 경우 각 변수는 고유한 환경으로 생성됩니다.
# 프로젝트에 프로젝트 수준 CI 변수를 시드
# 이 명령을 실행하려면 `project_path`만 필요합니다.
bundle exec rake "gitlab:seed:ci_variables_project[project_path, seed_count, environment_scope, prefix]"
# 그룹에 그룹 수준 CI 변수를 시드
# 이 명령을 실행하려면 `group_name`만 필요합니다.
bundle exec rake "gitlab:seed:ci_variables_group[group_name, seed_count, environment_scope, prefix]"
# 인스턴스에 인스턴스 수준 CI 변수를 시드
bundle exec rake "gitlab:seed:ci_variables_instance[seed_count, prefix]"
# 예시
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
에서 질문을 볼 수 없기 때문에 그냥 계속 실행하고 싶을 수 있습니다. 여전히 stderr
에 오류가 출력되므로 오류를 놓칠 걱정은 없습니다.
추가 프로젝트 시드 옵션
프로젝트를 시드하는 방식을 변경할 수 있는 몇 가지 환경 플래그가 있습니다.
-
SIZE
: 기본값은8
, 최대값:32
. 생성할 프로젝트 수. -
LARGE_PROJECTS
: 기본값은 false. 설정하면 테스트에 도움이 되도록 6개의 큰 프로젝트를 복제합니다. -
FORK
: 기본값은 false.true
로 설정하면torvalds/linux
를 다섯 번 포크합니다. 기존 프로젝트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
한 디렉토리 안에 여러 테스트를 실행하려면:
- RSpec 테스트를 테스트하려면
bin/rake spec/requests/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 목록 생성
초기 목록을 생성하는 한 가지 방법은 Rake 작업 rubocop:todo:generate
를 실행하는 것입니다:
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 규칙이 음소거됨을 의미합니다 (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 에셋을 컴파일하고 최소화하고, 모든 다른 프런트엔드 에셋(이미지, 글꼴 등)과 함께 /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_WIDTH
및 SPRITESHEET_HEIGHT
상수를 업데이트하십시오.
프로젝트 템플릿 업데이트
GitLab 팀 구성원을 위한 프로젝트 템플릿 기여를 참조하세요(project_templates.md#for-gitlab-team-members).
경로 목록 생성
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
패키지의 일부 기능을 사용하기 때문에 스키마 파싱기 및 도우미 메서드가 사용됩니다.
콘텐츠를 편집하려면 다음을 편집해야 할 수 있습니다:
- 템플릿.
tooling/graphql/docs/templates/default.md.haml
에서 템플릿을 편집할 수 있습니다. 실제 렌더러는Tooling::Graphql::Docs::Renderer
에 있습니다. - 코드의 적용 가능한
description
필드는 다음을 업데이트하는데 사용됩니다: 기계 판독 가능한 스키마 파일 업데이트.
@parsed_schema
는 graphql-docs
패키지에서 사용되는 인스턴스 변수이며, 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 클라이언트 업데이트
참고:
이 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 키를 추가할 수 있습니다.
-
.pub
파일 확장자를 가진 SSH 공개 키 파일이 포함된 공개 원격 Git 저장소를 찾습니다. -
/tmp/
디렉토리에 원격 Git 저장소를 저장할 공간이 충분한지 확인합니다. -
금지된 키 목록에 SSH 키를 추가하려면 다음 명령을 실행하고
GIT_URL
및OUTPUT_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에서 읽혀지고 메모리에 보관됩니다. 이 파일의 크기를 1메가바이트 이상으로 늘리는 것은 권장되지 않습니다.
현재 탐색 구조를 YAML로 출력
이 작업은 현재 환경 설정(라이선스, 기능 플래그, 프로젝트/그룹)에 의존하므로 실행마다 또는 환경에 따라 출력이 달라질 수 있습니다. 나중에 출력을 표준화하는 것을 고려할 수 있습니다.
제품, UX 및 기술 문서 작성팀은 GitLab 전체 탐색을 감사할 수 있는 방법이 필요하지만, lib/sidebars
의 코드를 직접 검토하는 것에 익숙하지 않을 수도 있습니다. gitlab:nav:dump_structure
Rake 작업을 통해 전체 탐색 구조를 YAML로 덤프할 수 있습니다.
bundle exec rake gitlab:nav:dump_structure