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

onlyexcept는 deprecated입니다. 잡을 파이프라인에 추가할 시점을 제어하려면 rules를 대신 사용하세요.

onlyexcept를 사용해 잡을 파이프라인에 추가할 시점을 제어할 수 있습니다.

  • only는 잡이 실행되는 시점을 정의할 때 사용합니다.
  • except는 잡이 실행되지 않는 시점을 정의할 때 사용해요.

only:refs / except:refs

only:refsexcept:refs는 deprecated입니다. refs, 정규 표현식, 또는 변수로 잡을 파이프라인에 추가할 시점을 제어하려면 rules:if를 대신 사용하세요.

only:refsexcept: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:refsexcept:refs 예시:

job1:
  script: echo
  only:
    - main
    - /^issue-.*$/
    - merge_requests

job2:
  script: echo
  except:
    - main
    - /^stable-branch.*$/
    - schedules

추가 세부 사항:

  • 예약 파이프라인은 특정 브랜치에서 실행되므로, only: branches로 구성된 잡도 예약 파이프라인에서 실행됩니다. only: branches가 있는 잡이 예약 파이프라인에서 실행되지 않게 하려면 except: schedules를 추가하세요.
  • 다른 키워드 없이 사용된 only 또는 exceptonly: refs 또는 except: refs와 동일합니다. 예를 들어 다음 두 잡 구성은 같은 동작을 합니다.
job1:
  script: echo
  only:
    - branches

job2:
  script: echo
  only:
    refs:
      - branches
  • 잡이 only, except, rules을 사용하지 않으면 기본적으로 onlybranchestags로 설정됩니다. 예를 들어 job1job2는 동일합니다.
job1:
  script: echo "test"

job2:
  script: echo "test"
  only:
    - branches
    - tags

only:variables / except:variables

only:variablesexcept:variables는 deprecated입니다. refs, 정규 표현식, 또는 변수로 잡을 파이프라인에 추가할 시점을 제어하려면 rules:if를 대신 사용하세요.

only:variables 또는 except:variables 키워드로 CI/CD 변수의 상태를 기반으로 잡을 파이프라인에 추가할 시점을 제어할 수 있습니다.

키워드 유형: 잡 키워드. 잡의 일부로만 사용할 수 있어요.

지원되는 값:

only:variables 예시:

deploy:
  script: cap staging deploy
  only:
    variables:
      - $RELEASE == "staging"
      - $STAGING

only:changes / except:changes

only:changesexcept:changes는 deprecated입니다. 변경된 파일로 잡을 파이프라인에 추가할 시점을 제어하려면 rules:changes를 대신 사용하세요.

Git push 이벤트가 파일을 수정할 때 잡을 실행하려면 only와 함께 changes 키워드를, 잡을 건너뛰려면 except와 함께 사용합니다.

changes는 다음 refs가 있는 파이프라인에서 사용합니다.

  • branches
  • external_pull_requests
  • merge_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:kubernetesexcept: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 배포를 제어하려면 pagespages.publish 키워드를 대신 사용하세요.

environment:kubernetes:namespaceenvironment:kubernetes:flux_resource_path

environment:kubernetes:namespaceenvironment:kubernetes:flux_resource_pathkubernetes 아래에 직접 사용하면 deprecated입니다. 대시보드 설정을 구성하려면 environment:kubernetes:dashboard:namespaceenvironment:kubernetes:dashboard:flux_resource_path를 대신 사용하세요. 자세한 내용은 environment:kubernetes를 참고하세요.

Kubernetes 대시보드 설정을 구성하는 데 environment:kubernetes:namespaceenvironment:kubernetes:flux_resource_path를 사용할 수 있지만, 이를 kubernetes 섹션 아래에 직접 사용하는 것은 deprecated입니다.

키워드 유형: 잡 키워드. 잡의 일부로만 사용할 수 있어요.

environment:kubernetes:namespaceenvironment: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:namespaceenvironment: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:ifrules:changes로 옮기면 되고, 전역 image·services 등은 default로, Kubernetes 대시보드 관련은 environment:kubernetes:dashboard:*로 옮기면 됩니다. 새 파이프라인을 작성한다면 처음부터 rules를 쓰는 걸 권장해요.