---
metadata:
  - name: generator
    content: Diplodoc Platform v5.64.0
alternate:
  - https://sourcecraft.dev/portal/docs/ru/sourcecraft/operations/environments.md
  - href: https://sourcecraft.dev/portal/docs/ru/sourcecraft/operations/environments.md
    type: text/markdown
    title: Markdown version
  - href: https://sourcecraft.dev/portal/docs/ru/llms.txt?revision=r21865753
    rel: describedby
title: Работа с окружениями в SourceCraft
description: Как создать, изменить и удалить окружение в SourceCraft, настроить секреты, подключения и доступ, использовать секреты в CI/CD.
---
> **Documentation Index:** Fetch the complete configuration index at https://sourcecraft.dev/portal/docs/ru/llms.txt?revision=r21865753


# Работа с окружениями в SourceCraft

<!-- source: ru/_includes/sourcecraft/environments/intro.md -->
_Окружение_ — набор секретов и настроек доступа для определенной среды работы приложения. Например, окружения `staging` и `production` позволяют использовать одинаковую конфигурацию рабочего процесса CI/CD для развертывания на разных стендах, подставляя разные наборы секретов.

В SourceCraft можно определить, кто получает доступ к секретам окружения и управляет ими. Секреты используются в [заданиях CI/CD](https://sourcecraft.dev/portal/docs/ru/sourcecraft/concepts/ci-cd.md#tasks), а ссылки между окружениями позволяют подключать общие секреты организации, проекта или репозитория.

{% note info %}

Окружение само по себе не создает серверы, базы данных и другие ресурсы приложения. Действия по развертыванию задаются в [кубиках CI/CD](https://sourcecraft.dev/portal/docs/ru/sourcecraft/concepts/ci-cd.md#cubes).

{% endnote %}
<!-- endsource: ru/_includes/sourcecraft/environments/intro.md -->

Подробнее на странице [Окружения в SourceCraft](https://sourcecraft.dev/portal/docs/ru/sourcecraft/concepts/environments.md).

На этой странице описано, как:

* [Подготовиться к работе](#before-you-begin).
* [Создать окружение](#create).
* [Добавить секреты](#values).
* [Подключить другое окружение и настроить приоритеты](#links).
* [Настроить доступ](#access).
* [Использовать окружение в CI/CD](#ci-cd).
* [Изменить окружение](#edit).
* [Удалить окружение](#delete).


## Перед началом работы {#before-you-begin}

Для создания окружения нужна роль [Ответственный за окружение](https://sourcecraft.dev/portal/docs/ru/sourcecraft/security/index.md#src-environments-maintainer) или выше на организацию, проект или репозиторий, к которому будет относиться окружение. Эти разрешения также предоставляют следующие роли:

* На организацию — роль [Администратор организации](https://sourcecraft.dev/portal/docs/ru/sourcecraft/security/index.md#organization-manager-admin) или выше.
* На проект — роль [Ответственный за проект](https://sourcecraft.dev/portal/docs/ru/sourcecraft/security/index.md#src-projects-maintainer) или выше.
* На репозиторий — роль [Ответственный за репозиторий](https://sourcecraft.dev/portal/docs/ru/sourcecraft/security/index.md#src-repositories-maintainer) или выше.

Секретами и ссылками управляет пользователь с ролью [Ответственный за окружение](https://sourcecraft.dev/portal/docs/ru/sourcecraft/security/index.md#src-environments-maintainer) или выше. Для изменения прав доступа нужна роль [Администратор окружения](https://sourcecraft.dev/portal/docs/ru/sourcecraft/security/index.md#src-environments-admin), а для чтения секретов — [Разработчик окружения](https://sourcecraft.dev/portal/docs/ru/sourcecraft/security/index.md#src-environments-developer) или выше.

В примерах используются окружения репозитория `staging` и `production`. Для общих настроек можно создать окружение `shared` в организации или проекте и подключить его к окружениям репозитория.

## Создать окружение {#create}

1. Откройте [главную страницу](https://sourcecraft.dev) SourceCraft.
1. Выберите организацию, проект или репозиторий, которому будет принадлежать окружение.
1. В настройках выбранного ресурса откройте раздел ![image](../../_assets/console-icons/cube.svg) **Окружения**. В репозитории он находится в секции ![image](../../_assets/console-icons/gear.svg) **Настройки репозитория**.
1. Нажмите ![image](../../_assets/console-icons/plus.svg) **Новое окружение**.
1. В поле **Название** укажите имя, например `staging`.

    Имя должно быть уникально в пределах выбранного ресурса и содержать от 3 до 63 символов: строчные латинские буквы, цифры и дефис. Первый символ — буква, последний — буква или цифра.

1. В поле **Описание** опишите назначение окружения, например `Проверка веб-приложения перед выпуском`.
1. Нажмите **Создать**.

Вы автоматически получите в созданном окружении роль [Администратор окружения](https://sourcecraft.dev/portal/docs/ru/sourcecraft/security/index.md#src-environments-admin).

Для примера из раздела [Использовать окружение в CI/CD](#ci-cd) повторите шаги и создайте в том же репозитории окружение `production` с описанием `Продуктовая среда веб-приложения`.

## Добавить секреты {#values}

Откройте окружение и перейдите на вкладку ![image](../../_assets/console-icons/key.svg) **Секреты**.

### Добавить внутренний секрет {#create-secret}

1. В блоке **Секреты окружения** нажмите ![image](../../_assets/console-icons/plus.svg) **Создать секрет**.
1. Выберите тип **Внутренний**.
1. В поле **Название** укажите название секрета, например `API_TOKEN`. Используйте прописные латинские буквы, цифры и символ подчеркивания.
1. В поле **Значение** введите значение, например токен доступа к API приложения для выбранной среды.
1. Нажмите **Добавить секрет**.

В окружениях `staging` и `production` создайте секреты с одинаковым названием `API_TOKEN`, но разными токенами. В конфигурации CI/CD используйте одно выражение `${{ secrets.API_TOKEN }}`, а нужное окружение выбирайте параметром [environment](https://sourcecraft.dev/portal/docs/ru/sourcecraft/ci-cd-ref/workflows.md#environment) рабочего процесса.

### Подключить секрет из Yandex Lockbox {#lockbox}

1. [Подготовьте секрет и сервисное подключение](https://sourcecraft.dev/portal/docs/ru/sourcecraft/operations/lockbox-integration.md#before-you-begin) с правом чтения содержимого секрета Yandex Lockbox.
1. В блоке **Секреты окружения** нажмите ![image](../../_assets/console-icons/plus.svg) **Создать секрет**.
1. В открывшемся диалоге настройте секрет:

    <!-- source: ru/_includes/sourcecraft/lockbox-secret-form.md -->
    1. Выберите тип **Yandex Lockbox**.
    1. В поле **Название** задайте название, по которому будете обращаться к секрету из CI/CD.
    1. В поле **Сервисное подключение** выберите сервисное подключение, подготовленное ранее.
    1. В поле **Секрет Lockbox** выберите секрет Yandex Lockbox.
    1. (Опционально) Чтобы подключить только часть ключей, нажмите **Выбрать ключи**. В блоке **Ключи payload** нажмите названия нужных ключей, например `DB_USER` и `DB_PASSWORD`. Нужно выбрать хотя бы один ключ. Если не настраивать выбор, будут добавлены все ключи секрета.
    1. Нажмите **Добавить секрет**.
    <!-- endsource: ru/_includes/sourcecraft/lockbox-secret-form.md -->

Например, если вы задали название `DB_CREDENTIALS`, для обращения к ключу `DB_PASSWORD` подключенного секрета используйте в CI/CD выражение `${{ secrets.DB_CREDENTIALS#DB_PASSWORD }}`.

### Изменить или удалить внутренний секрет {#edit-values}

1. Чтобы изменить значение, в строке внутреннего секрета нажмите ![image](../../_assets/console-icons/pencil.svg) **Редактировать**.
1. В открывшемся диалоге нажмите ![image](../../_assets/console-icons/eye.svg) **Показать значение**, чтобы разблокировать поле **Значение**.
1. Введите новое значение и нажмите **Сохранить изменения**.

Для удаления нажмите ![image](../../_assets/console-icons/trash-bin.svg) **Удалить секрет** в строке внутреннего секрета и подтвердите удаление.

<!-- source: ru/_includes/sourcecraft/environments/edit-linked-values.md -->
Секреты из подключенных окружений изменяются в окружении-источнике при наличии соответствующих прав. Чтобы переопределить значение только для текущего окружения, создайте в нем собственный секрет с тем же ключом. Для изменения секретов нужна роль [Ответственный за окружение](https://sourcecraft.dev/portal/docs/ru/sourcecraft/security/index.md#src-environments-maintainer) или выше в соответствующем окружении.

{% note tip %}

Например, если из `shared` подключен секрет `API_TOKEN`, создайте в `production` собственный секрет `API_TOKEN` с токеном для продуктовой среды. Другие окружения продолжат получать общий токен. После удаления собственного секрета в `production` снова будет использоваться значение из `shared`.

{% endnote %}
<!-- endsource: ru/_includes/sourcecraft/environments/edit-linked-values.md -->

## Подключить другое окружение {#links}

<!-- source: ru/_includes/sourcecraft/environments/linked-access-warning.md -->
{% note warning %}

Пользователь с правом чтения секретов текущего окружения может получить через него и секреты подключенных окружений. Отдельно назначать ему доступ к каждому источнику не требуется.

Перед добавлением ссылки проверьте [состав участников текущего окружения](https://sourcecraft.dev/portal/docs/ru/sourcecraft/operations/environments.md#access): подключаемые секреты станут доступны пользователям с ролью `Разработчик окружения` и выше.

{% endnote %}
<!-- endsource: ru/_includes/sourcecraft/environments/linked-access-warning.md -->

1. Создайте окружение с общими секретами, например `shared` в организации, и добавьте в него нужные секреты.
1. Откройте окружение репозитория, например `production`, и перейдите на вкладку ![image](../../_assets/console-icons/link.svg) **Ссылки на секреты**.
1. В блоке **Секреты из других окружений** нажмите ![image](../../_assets/console-icons/plus.svg) **Добавить ссылку на окружение**.
1. В открывшемся диалоге выберите окружение, например `shared`. У каждого окружения указаны его владелец и описание.
1. Нажмите **Добавить ссылку**.
1. Если подключено несколько окружений, расставьте их в нужном порядке, перетаскивая строки за ручку слева. При одной ссылке ручка не отображается.
1. На вкладке ![image](../../_assets/console-icons/circle-info.svg) **Обзор** включите **Унаследованные секреты** и проверьте итоговый список секретов и их источники. Без этой настройки отображаются только собственные секреты окружения.

<!-- source: ru/_includes/sourcecraft/environments/priority.md -->
Секрет ищется по ключу в следующем порядке:

1. В собственных секретах текущего окружения.
1. В подключенных окружениях по порядку ссылок, начиная с первого приоритета. Для каждой ссылки сначала проверяется подключенное окружение, затем его ссылки.
1. В секретах, созданных непосредственно в организации, проекте или репозитории, которому принадлежит текущее окружение.

Новая ссылка на окружение добавляется с первым приоритетом: при поиске секрета она проверяется раньше уже подключенных окружений.

Используется первое найденное значение. Если изменить порядок ссылок или удалить собственный секрет, результат поиска может измениться. Подробнее в [примере с общими секретами](https://sourcecraft.dev/portal/docs/ru/sourcecraft/concepts/environments.md#shared-example).

{% note warning %}

Последний шаг применяется только к ресурсу, которому принадлежит текущее окружение. При поиске по ссылкам секреты самих ресурсов, которым принадлежат подключенные окружения, не проверяются. Например, ссылка на окружение организации дает доступ к секретам этого окружения и его ссылок, но не к секретам, созданным непосредственно в организации.

{% endnote %}
<!-- endsource: ru/_includes/sourcecraft/environments/priority.md -->

Если окружение недоступно для выбора, проверьте [разрешенные уровни подключения](https://sourcecraft.dev/portal/docs/ru/sourcecraft/concepts/environments.md#links) и свои права. Подключения, образующие цикл, запрещены: у такого окружения отображается пометка **Ссылка создаст цикл**.

### Отключить окружение {#unlink}

1. На вкладке **Ссылки на секреты** в блоке **Секреты из других окружений** найдите подключенное окружение и нажмите ![image](../../_assets/console-icons/trash-bin.svg) **Удалить** в его строке.
1. В открывшемся диалоге нажмите **Удалить ссылку на окружение**.

Секреты источника перестанут поступать по этой ссылке. Собственные секреты текущего окружения и само окружение-источник сохранятся. Перед новым запуском проверьте, что все используемые в CI/CD ключи по-прежнему доступны.

## Настроить доступ {#access}

1. Откройте окружение и перейдите на вкладку ![image](../../_assets/console-icons/persons.svg) **Доступы**.
1. Нажмите ![image](../../_assets/console-icons/plus.svg) **Добавить участника**.
1. В поле **Пользователи или команды** выберите пользователя или команду.
1. В поле **Роль** назначьте нужную [роль окружения](https://sourcecraft.dev/portal/docs/ru/sourcecraft/security/index.md#src-environments-viewer).
1. Нажмите **Добавить**.

Например, в `staging` назначьте команде разработки роль [Разработчик окружения](https://sourcecraft.dev/portal/docs/ru/sourcecraft/security/index.md#src-environments-developer). В `production` назначьте эту роль участникам, которые будут запускать рабочие процессы с секретами продуктовой среды. Для просмотра информации об окружении без доступа к значениям секретов достаточно роли [Просмотр окружения](https://sourcecraft.dev/portal/docs/ru/sourcecraft/security/index.md#src-environments-viewer).

Чтобы изменить роль участника, в столбце **Роль** рядом с ролью нажмите ![image](../../_assets/console-icons/sliders.svg), выберите новую и нажмите **Обновить**.

Для удаления участника в его строке нажмите ![image](../../_assets/console-icons/trash-bin.svg) и подтвердите удаление.


## Использовать окружение в CI/CD {#ci-cd}

1. [Настройте CI/CD](https://sourcecraft.dev/portal/docs/ru/sourcecraft/operations/ci-cd.md) в репозитории.
1. Создайте в репозитории окружения `staging` и `production`, [добавьте](#create-secret) в каждое секрет `API_TOKEN` с токеном доступа к API соответствующей среды.
1. [Назначьте права](#access) участникам, которые будут запускать рабочие процессы с этими секретами.
1. В файл `.sourcecraft/ci.yaml` добавьте рабочие процессы:

    ```yaml
    workflows:
      check-staging:
        environment: staging
        tasks:
          - name: check-api
            env:
              API_TOKEN: ${{ secrets.API_TOKEN }}
              API_URL: https://staging.example.com/api/status
            cubes:
              - name: request-status
                script:
                  - sh ./check-api.sh

      check-production:
        environment: production
        tasks:
          - name: check-api
            env:
              API_TOKEN: ${{ secrets.API_TOKEN }}
              API_URL: https://example.com/api/status
            cubes:
              - name: request-status
                script:
                  - sh ./check-api.sh
    ```

    Замените адреса в `API_URL` на адреса API вашего приложения. В этом примере открытые адреса заданы непосредственно в конфигурации CI/CD, а токены хранятся в окружениях. Задания используют одинаковое обращение к секрету и один скрипт; набор секретов выбирается параметром `environment` рабочего процесса, на одном уровне с `tasks`.

    {% note info %}

    <!-- source: ru/_includes/sourcecraft/environments/explicit-values.md -->
    Окружение выбирается параметром [environment](https://sourcecraft.dev/portal/docs/ru/sourcecraft/ci-cd-ref/workflows.md#environment) рабочего процесса и используется для всех его заданий. В выражении `secrets` имя окружения не указывается. Например, при `environment: production` выражение `${{ secrets.API_TOKEN }}` получает секрет через окружение `production` с учетом [порядка поиска](https://sourcecraft.dev/portal/docs/ru/sourcecraft/concepts/environments.md#priority). Если параметр `environment` не задан, используются секреты самого репозитория.
    <!-- endsource: ru/_includes/sourcecraft/environments/explicit-values.md -->

    {% endnote %}

1. Добавьте в корень репозитория файл `check-api.sh`. Например, если API принимает запрос `GET` с токеном в заголовке `Authorization`, скрипт проверки может выглядеть так:

    ```bash
    #!/bin/sh
    set -eu

    curl --fail --silent --show-error \
      --header "Authorization: Bearer ${API_TOKEN}" \
      "${API_URL}"
    ```

    Для этого примера на воркере должен быть доступен `curl`. Адаптируйте запрос под API вашего приложения. При ответе с кодом ошибки HTTP скрипт завершится с ошибкой.

1. Сохраните оба файла в репозитории.
1. [Запустите вручную](https://sourcecraft.dev/portal/docs/ru/sourcecraft/operations/run-workflow-manually.md#simple-run) рабочий процесс `check-staging` для нужной ветки или тега и проверьте результат запуска CI/CD.
1. Чтобы проверить продуктовую среду, запустите `check-production` от имени участника с доступом к секретам `production`.

Оба рабочих процесса выполнят один скрипт с разными адресами API и токенами. Секрет для каждого запуска будет найден в соответствующем окружении, его ссылках или в секретах самого репозитория согласно [порядку поиска](https://sourcecraft.dev/portal/docs/ru/sourcecraft/concepts/environments.md#priority).


## Изменить окружение {#edit}

{% note warning %}

<!-- source: ru/_includes/sourcecraft/environments/rename-warning.md -->
При переименовании окружения его подключения сохраняются, а имя в конфигурации CI/CD автоматически не изменяется. Обновите параметр `environment` в рабочих процессах, которые используют это окружение, иначе новые запуски завершатся с ошибкой. Обращения к секретам менять не нужно: имя окружения в них не указывается.
<!-- endsource: ru/_includes/sourcecraft/environments/rename-warning.md -->

{% endnote %}

1. Откройте страницу окружения.
1. В правом верхнем углу нажмите ![image](../../_assets/console-icons/pencil.svg) **Редактировать**.
1. Измените название или описание.
1. Нажмите **Обновить окружение**.
1. Если изменили название, обновите параметр `environment` в рабочих процессах CI/CD.

    Например, при переименовании `staging` в `preprod` замените `environment: staging` на `environment: preprod`. Выражение `${{ secrets.API_TOKEN }}` останется прежним.

## Удалить окружение {#delete}

1. Проверьте, какие рабочие процессы используют окружение и какие окружения получают из него значения. Обновите их настройки до удаления.
1. Откройте страницу окружения.
1. В правом верхнем углу нажмите ![image](../../_assets/console-icons/pencil.svg) **Редактировать**.
1. В секции **Опасная зона** нажмите **Удалить окружение**.
1. В открывшемся диалоге введите название окружения для подтверждения, например `preprod`.
1. Нажмите **Удалить окружение**.

{% note warning %}

<!-- source: ru/_includes/sourcecraft/environments/delete-warning.md -->
Удаление окружения безвозвратно удаляет его собственные секреты, настройки доступа, а также входящие и исходящие ссылки. Другие окружения перестают получать из него секреты. Новые запуски CI/CD, которые обращаются к удаленному окружению, завершаются с ошибкой.

Перед удалением обновите конфигурацию CI/CD и настройки окружений, которые используют удаляемое окружение.
<!-- endsource: ru/_includes/sourcecraft/environments/delete-warning.md -->

{% endnote %}

Например, перед удалением временного окружения `preprod` обновите параметр `environment` в рабочих процессах `.sourcecraft/ci.yaml`: укажите другое существующее окружение с необходимыми секретами. Иначе новые запуски с `environment: preprod` завершатся с ошибкой.


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

* [Окружения в SourceCraft](https://sourcecraft.dev/portal/docs/ru/sourcecraft/concepts/environments.md)
* [Задания (tasks)](https://sourcecraft.dev/portal/docs/ru/sourcecraft/ci-cd-ref/tasks.md)
* [Управлять секретами в репозитории SourceCraft](https://sourcecraft.dev/portal/docs/ru/sourcecraft/operations/secrets.md)
* [Настроить интеграцию с Yandex Lockbox в SourceCraft](https://sourcecraft.dev/portal/docs/ru/sourcecraft/operations/lockbox-integration.md)
* [Работа с переменными окружения в SourceCraft](https://sourcecraft.dev/portal/docs/ru/sourcecraft/operations/variables.md)
* [Настроить ручное подтверждение заданий CI/CD в SourceCraft](https://sourcecraft.dev/portal/docs/ru/sourcecraft/operations/task-approval.md)
