CI 구성 내부
Workflow rules
GitLab 프로젝트의 파이프라인은 GitLab CI/CD의 workflow:rules
키워드 기능을 사용하여 생성됩니다.
다음 시나리오에 대해 항상 파이프라인이 생성됩니다.
-
main
브랜치, 스케줄, 푸시, 머지 등을 포함합니다. - Merge Request.
- 태그.
- Stable,
auto-deploy
, 보안 브랜치.
파이프라인 생성은 다음 CI/CD 변수에 의해도 영향을 받습니다.
-
$FORCE_GITLAB_CI
가 설정되어 있으면 파이프라인이 생성됩니다. 사용을 권장하지 않습니다. $FORCE_GITLAB_CI 사용을 피하세요를 참조하세요. -
$GITLAB_INTERNAL
이 설정되어 있지 않으면 파이프라인이 생성되지 않습니다.
다른 경우에는 (예: 해당 브랜치에 MR이 없는 경우) 파이프라인이 생성되지 않습니다.
이러한 workflow 규칙의 출처는 .gitlab-ci.yml
에 정의되어 있습니다.
$FORCE_GITLAB_CI 사용을 피하세요
파이프라인은 매우 복잡하며 트리거할 파이프라인의 종류를 명확히 이해해야 합니다. 실행해야 하는 작업과 실행하지 말아야 하는 작업을 알아야 합니다.
만약 $FORCE_GITLAB_CI
를 사용하여 파이프라인을 강제로 트리거하면 어떤 종류의 파이프라인인지 정확하게 알 수 없습니다. 결과적으로 원하는 작업을 실행하지 않거나 원하지 않는 작업을 너무 많이 실행할 수 있습니다.
추가적인 맥락과 배경은 다음에서 찾을 수 있습니다. 의도치 않은 실행을 피하기 위한 일반화된 변경을 피하세요
지금 사용 중인 곳과 $FORCE_GITLAB_CI
를 사용하지 말아야 하는 곳에 대한 디렉터리은 다음과 같습니다. 지금 사용 중인 곳과 $FORCE_GITLAB_CI
를 사용하지 말아야 하는 곳에서 빠져나오려고 해야 합니다.
$FORCE_GITLAB_CI를 사용하지 않고 파이프라인을 활성화하는 방법은 다음 섹션을 참조하세요.
$FORCE_GITLAB_CI 대안
기본적으로, 우리는 서로 다른 변수를 사용하여 다양한 파이프라인을 활성화합니다.
이를 수행하는 예는 $START_AS_IF_FOSS
입니다. 교차 프로젝트 FOSS 파이프라인을 트리거하려면
$START_AS_IF_FOSS
를 설정하고, $ENABLE_RSPEC_UNIT
, $ENABLE_RSPEC_SYSTEM
등의 일련의
다른 변수들을 해당 작업에 활성화하기 위해 설정합니다.
$FORCE_GITLAB_CI에 비해 이 방법의 이점은 $START_AS_IF_FOSS
가 이러한 목적으로만 사용된다는 것입니다.
또한 이 변수를 사용하여 파이프라인의 동작을 변경하더라도 다른 종류의 파이프라인에는 영향을 미치지 않습니다.
다중 목적으로 사용되는 $FORCE_GITLAB_CI를 사용하는 경우 우리는 파이프라인이 정확히 무엇인지 알 수 없습니다.
기본 이미지
기본 이미지는 .gitlab-ci.yml
에 정의되어 있습니다.
이에는 Ruby, Go, Git, Git LFS, Chrome, Node, Yarn, PostgreSQL 및 Graphics Magick이 포함되어 있습니다.
우리 파이프라인에서 사용하는 이미지는 gitlab-org/gitlab-build-images
프로젝트에서 구성되어 있으며,
이는 여분의 이중화를 위해 gitlab/gitlab-build-images
로 push-mirror 됩니다.
빌드 이미지의 현재 버전은 “GitLab 섹션에서 사용”에서 찾을 수 있습니다.
기본 변수
미리 정의된 CI/CD 변수에 추가로, 각 파이프라인은
.gitlab-ci.yml
에 정의된 기본 변수를 포함합니다.
단계
현재 단계는 다음과 같습니다.
-
sync
: 이 단계는gitlab-org/gitlab
에서gitlab-org/gitlab-foss
로 변경 사항을 동기화하는 데 사용됩니다. -
prepare
: 이 단계에는 후속 단계의 작업에서 필요한 아티팩트를 준비하는 작업이 포함됩니다. -
build-images
: 이 단계는 후속 단계나 다운스트림 파이프라인에서 필요한 Docker 이미지를 준비하는 작업이 포함됩니다. -
fixtures
: 이 단계에는 프론트엔드 테스트에 필요한 fixtures를 준비하는 작업이 포함됩니다. -
lint
: 이 단계에는 린트 및 정적 분석 작업이 포함됩니다. -
test
: 이 단계에는 대부분의 테스트 및 DB/마이그레이션 작업이 포함됩니다. -
post-test
: 이 단계에는test
단계의 작업에서 보고서를 작성하거나 데이터를 수집하는 작업이 포함됩니다 (예: 커버리지, Knapsack 메타데이터 등). -
review
: 이 단계에는 CNG 이미지를 빌드하고, 이를 배포하며, 리뷰 앱에 대한 엔드 투 엔드 테스트를 실행하는 작업이 포함됩니다 (자세한 내용은 Review Apps를 참조하세요). Docs Review App 작업도 포함됩니다. -
qa
: 이 단계에는review
단계에서 배포된 Review App에 대한 QA 작업이 포함됩니다. -
post-qa
: 이 단계에는qa
단계의 작업에서 보고서를 작성하거나 데이터를 수집하는 작업이 포함됩니다 (예: Review App 성능 보고서). -
pages
: 이 단계에는 다양한 보고서를 GitLab Pages로 배포하는 작업이 포함됩니다 (예:coverage-ruby
,webpack-report
(여기에는 배포에 문제가 있습니다)). -
notify
: 이 단계에는 다양한 실패 사항을 Slack에 통지하는 작업이 포함됩니다.
Dependency Proxy
일부 작업에서는 Docker Hub의 이미지를 사용하는데, 여기서 우리는 이미지 경로에 ${GITLAB_DEPENDENCY_PROXY_ADDRESS}
를 사용하여
우리의 의존성 프록시에서 이미지를 가져옵니다.
기본적으로, 이 변수는 ${GITLAB_DEPENDENCY_PROXY}
의 값에서 설정됩니다.
${GITLAB_DEPENDENCY_PROXY}
는 gitlab-org
에 정의된 그룹 CI/CD 변수로
${CI_DEPENDENCY_PROXY_GROUP_IMAGE_PREFIX}/
로 설정됩니다. 즉 다음과 같이 정의된 이미지를 사용할 때:
image: ${GITLAB_DEPENDENCY_PROXY_ADDRESS}alpine:edge
gitlab-org
그룹의 프로젝트는 의존성 프록시에서 가져오고,
다른 개인 네임스페이스나 그룹에 있는 포크는 ${GITLAB_DEPENDENCY_PROXY}
가 거기에 정의되어 있지 않은 한 Docker Hub로 다시 되돌아갑니다.
프로젝트 액세스 토큰 사용자에 의해 파이프라인이 시작된 경우의 해결책
프로젝트 액세스 토큰 사용자(예: 릴리스 도구 승인자 봇
사용자로, 주 프로젝트에서 사용되는 Gitaly 버전을 자동으로 업데이트하는 사용자)에 의해 파이프라인이 시작될 때 의존성 프록시에 접근할 수 없습니다 그리고 작업은 “docker+machine” executor를 준비하는 단계에서 실패합니다.
그 문제를 해결하기 위해, 해당 경우에 의존성 프록시가 사용되지 않도록 ${GITLAB_DEPENDENCY_PROXY_ADDRESS}
변수를 재정의하는 특별한 워크플로우 규칙이 있습니다:
- if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH && $GITLAB_USER_LOGIN =~ /project_\d+_bot\d*/'
variables:
GITLAB_DEPENDENCY_PROXY_ADDRESS: ""
.gitlab-ci.yml
변수보다 그룹 레벨의 변수가 우선순위가 더 높기 때문에, 우리는 ${GITLAB_DEPENDENCY_PROXY}
변수를 직접적으로 재정의하지 않습니다.공통 작업 정의
대부분의 작업은 몇 가지 CI 정의에서 확장됩니다.
이는 .gitlab/ci/global.gitlab-ci.yml
에 정의되어 있으며, 단일 구성 키워드에 대한 범위가 있습니다.
작업 정의 | 설명 |
---|---|
.default-retry
|
unknown_failure , api_failure , runner_system_failure , job_execution_timeout , 또는 stuck_or_timeout_failure 에 대해 작업을 다시 시도할 수 있습니다.
|
.default-before_script
| Ruby/Rails 작업에 적합한 기본 before_script 정의를 사용할 수 있게 합니다. 이 정의는 데이터베이스가 실행되어야 하는 Ruby/Rails 작업(예: 테스트)에 필요합니다.
|
.repo-from-artifacts
| 작업이 복제하는 대신 clone-gitlab-repo 에서 아티팩트에서 리포지터리를 가져올 수 있게 합니다. 이는 GitLab.com Gitaly 부하를 줄이고, 아티팩트에서 다운로드하는 것이 복제보다 빠르기 때문에 속도를 약간 향상시킬 수 있습니다. 이는 일반적으로 가능한 한 빨리 모든 작업을 시작하길 원하기 때문에,needs: [] 와 함께 사용되지 않도록 주의해야 합니다. 이를 사용할 때에는 일반적으로 복제보다 더 빠르게 시작되어야 하므로 작업이 다른 의존성을 가지고 있는 경우에만 사용합니다. 이 행동은 CI_FETCH_REPO_GIT_STRATEGY 를 통해 제어될 수 있습니다. 자세한 내용은 Gitaly에서 복제/다운로드하는 대신 아티팩트를 통해 리포지터리 가져오기를 참조하세요.
|
.setup-test-env-cache
| 후속 Ruby/Rails 작업의 테스트 환경을 설정하는 데 적합한 기본 cache 정의를 사용할 수 있게 합니다.
|
.ruby-cache
| Ruby 작업에 적합한 기본 cache 정의를 사용할 수 있게 합니다.
|
.static-analysis-cache
| 정적 분석 작업에 적합한 기본 cache 정의를 사용할 수 있게 합니다.
|
.ruby-gems-coverage-cache
| 커버리지 작업에 적합한 기본 cache 정의를 사용할 수 있게 합니다.
|
.qa-cache
| QA 작업에 적합한 기본 cache 정의를 사용할 수 있게 합니다.
|
.yarn-cache
|
yarn install 을 하는 프론트엔드 작업에 적합한 기본 cache 정의를 사용할 수 있게 합니다.
|
.assets-compile-cache
| 에셋을 컴파일하는 프론트엔드 작업에 적합한 기본 cache 정의를 사용할 수 있게 합니다.
|
.use-pg13
|
postgres 13, redis , 그리고 rediscluster 서비스를 사용할 수 있게 합니다(서비스의 특정 버전에 대해서는 .gitlab/ci/global.gitlab-ci.yml 를 참조하세요).
|
.use-pg13-ee
|
.use-pg13 와 동일하지만, elasticsearch 서비스도 사용합니다(서비스의 특정 버전에 대해서는 .gitlab/ci/global.gitlab-ci.yml 를 참조하세요).
|
.use-pg14
|
postgres 14, redis , 그리고 rediscluster 서비스를 사용할 수 있게 합니다(서비스의 특정 버전에 대해서는 .gitlab/ci/global.gitlab-ci.yml 를 참조하세요).
|
.use-pg14-ee
|
.use-pg14 와 동일하지만, elasticsearch 서비스도 사용합니다(서비스의 특정 버전에 대해서는 .gitlab/ci/global.gitlab-ci.yml 를 참조하세요).
|
.use-pg15
|
postgres 15, redis , 그리고 rediscluster 서비스를 사용할 수 있게 합니다(서비스의 특정 버전에 대해서는 .gitlab/ci/global.gitlab-ci.yml 를 참조하세요).
|
.use-pg15-ee
|
.use-pg15 와 동일하지만, elasticsearch 서비스도 사용합니다(서비스의 특정 버전에 대해서는 .gitlab/ci/global.gitlab-ci.yml 를 참조하세요).
|
.use-pg16
|
postgres 16, redis , 그리고 rediscluster 서비스를 사용할 수 있게 합니다(서비스의 특정 버전에 대해서는 .gitlab/ci/global.gitlab-ci.yml 를 참조하세요).
|
.use-pg16-ee
|
.use-pg16 와 동일하지만, elasticsearch 서비스도 사용합니다(서비스의 특정 버전에 대해서는 .gitlab/ci/global.gitlab-ci.yml 를 참조하세요).
|
.use-kaniko
| Docker 이미지를 빌드하기 위해 kaniko 도구를 사용할 수 있게 합니다.
|
.as-if-foss
|
FOSS_ONLY='1' CI/CD 변수를 설정하여 FOSS 프로젝트를 시뮬레이션합니다.
|
.use-docker-in-docker
| Docker in Docker를 사용할 수 있게 합니다. 자세한 내용은 CI/CD 구성에 대한 핸드북을 참조하세요. |
rules
, if:
조건 및 changes:
패턴
우리는 rules
키워드를 광범위하게 사용하고 있습니다.
모든 rules
정의는
rules.gitlab-ci.yml
에 정의되어 있으며, 그런 다음 개별 작업에서 extends
를 통해 포함됩니다.
rules
정의는 if:
조건 및 changes:
패턴으로 구성되어 있으며, 이는 또한
rules.gitlab-ci.yml
에 정의되어 있으며 YAML 앵커를 통해 rules
정의에 포함됩니다.
if:
조건
if: 조건
| 설명 | 참고 |
---|---|---|
if-not-canonical-namespace
| 프로젝트가 공식 네임스페이스 (gitlab-org/ 및 gitlab-cn/ ) 또는 보안 (gitlab-org/security ) 네임스페이스에 속하지 않는 경우 일치합니다.
|
when: on_success 또는 when: manual 을 사용하여 포크용 작업을 만들거나 포크용 작업을 만들지 않도록 하려면 사용하십시오.
|
if-not-ee
| 프로젝트가 EE가 아닌 경우 일치합니다 (즉, 프로젝트 이름이 gitlab 또는 gitlab-ee 가 아닌 경우).
| FOSS 프로젝트에서만 작업을 만들려면 when: on_success 또는 when: manual 을 사용하거나 프로젝트가 EE인 경우 작업을 만들지 않도록 하려면 when: never 을 사용하십시오.
|
if-not-foss
| 프로젝트가 FOSS가 아닌 경우 일치합니다 (즉, 프로젝트 이름이 gitlab-foss , gitlab-ce , 또는 gitlabhq 가 아닌 경우).
| EE 프로젝트에서만 작업을 만들려면 when: on_success 또는 when: manual 을 사용하거나 프로젝트가 FOSS인 경우 작업을 만들지 않도록 하려면 when: never 을 사용하십시오.
|
if-default-refs
| 파이프라인이 master , main , /^[\d-]+-stable(-ee)?$/ (안정적인 브랜치), /^\d+-\d+-auto-deploy-\d+$/ (자동 배포 브랜치), /^security\// (보안 브랜치), Merge Request 및 태그용인 경우 일치합니다.
| 이 기본 구성의 브랜치에 대해서는 작업이 생성되지 않음에 유의하십시오. |
if-master-refs
| 현재 브랜치가 master 또는 main 인 경우 일치합니다.
| |
if-master-push
| 현재 브랜치가 master 또는 main 이고 파이프라인 소스가 push 인 경우 일치합니다.
| |
if-master-schedule-maintenance
| 현재 브랜치가 master 또는 main 이고 파이프라인이 2시간마다 실행되는 경우 일치합니다.
| |
if-master-schedule-nightly
| 현재 브랜치가 master 또는 main 이고 파이프라인이 매일 밤 실행되는 경우 일치합니다.
| |
if-auto-deploy-branches
| 현재 브랜치가 자동 배포 브랜치인 경우 일치합니다. | |
if-master-or-tag
| 파이프라인이 master 또는 main 브랜치 또는 태그용인 경우 일치합니다.
| |
if-merge-request
| 파이프라인이 Merge Request용인 경우 일치합니다. | |
if-merge-request-title-as-if-foss
| 파이프라인이 Merge Request용이고 MR에 레이블 ~"pipeline:run-as-if-foss"가 있는 경우 일치합니다. | |
if-merge-request-title-update-caches
| 파이프라인이 Merge Request용이고 MR에 레이블 ~"pipeline:update-cache"가 있는 경우 일치합니다. | |
if-merge-request-labels-run-all-rspec
| 파이프라인이 Merge Request용이고 MR에 레이블 ~"pipeline:run-all-rspec"가 있는 경우 일치합니다. | |
if-merge-request-labels-run-cs-evaluation
| 파이프라인이 Merge Request용이고 MR에 레이블 ~"pipeline:run-CS-evaluation"가 있는 경우 일치합니다. | |
if-security-merge-request
| 파이프라인이 보안 Merge Request용인 경우 일치합니다. | |
if-security-schedule
| 파이프라인이 보안 예약 파이프라인용인 경우 일치합니다. | |
if-nightly-master-schedule
| 파이프라인이 $NIGHTLY 로 설정된 master 예약 파이프라인용인 경우 일치합니다.
| |
if-dot-com-gitlab-org-schedule
| GitLab.com의 gitlab-org 그룹에 대한 예정된 파이프라인에 대한 작업 생성을 제한합니다.
| |
if-dot-com-gitlab-org-master
| GitLab.com의 gitlab-org 그룹에 대한 master 또는 main 브랜치에 대한 작업 생성을 제한합니다.
| |
if-dot-com-gitlab-org-merge-request
| GitLab.com의 gitlab-org 그룹에 대한 Merge Request에 대한 작업 생성을 제한합니다.
| |
if-dot-com-gitlab-org-and-security-tag
| GitLab.com의 gitlab-org 및 gitlab-org/security 그룹에 대한 태그에 대한 작업 생성을 제한합니다.
| |
if-dot-com-gitlab-org-and-security-merge-request
| GitLab.com의 gitlab-org 및 gitlab-org/security 그룹에 대한 Merge Request에 대한 작업 생성을 제한합니다.
| |
if-dot-com-gitlab-org-and-security-tag
| GitLab.com의 gitlab-org 및 gitlab-org/security 그룹에 대한 태그에 대한 작업 생성을 제한합니다.
| |
if-dot-com-ee-schedule
| GitLab.com의 gitlab-org/gitlab 프로젝트에 대한 예정된 파이프라인에 대한 작업 생성을 제한합니다.
|
changes:
패턴
changes: 패턴
| 설명 |
---|---|
ci-patterns
| CI 구성 관련 변경에 대한 작업만 생성합니다. |
ci-build-images-patterns
|
build-images 단계와 관련된 CI 구성 관련 변경에 대한 작업만 생성합니다.
|
ci-review-patterns
|
review 단계와 관련된 CI 구성 관련 변경에 대한 작업만 생성합니다.
|
ci-qa-patterns
|
qa 단계와 관련된 CI 구성 관련 변경에 대한 작업만 생성합니다.
|
yaml-lint-patterns
| YAML 관련 변경에 대한 작업만 생성합니다. |
docs-patterns
| 문서 관련 변경에 대한 작업만 생성합니다. |
frontend-dependency-patterns
| 프론트엔드 의존성이 업데이트될 때 (예: package.json 및 yarn.lock 의 변경) 작업을 생성합니다.
|
frontend-patterns-for-as-if-foss
| FOSS에 영향을 미치는 프론트엔드 관련 변경에 대한 작업만 생성합니다. |
backend-patterns
| 백엔드 관련 변경에 대한 작업만 생성합니다. |
db-patterns
| DB 관련 변경에 대한 작업만 생성합니다. |
backstage-patterns
| 백스테이지 관련 변경에 대한 작업만 생성합니다 (즉, Danger, fixtures, RuboCop, specs). |
code-patterns
| 코드 관련 변경에 대한 작업만 생성합니다. |
qa-patterns
| QA 관련 변경에 대한 작업만 생성합니다. |
code-backstage-patterns
|
code-patterns 과 backstage-patterns 의 조합입니다.
|
code-qa-patterns
|
code-patterns 과 qa-patterns 의 조합입니다.
|
code-backstage-qa-patterns
|
code-patterns , backstage-patterns , 및 qa-patterns 의 조합입니다.
|
static-analysis-patterns
| 정적 분석 구성 관련 변경에 대한 작업만 생성합니다. |
Best Practices
extends:
, <<: *xyz
(YAML anchors), 또는 !reference
사용 시기
주요 포인트
-
해시를 확장해야 하는 경우
extends
를 사용해야 합니다. -
배열을 확장해야 하는 경우
!reference
또는YAML anchors
를 사용해야 하며, 마지막 수단으로 활용됩니다. - 더 복잡한 경우(예: 배열 내에서 해시를 확장, 해시 내에서 배열을 확장하는 경우 등)에는
!reference
나YAML anchors
를 사용해야 합니다.
extends
와 YAML anchors
는 무엇을 할 수 있나요?
extends
- 해시에 대한 깊은 Merge
- 배열에 대한 Merge 없음. 덮어씌웁니다 (출처)
YAML anchors
- 해시에 대한 깊은 Merge 없음, 그러나 해시를 확장하는 데 사용될 수 있음 (아래의 예제 참조)
- 배열에 대한 Merge 없음, 그러나 배열을 확장하는 데 사용될 수 있음 (아래의 예제 참조)
훌륭한 예시
아래 예시는 !reference
와 YAML anchors
를 사용하여 복잡한 YAML 데이터 구조를 확장하는 방법을 보여줍니다:
.strict-ee-only-rules:
# `rules`는 해시의 배열입니다
rules:
- if: '$CI_PROJECT_NAME !~ /^gitlab(-ee)?$/ '
when: never
# `if-security-merge-request`는 해시입니다
.if-security-merge-request: &if-security-merge-request
if: '$CI_PROJECT_NAMESPACE == "gitlab-org/security"'
# `code-qa-patterns`는 배열입니다
.code-qa-patterns: &code-qa-patterns
- "{package.json,yarn.lock}"
- ".browserslistrc"
- "babel.config.js"
- "jest.config.{base,integration,unit}.js"
.qa:rules:as-if-foss:
rules:
# 우리는 `rules` 배열을 직접 해시의 배열로 확장합니다
- !reference [".strict-ee-only-rules", rules]
# 단일 배열 항목을 해시로 확장합니다
- <<: *if-security-merge-request
# `changes`는 배열이므로 전체 배열을 전달합니다
changes: *code-qa-patterns
qa:selectors-as-if-foss:
# 우리는 이 작업에서 .qa:rules:as-if-foss의 규칙을 포함합니다
extends:
- .qa:rules:as-if-foss
.fast-no-clone-job
작업 확장
카노니컬 프로젝트의 브랜치 다운로드에는 20에서 30초가 소요됩니다.
일부 작업은 제한된 파일 수만 필요로 하며, GitLab API를 통해 다운로드할 수 있습니다.
작업 git clone
/git fetch
을 건너뛸 수 있습니다.
시나리오 1: 작업에 before_script
가 정의되지 않은 경우
부모 섹션에 적용됩니다.
.fast-no-clone-job
를 확장하면 됩니다:
이전:
# 참고: 작업에 `extends:`가 없습니다
a-job:
script:
- source scripts/rspec_helpers.sh scripts/slack
- echo "git clone이 필요 없습니다!"
이후:
# 참고: 작업에 `extends:`가 없습니다
a-job:
extends:
- .fast-no-clone-job
variables:
FILES_TO_DOWNLOAD: >
scripts/rspec_helpers.sh
scripts/slack
script:
- source scripts/rspec_helpers.sh scripts/slack
- echo "git clone이 필요 없습니다!"
시나리오 2: 작업이나 작업이 확장하는 데 이미 before_script
블록이 정의된 경우
이 시나리오에는 다음과 같이 해야 합니다:
- 첫 번째 시나리오와 같이
.fast-no-clone-job
를 확장합니다(이렇게 하면FILES_TO_DOWNLOAD
변수가 다른 변수와 Merge됩니다) - 작업에 사용할
before_script
에서.fast-no-clone-job
의before_script
섹션이 참조되도록 합니다.
이전:
.base-job:
before_script:
echo "Hello from .base-job"
a-job:
extends:
- .base-job
script:
- source scripts/rspec_helpers.sh scripts/slack
- echo "git clone이 필요 없습니다!"
이후:
.base-job:
before_script:
echo "Hello from .base-job"
a-job:
extends:
- .base-job
- .fast-no-clone-job
variables:
FILES_TO_DOWNLOAD: >
scripts/rspec_helpers.sh
scripts/slack
before_script:
- !reference [".fast-no-clone-job", before_script]
- !reference [".base-job", before_script]
script:
- source scripts/rspec_helpers.sh scripts/slack
- echo "git clone이 필요 없습니다!"
주의사항
- 이 패턴은 스크립트가 리포지터리에 액세스하기 위해
git
를 필요로 하는 경우 작동하지 않습니다. 왜냐하면 클론이나 가져오기 없이 우리는 리포지터리를 갖고 있지 않기 때문입니다. - 이 패턴을 사용하는 작업은
curl
을 사용할 수 있어야 합니다. - 작업에서
bundle install
을 실행해야 하는 경우(BUNDLE_ONLY
를 사용하더라도), 다음을 수행해야 합니다:-
gitlab-org/gitlab
프로젝트에 저장된 gem을 다운로드합니다.- 이러한 용도로
download_local_gems
셸 명령을 사용할 수 있습니다.
- 이러한 용도로
-
Gemfile
,Gemfile.lock
,Gemfile.checksum
(적용 가능한 경우)을 포함시킵니다.
-
이 패턴이 사용되는 곳은 어디인가요?
- 현재 우리는 다음 작업에 대해 이 패턴을 사용하고 있으며, 이 작업은 개인 리포지터리를 차단하지 않습니다:
- 다음을 위한
review-build-cng-env
:GITALY_SERVER_VERSION
GITLAB_ELASTICSEARCH_INDEXER_VERSION
GITLAB_KAS_VERSION
GITLAB_PAGES_VERSION
GITLAB_SHELL_VERSION
scripts/trigger-build.rb
VERSION
- 다음을 위한
review-deploy
:GITALY_SERVER_VERSION
GITLAB_SHELL_VERSION
scripts/review_apps/review-apps.sh
scripts/review_apps/seed-dast-test-data.sh
VERSION
- 다음을 위한
rspec:coverage
:config/bundler_setup.rb
Gemfile
Gemfile.checksum
Gemfile.lock
scripts/merge-simplecov
spec/simplecov_env_core.rb
spec/simplecov_env.rb
- 다음을 위한
prepare-as-if-foss-env
:scripts/setup/generate-as-if-foss-env.rb
- 다음을 위한
또한, 이 패턴을 사용할 때 항상 scripts/utils.sh
가 API를 통해 다운로드됩니다(이 파일에는 .fast-no-clone-job
의 코드가 포함되어 있습니다).
Runner 태그
GitLab.com에서는 권한이 없는 러너와 권한이 있는 러너를 모두 사용할 수 있습니다. gitlab-org
그룹의 프로젝트 및 해당 프로젝트의 포크에 대해 작업을 할 때, 다음 태그 중 하나만 작업에 추가해야 합니다:
-
gitlab-org
: 작업은 무작위로 권한이 있는 러너와 권한이 없는 러너를 사용합니다. -
gitlab-org-docker
: 작업은 권한이 있는 러너를 사용해야 합니다. Docker-in-Docker 지원이 필요한 경우gitlab-org-docker
를gitlab-org
대신 사용하세요.
gitlab-org-docker
태그는 위의 .use-docker-in-docker
작업 정의에 추가됩니다.
포크 호환성을 보장하기 위해, gitlab-org
와 gitlab-org-docker
를 동시에 사용하지 않도록 주의하세요. 어떠한 인스턴스 러너도 gitlab-org
와 gitlab-org-docker
태그를 모두 가지고 있지 않습니다. gitlab-org
프로젝트의 포크에 대해서는 두 태그가 모두 제공되면 일치하는 러너가 없기 때문에 작업이 멈출 수 있습니다.
더 많은 정보는 GitLab 리포지터리 핸드북 페이지를 참조하세요.