---
metadata:
  - name: generator
    content: Diplodoc Platform v5.57.3
alternate:
  - https://sourcecraft.dev/portal/docs/ru/sourcecraft/ci-cd-ref/reuse.md
  - href: https://sourcecraft.dev/portal/docs/ru/sourcecraft/ci-cd-ref/reuse.md
    type: text/markdown
    title: Markdown version
  - href: https://sourcecraft.dev/portal/docs/ru/llms.txt
    type: text/markdown
    title: llms.txt
title: Переиспользование параметров CI/CD SourceCraft
description: 'Как переиспользовать параметры .sourcecraft/ci.yaml с помощью uses: описание и примеры конфигурации.'
---
> **Documentation Index:** Fetch the complete configuration index at https://sourcecraft.dev/portal/docs/ru/llms.txt


# Переиспользование параметров рабочих процессов и кубиков в CI/CD SourceCraft

<!-- source: ru/_includes/sourcecraft/ci-cd/ci-cd-reuse-intro.md -->
В CI/CD SourceCraft можно один раз описать общие параметры рабочих процессов и кубиков, а затем переиспользовать их с помощью параметра `uses`. Это сокращает повторяющиеся фрагменты конфигурации и упрощает ее поддержку: общую последовательность действий достаточно обновить в одном месте.

Например, для развертывания нескольких сервисов можно задать общий рабочий процесс и передавать ему имя нужного сервиса. Кубики можно подключать из текущего файла конфигурации, других файлов и репозиториев.
<!-- endsource: ru/_includes/sourcecraft/ci-cd/ci-cd-reuse-intro.md -->

## Рабочие процессы {#workflows}

<!-- source: ru/_includes/sourcecraft/ci-cd/workflows-reuse.md -->
Если несколько рабочих процессов выполняют одинаковые последовательности заданий, опишите эту последовательность один раз и переиспользуйте ее с разными входными параметрами. Для этого:

1. В блоке `workflows` файла `.sourcecraft/ci.yaml` определите переиспользуемый рабочий процесс. Объявите его входные параметры в блоке [inputs](https://sourcecraft.dev/portal/docs/ru/sourcecraft/ci-cd-ref/workflows.md#inputs) и используйте их значения в конфигурации.
1. В вызывающем рабочем процессе укажите имя переиспользуемого рабочего процесса в параметре `uses`.
1. Передайте значения его входных параметров в блоке `with`. Ключи в этом блоке должны соответствовать именам параметров в `inputs` переиспользуемого рабочего процесса, а значения — их типам и ограничениям.

{% note info %}

Вызывающий рабочий процесс может иметь собственный блок `inputs`. Имена и настройки входных параметров вызывающего и переиспользуемого рабочих процессов могут различаться. Сопоставьте параметры в блоке `with`.

{% endnote %}

##### Пример переиспользования параметров рабочего процесса {#reusable-workflows-example}

В примере `release-workflow` содержит общую последовательность сборки, проверки и развертывания приложения. Рабочие процессы для отдельных сервисов переиспользуют эту последовательность и передают имя нужного сервиса через параметр `RELEASE_APP`.

Предполагается, что в репозитории есть скрипты `build.sh`, `check.sh` и `deploy.sh`, которые принимают имя сервиса в качестве аргумента:

```yaml
workflows:
  release-workflow:
    inputs:
      RELEASE_APP:
        type: choice
        required: true
        options:
          - service1
          - service2
          - service3
    env:
      RELEASE_APP: ${{ inputs.RELEASE_APP }}
    tasks:
      - name: build-app
        cubes:
          - name: build
            script:
              - ./build.sh "$RELEASE_APP"

      - name: run-compliance-checks
        needs: [build-app]
        cubes:
          - name: check
            script:
              - ./check.sh "$RELEASE_APP"

      - name: deploy-app
        needs: [build-app, run-compliance-checks]
        cubes:
          - name: deploy
            script:
              - ./deploy.sh "$RELEASE_APP"

  service1-release-workflow:
    uses: release-workflow
    with:
      RELEASE_APP: service1

  service2-release-workflow:
    uses: release-workflow
    with:
      RELEASE_APP: service2

  service3-release-workflow:
    uses: release-workflow
    with:
      RELEASE_APP: service3

  manual-release-workflow:
    inputs:
      TARGET_APP:
        type: choice
        required: true
        default: service3
        options:
          - service1
          - service2
          - service3
    uses: release-workflow
    with:
      RELEASE_APP: ${{ inputs.TARGET_APP }}
```

В рабочем процессе `manual-release-workflow` имя сервиса задается входным параметром `TARGET_APP`. Выражение `${{ inputs.TARGET_APP }}` в блоке `with` передает его значение в параметр `RELEASE_APP` переиспользуемого рабочего процесса. Таким образом, имена входных параметров вызывающего и переиспользуемого рабочих процессов могут различаться.
<!-- endsource: ru/_includes/sourcecraft/ci-cd/workflows-reuse.md -->


## Кубики {#cubes}

<!-- source: ru/_includes/sourcecraft/ci-cd/cubes-reuse.md -->
С помощью параметра `uses` в текущем кубике можно переиспользовать параметры другого кубика. В зависимости от того, где определен переиспользуемый кубик, применяется следующий синтаксис:

* `uses: <имя_кубика>` — для кубиков, определенных в `.sourcecraft/ci.yaml`. Подробнее в подразделе [Пример переиспользования параметров кубика внутри одного .sourcecraft/ci.yaml](#cubes-uses).
* `uses: ./<путь_к_файлу_в_репозитории>/cubes/<имя_кубика>` — для кубиков, определенных в произвольном YAML-файле этого же репозитория. Подробнее в подразделе [Пример переиспользования параметров кубика из произвольного YAML-файла этого же репозитория](#cubes-uses-file). Количество файлов с кубиками или количество кубиков в каждом файле не ограничено.

  {% note warning %}

  Путь должен начинаться с `./`. После пути к файлу должно быть указано `/cubes/<имя_кубика>`.

  {% endnote %}

* `uses: <слаг_организации>/<слаг_репозитория>/<путь_к_файлу_в_репозитории>/cubes/<имя_кубика>` — для кубиков, определенных в произвольном YAML-файле другого репозитория. Подробнее в подразделе [Пример переиспользования параметров кубика из произвольного YAML-файла другого репозитория](#cubes-uses-repo-file).

  {% note warning %}

  Чтобы переиспользовать кубик из другого репозитория, у этого кубика должен быть задан флаг `exported: true`. Если флаг не задан, то попытка переиспользовать кубик в другом репозитории завершится ошибкой.

  {% endnote %}

Вы можете переопределить отдельные параметры текущего кубика. Подробнее в подразделе [Пример переиспользования параметров кубика внутри одного .sourcecraft/ci.yaml](#cubes-uses).

##### Пример переиспользования параметров кубика внутри одного .sourcecraft/ci.yaml {#cubes-uses}

```yaml
cubes:
  - name: external-cube
    env:
      CUBE_VAR: hello
    script:
      - echo $CUBE_VAR

tasks:
  - name: first-task
    cubes:
      - name: first-cube
        uses: external-cube
      # Переиспользование кубика с переопределением параметра
      - name: second-cube
        env:
          CUBE_VAR: world
        uses: external-cube

workflows:
  first-workflow:
    tasks:
      - first-task
```

##### Пример переиспользования параметров кубика из произвольного YAML-файла этого же репозитория {#cubes-uses-file}

Файл с переиспользуемым кубиком `.ci-files/cubes/bash-lib.yaml`:

```yaml
cubes:
  - name: external-cube-1
    env:
      CUBE_VAR: hello
    script:
      - echo $CUBE_VAR
  - name: external-cube-2
    script:
      - echo "world"
```

Файл `.sourcecraft/ci.yaml`:

```yaml
tasks:
  - name: first-task
    cubes:
      - name: first-cube
        uses: ./.ci-files/cubes/bash-lib.yaml/cubes/external-cube-1

workflows:
  first-workflow:
    tasks:
      - first-task
      - name: second-task
        cubes:
          - name: second-cube
            uses: ./.ci-files/cubes/bash-lib.yaml/cubes/external-cube-2
```

##### Пример переиспользования параметров кубика из произвольного YAML-файла другого репозитория {#cubes-uses-repo-file}

Файл с переиспользуемым кубиком `.ci-files/cubes/bash-lib.yaml` в другом репозитории `myrepo` организации `myorg`:

```yaml
cubes:
  - name: external-cube-1
    env:
      CUBE_VAR: hello
    script:
      - echo $CUBE_VAR
    # Флаг, разрешающий использовать кубик в других репозиториях
    exported: true
  - name: external-cube-2
    script:
      - echo "world"
    exported: true
```

Файл `.sourcecraft/ci.yaml` репозитория, в котором настраивается CI:

```yaml
tasks:
  - name: first-task
    cubes:
      - name: first-cube
        uses: myorg/myrepo/.ci-files/cubes/bash-lib.yaml/cubes/external-cube-1

workflows:
  first-workflow:
    tasks:
      - first-task
      - name: second-task
        cubes:
          - name: second-cube
            uses: myorg/myrepo/.ci-files/cubes/bash-lib.yaml/cubes/external-cube-2
```
<!-- endsource: ru/_includes/sourcecraft/ci-cd/cubes-reuse.md -->

#### Полезные ссылки {#see-also}

* [Рабочие процессы (workflows)](https://sourcecraft.dev/portal/docs/ru/sourcecraft/ci-cd-ref/workflows.md)
* [Кубики (cubes)](https://sourcecraft.dev/portal/docs/ru/sourcecraft/ci-cd-ref/cubes.md)
* [Непрерывная интеграция и непрерывное развертывание в SourceCraft](https://sourcecraft.dev/portal/docs/ru/sourcecraft/concepts/ci-cd.md)
