# GitLab CI/CD include examples

> 原文：[https://docs.gitlab.com/ee/ci/yaml/includes.html](https://docs.gitlab.com/ee/ci/yaml/includes.html)

*   [Single string or array of multiple values](#single-string-or-array-of-multiple-values)
*   [Re-using a `before_script` template](#re-using-a-before_script-template)
*   [Overriding external template values](#overriding-external-template-values)
*   [Using nested includes](#using-nested-includes)

# GitLab CI/CD include examples[](#gitlab-cicd-include-examples "Permalink")

除了[GitLab CI YAML 参考中](README.html)列出的[`includes`示例](README.html#include)之外，此页面还列出了`include`用法的更多变化.

## Single string or array of multiple values[](#single-string-or-array-of-multiple-values "Permalink")

您可以将额外的 YAML 文件作为单个字符串或多个值的数组包含在内. 以下示例均有效.

`include:local`方法的单个字符串暗含：

```
include: '/templates/.after-script-template.yml' 
```

Array with `include` method implied:

```
include:
  - 'https://gitlab.com/awesome-project/raw/master/.before-script-template.yml'
  - '/templates/.after-script-template.yml' 
```

具有明确指定的`include`方法的单个字符串：

```
include:
  remote: 'https://gitlab.com/awesome-project/raw/master/.before-script-template.yml' 
```

`include:remote`为单个项目的数组：

```
include:
  - remote: 'https://gitlab.com/awesome-project/raw/master/.before-script-template.yml' 
```

具有多个显式指定的`include`方法的数组：

```
include:
  - remote: 'https://gitlab.com/awesome-project/raw/master/.before-script-template.yml'
  - local: '/templates/.after-script-template.yml'
  - template: Auto-DevOps.gitlab-ci.yml 
```

数组混合语法：

```
include:
  - 'https://gitlab.com/awesome-project/raw/master/.before-script-template.yml'
  - '/templates/.after-script-template.yml'
  - template: Auto-DevOps.gitlab-ci.yml
  - project: 'my-group/my-project'
    ref: master
    file: '/templates/.gitlab-ci-template.yml' 
```

## Re-using a `before_script` template[](#re-using-a-before_script-template "Permalink")

在以下示例中， `.before-script-template.yml`的内容将与`.gitlab-ci.yml`的内容一起自动获取和评估.

`https://gitlab.com/awesome-project/raw/master/.before-script-template.yml`内容：

```
before_script:
  - apt-get update -qq && apt-get install -y -qq sqlite3 libsqlite3-dev nodejs
  - gem install bundler --no-document
  - bundle install --jobs $(nproc)  "${FLAGS[@]}" 
```

`.gitlab-ci.yml`内容：

```
include: 'https://gitlab.com/awesome-project/raw/master/.before-script-template.yml'

rspec:
  script:
    - bundle exec rspec 
```

## Overriding external template values[](#overriding-external-template-values "Permalink")

以下示例显示了特定的 YAML 定义的变量以及`.gitlab-ci.yml`自定义的包含文件中`production`作业的详细信息.

`https://company.com/autodevops-template.yml`内容：

```
variables:
  POSTGRES_USER: user
  POSTGRES_PASSWORD: testing_password
  POSTGRES_DB: $CI_ENVIRONMENT_SLUG

production:
  stage: production
  script:
    - install_dependencies
    - deploy
  environment:
    name: production
    url: https://$CI_PROJECT_PATH_SLUG.$KUBE_INGRESS_BASE_DOMAIN
  only:
    - master 
```

`.gitlab-ci.yml`内容：

```
include: 'https://company.com/autodevops-template.yml'

image: alpine:latest

variables:
  POSTGRES_USER: root
  POSTGRES_PASSWORD: secure_password

stages:
  - build
  - test
  - production

production:
  environment:
    url: https://domain.com 
```

在这种情况下，变量`POSTGRES_USER`和`POSTGRES_PASSWORD`以及`autodevops-template.yml`定义的`production`作业的环境 URL 已被`.gitlab-ci.yml`定义的新值覆盖.

合并使您可以扩展和覆盖字典映射，但是不能向包含的数组添加或修改项目. 例如，要将其他项目添加到生产作业脚本中，必须重复现有的脚本项目：

`https://company.com/autodevops-template.yml`内容：

```
production:
  stage: production
  script:
    - install_dependencies
    - deploy 
```

`.gitlab-ci.yml`内容：

```
include: 'https://company.com/autodevops-template.yml'

stages:
  - production

production:
  script:
    - install_dependencies
    - deploy
    - notify_owner 
```

在这种情况下，如果未在`.gitlab-ci.yml`重复`install_dependencies`和`deploy` ，则它们将不会成为组合 CI 配置中`production`作业脚本的一部分.

## Using nested includes[](#using-nested-includes "Permalink")

以下示例显示了如何使用不同方法的组合从不同来源嵌套包含对象.

在此示例中， `.gitlab-ci.yml`本地包含文件`/.gitlab-ci/another-config.yml` ：

```
include:
  - local: /.gitlab-ci/another-config.yml 
```

`/.gitlab-ci/another-config.yml`包含一个模板和另一个项目中的`/templates/docker-workflow.yml`文件：

```
include:
  - template: Bash.gitlab-ci.yml
  - project: group/my-project
    file: /templates/docker-workflow.yml 
```

该`/templates/docker-workflow.yml`出现在`group/my-project`包括的两个本地文件`group/my-project` ：

```
include:
  - local: /templates/docker-build.yml
  - local: /templates/docker-testing.yml 
```

我们在`group/my-project` `/templates/docker-build.yml`添加了一个`docker-build`作业：

```
docker-build:
  script: docker build -t my-image . 
```

我们在`group/my-project`出现的第二个`/templates/docker-test.yml`添加了一个`docker-test`作业：

```
docker-test:
  script: docker run my-image /run/tests.sh 
```