Help us learn about your current experience with the documentation. Take the survey.

已弃用的关键字

部分 CI/CD 关键字已被弃用,不再推荐使用。

这些关键字仍可使用以确保向后兼容性, 但可能在未来的主要版本中被移除。

全局定义的 imageservicescachebefore_scriptafter_script

全局定义 imageservicescachebefore_scriptafter_script 已被弃用。 请改用 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 已被弃用。要控制何时将作业添加到流水线,请改用 rules

您可以使用 onlyexcept 来控制何时将作业添加到流水线。

  • 使用 only 定义作业何时运行。
  • 使用 except 定义作业何时运行。

only:refs / except:refs

only:refsexcept:refs 已被弃用。要使用 refs、正则表达式或变量 来控制何时将作业添加到流水线,请改用 rules:if

您可以使用 only:refsexcept:refs 关键字,根据分支名称或流水线类型 来控制何时将作业添加到流水线。

关键字类型:作业关键字。您只能将其作为作业的一部分使用。

支持的值:包含任意数量的数组:

  • 分支名称,例如 mainmy-feature-branch
  • 匹配分支名称的正则表达式,例如 /^feature-.*/
  • 以下关键字:
    描述
    api pipelines API 触发的流水线。
    branches 当流水线的 Git 引用是一个分支时。
    chat 使用 GitLab ChatOps 命令创建的流水线。
    external 当您使用 GitLab 以外的 CI 服务时。
    external_pull_requests 当 GitHub 上的外部拉取请求被创建或更新时(参见 外部拉取请求的流水线)。
    merge_requests 在创建或更新合并请求时创建的流水线。启用 合并请求流水线合并结果流水线合并列车
    pipelines 通过 使用 API 和 CI_JOB_TOKENtrigger 关键字创建的 多项目流水线
    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 的作业 也会在定时流水线上运行。添加 except: schedules 可以防止配置了 only: branches 的作业 在定时流水线上运行。

  • 没有使用其他关键字的 onlyexcept 等同于 only: refsexcept: refs。例如,以下两个作业配置具有相同的行为:

    job1:
      script: echo
      only:
        - branches
    
    job2:
      script: echo
      only:
        refs:
          - branches
  • 如果作业不使用 onlyexceptrules,则默认情况下 only 设置为 branchestags

    例如,job1job2 是等效的:

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

only:variables / except:variables

only:variablesexcept:variables 已被弃用。要使用 refs、正则表达式或变量 来控制何时将作业添加到流水线,请改用 rules:if

您可以使用 only:variablesexcept:variables 关键字,根据 CI/CD 变量 的状态 来控制何时将作业添加到流水线。

关键字类型:作业关键字。您只能将其作为作业的一部分使用。

支持的值

only:variables 的示例

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

only:changes / except:changes

only:changesexcept:changes 已被弃用。要使用已更改的文件来控制 何时将作业添加到流水线,请改用 rules:changes

当 Git push 事件修改文件时,使用 changes 关键字与 only 一起运行作业, 或与 except 一起跳过作业。

在具有以下 refs 的流水线中使用 changes

  • branches
  • external_pull_requests
  • merge_requests

关键字类型:作业关键字。您只能将其作为作业的一部分使用。

支持的值:包含任意数量的数组:

  • 文件路径。
  • 通配符路径,用于:
    • 单个目录,例如 path/to/directory/*
    • 目录及其所有子目录,例如 path/to/directory/**/*
  • 所有具有相同扩展名或多个扩展名的文件的通配符 glob 路径,例如 *.mdpath/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"

其他详细信息

  • 如果任何匹配的文件被更改(OR 操作),changes 解析为 true
  • Glob 模式使用 Ruby 的 File.fnmatch标志 File::FNM_PATHNAME | File::FNM_DOTMATCH | File::FNM_EXTGLOB 进行解释。
  • 如果您使用除 branchesexternal_pull_requestsmerge_requests 以外的 refs, changes 无法确定给定文件是新文件还是旧文件,并且始终返回 true
  • 如果您将 only: changes 与其他 refs 一起使用,作业会忽略更改并始终运行。
  • 如果您将 except: changes 与其他 refs 一起使用,作业会忽略更改并且从不运行。

相关主题

only:kubernetes / except:kubernetes

only:kubernetesexcept:kubernetes 已被弃用。要控制当 Kubernetes 服务在项目中处于活动状态时 是否将作业添加到流水线,请改用 rules:ifCI_KUBERNETES_ACTIVE 预定义的 CI/CD 变量。

使用 only:kubernetesexcept:kubernetes 来控制当 Kubernetes 服务在项目中处于活动状态时 是否将作业添加到流水线。

关键字类型:作业特定的。您只能将其作为作业的一部分使用。

支持的值

  • kubernetes 策略仅接受 active 关键字。

only:kubernetes 的示例

deploy:
  only:
    kubernetes: active

在此示例中,deploy 作业仅在 Kubernetes 服务在项目中处于活动状态时运行。

GitLab Pages 的 publish 关键字和 pages 作业名称

作业级别的 publish 关键字和 GitLab Pages 部署作业的 pages 作业名称已被弃用。

要控制页面部署,请改用 pagespages.publish 关键字。