Deprecated 키워드
Deprecated 키워드
CI/CD 키워드 중에는 deprecated 처리되어 더 이상 사용을 권장하지 않는 것들이 있어요. 다만 호환성을 위해 아직 동작은 하지만, 향후 주요 마일스톤에서 제거될 수 있다는 점을 알아 두는 게 좋습니다. 이 문서는 deprecated 키워드별로 어떤 키워드로 대체해야 하는지를 정리합니다.
출처: 문서
본문
일부 CI/CD 키워드는 deprecated 처리되었으며 더 이상 사용을 권장하지 않습니다.
이 키워드들은 하위 호환성을 보장하기 위해 여전히 사용할 수 있지만, 향후 주요 마일스톤에서 제거될 수 있습니다.
전역 정의된 image, services, cache, before_script, after_script
image, services, cache, before_script, after_script를 전역으로 정의하는 것은 deprecated입니다. default를 대신 사용하세요.
예를 들어:
default:
image: ruby:3.0
services:
- docker:dind
cache:
paths: [vendor/]
before_script:
- bundle config set path vendor/bundle
- bundle install
after_script:
- rm -rf tmp/
only / except
only와except는 deprecated입니다. 잡을 파이프라인에 추가할 시점을 제어하려면rules를 대신 사용하세요.
only와 except를 사용해 잡을 파이프라인에 추가할 시점을 제어할 수 있습니다.
only는 잡이 실행되는 시점을 정의할 때 사용합니다.except는 잡이 실행되지 않는 시점을 정의할 때 사용해요.
only:refs / except:refs
only:refs와except:refs는 deprecated입니다. refs, 정규 표현식, 또는 변수로 잡을 파이프라인에 추가할 시점을 제어하려면rules:if를 대신 사용하세요.
only:refs와 except:refs 키워드로 브랜치 이름이나 파이프라인 유형을 기반으로 잡을 파이프라인에 추가할 시점을 제어할 수 있습니다.
키워드 유형: 잡 키워드. 잡의 일부로만 사용할 수 있어요.
지원되는 값: 다음 중 원하는 만큼 포함하는 배열.
- 브랜치 이름. 예:
main또는my-feature-branch. - 브랜치 이름과 일치하는 정규 표현식. 예:
/^feature-.*/. - 다음 키워드:
| 값 | 설명 |
|---|---|
api |
pipelines API로 트리거된 파이프라인. |
branches |
파이프라인의 Git 참조가 브랜치일 때. |
chat |
GitLab ChatOps 명령으로 만들어진 파이프라인. |
external |
GitLab 이외의 CI 서비스를 사용할 때. |
external_pull_requests |
GitHub에서 외부 풀 리퀘스트가 생성되거나 업데이트될 때 (외부 풀 리퀘스트용 파이프라인 참고). |
merge_requests |
머지 리퀘스트가 생성되거나 업데이트될 때 만들어진 파이프라인. 머지 리퀘스트 파이프라인, 머지 결과 파이프라인, 머지 트레인을 활성화합니다. |
pipelines |
API에서 CI_JOB_TOKEN 사용 또는 trigger 키워드로 만들어진 멀티-프로젝트 파이프라인. |
pushes |
브랜치와 태그를 포함해 git push 이벤트로 트리거된 파이프라인. |
schedules |
예약 파이프라인. |
tags |
파이프라인의 Git 참조가 태그일 때. |
triggers |
트리거 토큰으로 만들어진 파이프라인. |
web |
GitLab UI의 프로젝트 Build > Pipelines 섹션에서 New pipeline을 선택해 만들어진 파이프라인. |
only:refs와 except:refs 예시:
job1:
script: echo
only:
- main
- /^issue-.*$/
- merge_requests
job2:
script: echo
except:
- main
- /^stable-branch.*$/
- schedules
추가 세부 사항:
- 예약 파이프라인은 특정 브랜치에서 실행되므로,
only: branches로 구성된 잡도 예약 파이프라인에서 실행됩니다.only: branches가 있는 잡이 예약 파이프라인에서 실행되지 않게 하려면except: schedules를 추가하세요. - 다른 키워드 없이 사용된
only또는except는only: refs또는except: refs와 동일합니다. 예를 들어 다음 두 잡 구성은 같은 동작을 합니다.
job1:
script: echo
only:
- branches
job2:
script: echo
only:
refs:
- branches
- 잡이
only,except,rules을 사용하지 않으면 기본적으로only가branches와tags로 설정됩니다. 예를 들어job1과job2는 동일합니다.
job1:
script: echo "test"
job2:
script: echo "test"
only:
- branches
- tags
only:variables / except:variables
only:variables와except:variables는 deprecated입니다. refs, 정규 표현식, 또는 변수로 잡을 파이프라인에 추가할 시점을 제어하려면rules:if를 대신 사용하세요.
only:variables 또는 except:variables 키워드로 CI/CD 변수의 상태를 기반으로 잡을 파이프라인에 추가할 시점을 제어할 수 있습니다.
키워드 유형: 잡 키워드. 잡의 일부로만 사용할 수 있어요.
지원되는 값:
- CI/CD 변수 표현식의 배열.
only:variables 예시:
deploy:
script: cap staging deploy
only:
variables:
- $RELEASE == "staging"
- $STAGING
only:changes / except:changes
only:changes와except:changes는 deprecated입니다. 변경된 파일로 잡을 파이프라인에 추가할 시점을 제어하려면rules:changes를 대신 사용하세요.
Git push 이벤트가 파일을 수정할 때 잡을 실행하려면 only와 함께 changes 키워드를, 잡을 건너뛰려면 except와 함께 사용합니다.
changes는 다음 refs가 있는 파이프라인에서 사용합니다.
branchesexternal_pull_requestsmerge_requests
키워드 유형: 잡 키워드. 잡의 일부로만 사용할 수 있어요.
지원되는 값: 다음 중 원하는 만큼 포함하는 배열.
- 파일 경로.
- 다음을 위한 와일드카드 경로: 단일 디렉터리(예:
path/to/directory/*). 디렉터리와 모든 하위 디렉터리(예:path/to/directory/**/*). - 같은 확장자나 여러 확장자를 가진 모든 파일을 위한 와일드카드 glob 경로. 예:
*.md또는path/to/directory/*.{rb,py,sh}. - 큰따옴표로 감싼, 루트 디렉터리 또는 모든 디렉터리의 파일을 위한 와일드카드 경로. 예:
"*.json"또는"**/*.json".
only:changes 예시:
docker build:
script: docker build -t my-image:$CI_COMMIT_REF_SLUG .
only:
refs:
- branches
changes:
- Dockerfile
- docker/scripts/*
- dockerfiles/**/*
- more_scripts/*.{rb,py,sh}
- "**/*.json"
추가 세부 사항:
changes는 일치하는 파일 중 하나라도 변경되면true로 평가됩니다(OR연산).- Glob 패턴은 Ruby의
File.fnmatch와 플래그File::FNM_PATHNAME | File::FNM_DOTMATCH | File::FNM_EXTGLOB로 해석됩니다. branches,external_pull_requests,merge_requests이외의 refs를 사용하면changes는 주어진 파일이 새 것인지 오래된 것인지 판단할 수 없어 항상true를 반환합니다.- 다른 refs와 함께
only: changes를 사용하면 잡이 changes를 무시하고 항상 실행됩니다. - 다른 refs와 함께
except: changes를 사용하면 잡이 changes를 무시하고 절대 실행되지 않습니다.
관련 주제:
only:kubernetes / except:kubernetes
only:kubernetes와except:kubernetes는 deprecated입니다. 프로젝트에서 Kubernetes 서비스가 활성 상태일 때 잡이 파이프라인에 추가되는지를 제어하려면CI_KUBERNETES_ACTIVE사전 정의 CI/CD 변수와 함께rules:if를 대신 사용하세요.
only:kubernetes 또는 except:kubernetes로 프로젝트에서 Kubernetes 서비스가 활성 상태일 때 잡이 파이프라인에 추가되는지를 제어합니다.
키워드 유형: 잡 전용. 잡의 일부로만 사용할 수 있어요.
지원되는 값:
kubernetes전략은active키워드만 받습니다.
only:kubernetes 예시:
deploy:
only:
kubernetes: active
이 예시에서 deploy 잡은 프로젝트에서 Kubernetes 서비스가 활성 상태일 때만 실행됩니다.
GitLab Pages용 publish 키워드와 pages 잡 이름
GitLab Pages 배포 잡의 잡 수준 publish 키워드와 pages 잡 이름은 deprecated입니다.
pages 배포를 제어하려면 pages와 pages.publish 키워드를 대신 사용하세요.
environment:kubernetes:namespace와 environment:kubernetes:flux_resource_path
environment:kubernetes:namespace와environment:kubernetes:flux_resource_path는kubernetes아래에 직접 사용하면 deprecated입니다. 대시보드 설정을 구성하려면environment:kubernetes:dashboard:namespace와environment:kubernetes:dashboard:flux_resource_path를 대신 사용하세요. 자세한 내용은environment:kubernetes를 참고하세요.
Kubernetes 대시보드 설정을 구성하는 데 environment:kubernetes:namespace와 environment:kubernetes:flux_resource_path를 사용할 수 있지만, 이를 kubernetes 섹션 아래에 직접 사용하는 것은 deprecated입니다.
키워드 유형: 잡 키워드. 잡의 일부로만 사용할 수 있어요.
environment:kubernetes:namespace와 environment:kubernetes:flux_resource_path 예시:
deploy:
environment:
name: production
kubernetes:
agent: path/to/agent/project:agent-name
namespace: my-namespace
flux_resource_path: helm.toolkit.fluxcd.io/v2/namespaces/flux-system/helmreleases/helm-release
environment:kubernetes:dashboard:namespace와 environment:kubernetes:dashboard:flux_resource_path 예시:
deploy:
environment:
name: production
kubernetes:
agent: path/to/agent/project:agent-name
dashboard:
namespace: my-namespace
flux_resource_path: helm.toolkit.fluxcd.io/v2/namespaces/flux-system/helmreleases/helm-release
더 알아보기
deprecated 키워드의 핵심은 전부 rules 기반으로 대체된다는 거예요. only/except의 refs·variables·changes·kubernetes는 각각 rules:if나 rules:changes로 옮기면 되고, 전역 image·services 등은 default로, Kubernetes 대시보드 관련은 environment:kubernetes:dashboard:*로 옮기면 됩니다. 새 파이프라인을 작성한다면 처음부터 rules를 쓰는 걸 권장해요.