Каталог сборки Af не содержит файла конфигурации сборки af

Обновлено: 03.07.2024

Начиная с версии 4.0, Samba может работать как контроллер домена (DC) Active Directory (AD). Если вы устанавливаете Samba в производственной среде, рекомендуется запустить два или более контроллера домена для аварийного переключения.

В этой документации описывается, как настроить Samba в качестве первого контроллера домена для создания нового леса AD. Кроме того, используйте эту документацию при переносе домена Samba NT4 в Samba AD. Чтобы присоединить Samba в качестве дополнительного контроллера домена к существующему лесу AD, см. раздел Присоединение контроллера домена Samba к существующей Active Directory.

Samba как AD DC поддерживает только:

  • интегрированный сервер LDAP в качестве серверной части AD. Подробнее см. в часто задаваемых вопросах (FAQ) Поддерживают ли контроллеры домена Samba AD OpenLDAP или другие серверы LDAP в качестве серверной части?
  • Центр распространения ключей Kerberos (KDC) Heimdal.
  • Выберите имя хоста для AD DC.
  • Выберите домен DNS для своего леса AD. Это имя также будет использоваться в качестве области AD Kerberos.
  • Используйте статический IP-адрес на контроллере домена.
  • Отключите инструменты, такие как resolvconf , которые автоматически обновляют файл конфигурации преобразователя DNS /etc/resolv.conf. Контроллеры домена AD и члены домена должны использовать DNS-сервер, способный разрешать зоны AD DNS.
  • Убедитесь, что процессы Samba не запущены:
  • Убедитесь, что файл /etc/hosts на контроллере домена правильно разрешает полное доменное имя (FQDN) и короткое имя хоста в IP-адрес контроллера домена в локальной сети. Например:
  • Если вы ранее запускали установку Samba на этом хосте:
  • Удалите существующий файл smb.conf. Чтобы указать путь к файлу:
  • Удалите все файлы базы данных Samba, например файлы *.tdb и *.ldb. Чтобы просмотреть папки, содержащие базы данных Samba:
  • Удалите существующий файл /etc/krb5.conf:

Установите поддерживаемую версию Samba. Подробнее см. в разделе Планирование выпуска Samba.

В процессе подготовки Samba AD создаются базы данных AD и добавляются начальные записи, такие как учетная запись администратора домена и необходимые записи DNS.

Если вы переносите домен Samba NT4 в AD, пропустите этот шаг и запустите классическое обновление Samba. Дополнительные сведения см. в разделе «Миграция домена Samba NT4 в Samba AD (классическое обновление)».


Команда предоставления домена samba-tool предоставляет несколько параметров для использования с интерактивной и неинтерактивной настройкой. Подробнее см.:

Пояснение параметра

Установите следующие параметры во время подготовки:

Другие параметры, часто используемые с командой предоставления домена samba-tool:

  • --option="interfaces=lo eth0" --option="bind interfaces only=yes" : если ваш сервер имеет несколько сетевых интерфейсов, используйте эти параметры для привязки Samba к указанным интерфейсам. Это позволяет команде samba-tool зарегистрировать правильный IP-адрес локальной сети в каталоге во время присоединения.

Для подготовки AD требуются права root для создания файлов и установки разрешений.
НЕ ИСПОЛЬЗУЙТЕ NONE в качестве сервера DNS, он не поддерживается и будет удален в будущей версии Samba.
Если в качестве серверной части DNS используется Bind, НЕ используйте BIND9_FLATFILE , он не поддерживается и будет удален в будущей версии Samba.
После инициализации первого контроллера домена в домене AD не предоставляйте другие контроллеры домена в том же домене, присоединяйтесь к любым другим контроллерам домена.

Инициализация Samba AD в интерактивном режиме

Чтобы подготовить Samba AD в интерактивном режиме, запустите:

Интерактивный режим инициализации поддерживает передачу дополнительных параметров команде инициализации домена samba-tool. Это позволяет изменять параметры, не являющиеся частью интерактивной настройки.

Инициализация Samba AD в неинтерактивном режиме

Например, для неинтерактивной подготовки Samba AD со следующими настройками:

Пропустите этот шаг, если вы подготовили контроллер домена с помощью серверной части SAMBA_INTERNAL DNS.

  • Настройте DNS-сервер BIND и модуль BIND9_DLZ. Подробнее см. в разделе Настройка DNS-сервера BIND.
  • Запустите DNS-сервер BIND. Например:

Члены домена в AD используют DNS для поиска служб, таких как LDAP и Kerberos. Для этого им необходимо использовать DNS-сервер, способный разрешать зону AD DNS.

На своем контроллере домена задайте домен AD DNS в поиске и IP-адрес вашего контроллера домена в параметре nameserver файла /etc/resolv.conf. Например:

При желании можно добавить зону обратного просмотра.

Если вам нужно более одной обратной зоны (несколько подсетей), просто запустите указанную выше команду еще раз, но с данными для другой подсети.

Обратная зона работает напрямую без перезапуска Samba или BIND.

В AD Kerberos используется для аутентификации пользователей, компьютеров и служб.

Во время подготовки Samba создала файл конфигурации Kerberos для вашего контроллера домена. Скопируйте этот файл в конфигурацию Kerberos вашей операционной системы. Например:

Вы должны запустить Samba AD DC, прежде чем сможете добавить обратную зону.
Не создавайте символическую ссылку на сгенерированный файл krb5.conf. В Samba 4.7 и более поздних версиях каталог /usr/local/samba/private/ больше недоступен для других пользователей, кроме пользователя root. Если файл представляет собой символическую ссылку, другие пользователи не смогут прочитать файл, и, например, динамические обновления DNS завершатся ошибкой, если вы используете серверную часть DNS BIND_DLZ.

Предварительно созданная конфигурация Kerberos использует записи ресурсов службы DNS (SRV) для поиска KDC.

Чтобы запустить службу samba вручную, введите:

Samba не предоставляет сценарии инициализации System V, systemd , upstart или файлы конфигурации других служб.

  • Если вы установили Samba с помощью пакетов, используйте сценарий или файл конфигурации службы, включенный в пакет, для запуска Samba.
  • Если вы построили Samba, см. раздел Управление службой Samba AD DC.

Проверка файлового сервера

Чтобы перечислить все общие ресурсы, предоставленные контроллером домена:

До Samba 4.11.0:

Из Samba 4.11.0:

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

Для проверки подлинности подключитесь к общему ресурсу netlogon, используя учетную запись администратора домена:

Если один или несколько тестов не пройдены, см. раздел Устранение неполадок.

Подтверждение DNS

Чтобы убедиться, что ваша конфигурация AD DNS работает правильно, запросите некоторые записи DNS:

  • Запись _ldap SRV на основе TCP в домене:
  • Запись ресурса _kerberos SRV на основе udp в домене:
  • Запись A контроллера домена:

Если один или несколько тестов не пройдены, см. раздел Устранение неполадок.

Проверка Kerberos

  • Запросите билет Kerberos для учетной записи администратора домена:
  • Список кэшированных билетов Kerberos:

Если один или несколько тестов не пройдены, см. раздел Устранение неполадок.

Kerberos требует синхронизированного времени на всех членах домена. Дополнительные сведения и инструкции по настройке службы ntpd или chrony см. в разделе Синхронизация времени.

Несмотря на то, что Samba AD DC может предоставлять общий доступ к файлам, как и все другие режимы установки, команда Samba не рекомендует использовать DC в качестве файлового сервера по следующим причинам:

  • Для любых организаций, кроме самых маленьких, наличие более одного контроллера домена является хорошей резервной мерой и делает обновления более безопасными.
  • Рекомендуется, чтобы обновление контроллера домена также выполнялось каждый год или два при обновлении операционной системы хоста, потому что нет сложных данных для перехода или других задействованных служб.
  • Это означает, что обновления можно выполнять, устанавливая новую версию и повторяя изменения, которые лучше тестируются в Samba, получают новые функции и позволяют избежать ряда сохраняющихся рисков повреждения данных.
  • Контроллер домена и файловый сервер имеют разные точки, в которых организация хотела бы выполнить обновление. Потребность в новых функциях контроллера домена и файлового сервера возникает в разное время. В настоящее время AD DC быстро развивается, приобретая новые функции, в то время как файловый сервер по прошествии более 20 лет совершенно справедливо стал более консервативным.
  • обязательное подписание smb применяется на контроллере домена.


Если вы решите использовать контроллер домена Samba в качестве файлового сервера, рассмотрите возможность запуска виртуальной машины на контроллере домена, содержащей отдельный член домена Samba Unix, и используйте его вместо этого.

Если вы должны использовать Samba DC в качестве файлового сервера, вы должны знать, что автоматически активируемый объект виртуальной файловой системы (VFS) acl_xattr позволяет настраивать общие ресурсы только со списками управления доступом Windows (ACL). Использование списков контроля доступа POSIX с общими ресурсами на контроллере домена Samba не работает.

Вы должны знать, что если вы хотите использовать объект vfs на общем ресурсе DC, например. recycle, вы не должны просто устанавливать объекты vfs = recycle в общем ресурсе. Это отключит объекты vfs по умолчанию dfs_samba4 и acl_xattr. Вы должны установить объекты vfs = dfs_samba4 acl_xattr recycle .

Чтобы предоставить сетевым ресурсам все возможности Samba, настройте члена домена Samba с файловыми ресурсами общего доступа. Подробнее см.:


Если у вас есть только небольшой домен (маленький офис, домашняя сеть) и вы не хотите следовать рекомендации команды Samba и дополнительно использовать DC в качестве файлового сервера, настройте Winbindd до того, как вы начнете настраивать общие ресурсы. Дополнительные сведения см. в разделе Настройка Winbindd на контроллере домена Samba AD.

Файл конфигурации сборки содержит инструкции для Cloud Build по выполнению задач в соответствии с вашими требованиями. Например, файл конфигурации сборки может содержать инструкции по сборке, упаковке и отправке образов Docker.

На этой странице объясняется схема файла конфигурации Cloud Build. Инструкции по созданию и использованию файла конфигурации сборки см. в разделе Создание базового файла конфигурации сборки.

Структура файла конфигурации сборки

Файлы конфигурации сборки моделируются с использованием ресурса сборки Cloud Build API.

Примечание. Если вы используете VS Code или IntelliJ IDE, вы можете использовать Cloud Code для создания файлов конфигурации YAML. Cloud Code встроен в редактор Cloud Shell Editor и не требует настройки. Дополнительные сведения см. в статьях Cloud Code для VS Code и Cloud Code для IntelliJ.

Каждый из разделов файла конфигурации сборки определяет часть задачи, которую должна выполнять Cloud Build:

Этапы сборки

Шаг сборки указывает действие, которое вы хотите выполнить с помощью Cloud Build. Для каждого шага сборки Cloud Build запускает контейнер docker как экземпляр docker run. Шаги сборки аналогичны командам в скрипте и обеспечивают гибкость выполнения произвольных инструкций в вашей сборке. Если вы можете упаковать инструмент сборки в контейнер, Cloud Build сможет выполнить его как часть вашей сборки. По умолчанию Cloud Build последовательно выполняет все этапы сборки на одном компьютере. Если у вас есть шаги, которые могут выполняться одновременно, используйте параметр waitFor.

В файл конфигурации можно включить до 100 шагов сборки.

Используйте поле шагов в файле конфигурации сборки, чтобы указать шаг сборки. Вот фрагмент конфигурации, которую вы можете задать в поле шагов:

Используйте поле имени шага сборки, чтобы указать сборщика облака, который представляет собой образ контейнера, на котором запущены общие инструменты. Вы используете построитель на этапе сборки для выполнения своих задач.

В следующем фрагменте показаны этапы сборки, вызывающие сборщики bazel , gcloud и docker:

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

Вы можете создать до 100 аргументов за шаг. Максимальная длина аргумента – 4000.

Следующий фрагмент кода вызывает команду сборки docker и устанавливает зависимости Maven:

Поле env шага сборки содержит список переменных среды, которые будут использоваться при выполнении шага. Переменные имеют вид KEY=VALUE .

В следующей конфигурации сборки поле env шага сборки задает зону Compute Engine и кластер GKE перед выполнением kubectl :

Используйте поле dir в шаге сборки, чтобы указать рабочий каталог, который будет использоваться при запуске контейнера шага. Если вы установите поле dir на этапе сборки, рабочий каталог будет установлен в /workspace/. Если это значение является относительным путем, оно относится к рабочему каталогу сборки. Если это значение абсолютное, оно может находиться за пределами рабочего каталога сборки, и в этом случае содержимое пути может не сохраняться при выполнении шагов сборки (если не указан том для этого пути).

Следующий фрагмент кода задает рабочий каталог для этапа сборки как /workspace/examples/hello_world :

время ожидания

Используйте поле времени ожидания в шаге сборки, чтобы установить ограничение по времени для выполнения шага. Если вы не установите это поле, шаг не имеет ограничения по времени и будет разрешено выполняться до тех пор, пока он не завершится или пока не истечет время сборки. Поле тайм-аута в шаге сборки не должно превышать значение тайм-аута, указанное для сборки. тайм-аут должен быть указан в секундах до девяти цифр после дробной части, оканчивающихся символом 's'. Пример: "3,5 с"

В следующей конфигурации сборки шаг ubuntu истекает через 500 секунд:

Используйте поле id, чтобы задать уникальный идентификатор шага сборки. id используется с полем waitFor для настройки порядка выполнения шагов сборки. Инструкции по использованию waitFor и id см. в разделе Настройка порядка шагов сборки.

ждите

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

точка входа

Используйте точку входа на шаге сборки, чтобы указать точку входа, если вы не хотите использовать точку входа по умолчанию для компоновщика. Если вы не настроите это поле, Cloud Build будет использовать точку входа сборщика. Следующий фрагмент устанавливает точки входа для этапа сборки npm:

секретная оболочка

Список переменных среды, зашифрованных с помощью криптографического ключа Cloud KMS. Эти значения должны быть указаны в секретах сборки. Сведения об использовании этого поля см. в разделе Использование зашифрованной переменной в запросах на сборку.

объемы

Том — это том-контейнер Docker, который монтируется в этапы сборки для сохранения файлов на этапах сборки. Когда Cloud Build запускает этап сборки, он автоматически монтирует том рабочей области в /workspace . Вы можете указать дополнительные тома для подключения к контейнерам шагов сборки, используя поле томов для ваших шагов.

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

время ожидания

Используйте поле тайм-аута для сборки, чтобы указать время, в течение которого сборка должна выполняться с точностью до секунды. Если это время истечет, работа над сборкой прекратится, а статус сборки будет TIMEOUT. Если тайм-аут не установлен, к сборке будет применяться тайм-аут по умолчанию, равный 10 минутам. Максимальное значение, которое можно применить к тайм-ауту, составляет 24 часа. тайм-аут должен быть указан в секундах до девяти цифр после дробной части, оканчивающихся символом 's'. Пример: "3,5 с"

В следующем фрагменте для тайм-аута установлено значение 660 секунд, чтобы избежать истечения времени ожидания сборки из-за спящего режима:

Примечание. Поле тайм-аута существует как для шага сборки, так и для сборки: поле тайм-аута шага сборки указывает количество времени, в течение которого шагу разрешено выполняться, а поле тайм-аута сборки указывает количество времени, в течение которого сборка разрешена к запуску.

queueTtl

Используйте поле queueTtl, чтобы указать время, в течение которого сборка может стоять в очереди. Если сборка находится в очереди дольше, чем значение, установленное в queueTtl, срок действия сборки истекает, и статус сборки устанавливается на EXPIRED. Если значение не указано, Cloud Build использует значение по умолчанию «3600s» (1 час). queueTtl начинает отсчет с createTime . queueTtl должен быть указан в секундах до девяти дробных цифр, оканчивающихся символом 's', например, "3.5s".

В следующем фрагменте тайм-аут установлен на "20 сек", а для параметра queueTtl – "10 сек". queueTtl начинает отсчитываться в createTime , когда запрашивается сборка, а timeout начинает отсчитываться в startTime , когда начинается сборка. Следовательно, срок действия queueTtl истечет через createTime + 10 сек., если к тому времени не начнется сборка.

Журналы

Задайте поле logsBucket для сборки, чтобы указать корзину Cloud Storage, в которую должны записываться журналы. Если вы не настроите это поле, Cloud Build будет использовать корзину по умолчанию для хранения журналов сборки.

Следующий фрагмент задает сегмент журналов для хранения журналов сборки:

варианты

Используйте поле параметров, чтобы указать следующие необязательные аргументы для вашей сборки:

env : список определений глобальных переменных среды, которые будут существовать для всех шагов сборки в этой сборке. Если переменная определена как глобально, так и на этапе сборки, переменная будет использовать значение шага сборки. Элементы имеют форму KEY=VALUE для переменной среды KEY, которой присвоено значение VALUE .

secretEnv : список глобальных переменных среды, зашифрованных с помощью криптографического ключа Cloud Key Management Service, который будет доступен на всех этапах сборки в этой сборке. Эти значения должны быть указаны в секрете сборки.

Volumes: список томов для глобального монтирования для ВСЕХ шагов сборки. Каждый том создается как пустой том перед началом процесса сборки. По завершении сборки тома и их содержимое удаляются. Имена и пути глобальных томов не могут конфликтовать с томами, определенными на шаге сборки. Использование глобального тома в сборке только с одним шагом недопустимо, так как это означает запрос на сборку с неправильной конфигурацией.

sourceProvenanceHash : установите параметр sourceProvenanceHash, чтобы указать алгоритм хеширования для исходного происхождения. В следующем фрагменте кода указано, что используется алгоритм хэширования SHA256 :

machineType : Cloud Build предоставляет четыре типа виртуальных машин с высокой производительностью ЦП для запуска ваших сборок: два типа машин с 8 ЦП и два типа машин с 32 ЦП. Тип машины по умолчанию — 1 ЦП.Запрос виртуальной машины с высокой производительностью ЦП может увеличить время запуска вашей сборки. Добавьте параметр machineType, чтобы запросить виртуальную машину с более мощным процессором:

Дополнительную информацию об использовании параметра machineType см. в разделе Ускорение сборки.

diskSizeGb : используйте параметр diskSizeGb, чтобы запросить пользовательский размер диска для вашей сборки. Максимальный размер, который вы можете запросить, – 1000 ГБ.

Следующий фрагмент кода запрашивает размер диска 200 ГБ:

logStreamingOption : используйте этот параметр, чтобы указать, хотите ли вы передавать журналы сборки в облачное хранилище. По умолчанию Cloud Build собирает журналы сборки по завершении сборки; этот параметр указывает, хотите ли вы передавать журналы сборки в режиме реального времени в процессе сборки. В следующем фрагменте кода указано, что журналы сборки передаются в облачное хранилище:

logging: используйте этот параметр, чтобы указать, хотите ли вы хранить журналы в Cloud Logging или Cloud Storage. Если вы не установите этот параметр, Cloud Build будет хранить журналы как в Cloud Logging, так и в Cloud Storage. Вы можете установить для параметра ведения журнала значение GCS_ONLY, чтобы журналы хранились только в облачном хранилище. В следующем фрагменте кода указано, что журналы хранятся в облачном хранилище:

dynamic_substitutions : используйте этот параметр, чтобы явно включить или отключить расширение параметров bash в подстановках. Если ваша сборка вызывается триггером, для поля dynamic_substitutions всегда установлено значение true, и его не нужно указывать в файле конфигурации сборки. Если ваша сборка вызывается вручную, вы должны установить для поля dynamic_substitutions значение true, чтобы расширения параметров bash интерпретировались при запуске вашей сборки.

substitutionOption : вы установите этот параметр вместе с полем замещения ниже, чтобы указать поведение при возникновении ошибки в проверках замещения.

pool : установите значение этого поля на имя ресурса частного пула для запуска сборки. Инструкции по запуску сборки в частном пуле см. в разделе Запуск сборок в частном пуле.

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

замены

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

В следующем фрагменте используются замены для вывода "hello world". Параметр подстановки ALLOW_LOOSE установлен, что означает, что сборка не вернет ошибку, если отсутствует переменная подстановки или отсутствует подстановка.

Дополнительные инструкции по использованию подстановок см. в разделе Подстановка значений переменных.

Используйте поле тегов, чтобы упорядочить сборки по группам и отфильтровать сборки. Следующая конфигурация устанавливает два тега с именами mytag1 и mytag2:

доступные секреты

Используйте это поле, чтобы использовать секрет от Secret Manager с Cloud Build. Дополнительные сведения см. в разделе Использование секретов.

секреты

Secret связывает набор секретных переменных среды, содержащих зашифрованные значения, с ключом Cloud KMS, который используется для расшифровки значения.

serviceAccount

Используйте это поле, чтобы указать учетную запись службы IAM, которая будет использоваться во время сборки. Дополнительную информацию см. в разделе Настройка указанных пользователем учетных записей служб.

изображения

Поле images в файле конфигурации сборки указывает один или несколько образов Linux Docker, которые должны быть отправлены Cloud Build в Container Registry. У вас может быть сборка, которая выполняет задачи без создания каких-либо образов Linux Docker, но если вы создаете образы и не передаете их в реестр, образы удаляются по завершении сборки. Если указанный образ не создается во время сборки, сборка завершится ошибкой. Дополнительные сведения о хранении изображений см. в разделе Хранение изображений и артефактов.

Следующая конфигурация сборки задает поле images для хранения встроенного образа:

артефакты

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

Следующая конфигурация сборки устанавливает поле артефактов для хранения собранного пакета Go в gs://mybucket/ :

Использование Dockerfiles

Если вы выполняете сборки Docker в Cloud Build с помощью интерфейса командной строки gcloud или триггеров сборки, вы можете использовать только Dockerfile для сборки образа. Вам не требуется отдельный файл конфигурации сборки. Если вы хотите внести дополнительные изменения в свои сборки Docker, вы можете предоставить файл конфигурации сборки в дополнение к Dockerfile. Инструкции по сборке образа Docker с помощью Dockerfile см. в разделе Краткое руководство: сборка.

Сеть Cloud Build

Когда Cloud Build запускает каждый шаг сборки, он прикрепляет контейнер шага к локальной сети Docker с именем cloudbuild . В сети облачной сборки размещаются учетные данные приложения по умолчанию (ADC), которые службы Google Cloud могут использовать для автоматического поиска ваших учетных данных. Если вы используете вложенные контейнеры Docker и хотите предоставить ADC базовому контейнеру или использовать gsutil или gcloud на этапе создания докера, используйте флаг --network на этапе сборки докера:

Что дальше

  • Узнайте, как создать базовый файл конфигурации сборки для настройки сборок для Cloud Build.
  • Прочитайте Запуск сборки вручную, чтобы узнать, как запускать сборки в Cloud Build.

Если не указано иное, содержимое этой страницы предоставляется по лицензии Creative Commons Attribution 4.0, а образцы кода — по лицензии Apache 2.0. Подробнее см. в Правилах сайта Google Developers. Java является зарегистрированным товарным знаком Oracle и/или ее дочерних компаний.

На этой странице описывается, как создать файл конфигурации сборки, который можно использовать для запуска сборки в Cloud Build.

Файл конфигурации сборки определяет поля, которые необходимы Cloud Build для выполнения ваших задач. Вам понадобится файл конфигурации сборки, если вы запускаете сборку с помощью инструмента командной строки gcloud или триггеров сборки. Вы можете написать файл конфигурации сборки, используя синтаксис YAML или JSON.

Прежде чем начать

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

Создание конфигурации сборки

Следующие шаги объясняют, как создать базовый файл конфигурации сборки. Каждое из полей в файле конфигурации сборки определяет часть задачи, которую вы хотите выполнить. Единственным обязательным полем в файле конфигурации сборки является поле имени шага. Все остальные поля являются необязательными.

Создайте файл конфигурации сборки. В корневом каталоге проекта создайте файл с именем cloudbuild.yaml. Это ваш файл конфигурации Cloud Build.

Добавьте поле шагов. Раздел шагов в файле конфигурации сборки содержит шаги сборки, которые вы хотите выполнить с помощью Cloud Build.

Добавить первый шаг. В шагах: добавьте поле имени и укажите его на изображение контейнера для выполнения вашей задачи. Cloud Build и его сообщество разработчиков предоставляют несколько образов контейнеров с установленными общими инструментами и языками. Вы можете использовать любой из этих образов (также называемых Cloud Builders) или любой общедоступный образ на этапе сборки. Сведения о различных типах образов контейнеров, которые можно использовать на этапе сборки, см. в разделе Cloud Builders.

В следующем фрагменте показан этап сборки с помощью сборщика докеров gcr.io/cloud-builders/docker , который представляет собой образ контейнера, на котором работает Docker.

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

В следующем примере:

  • build — это точка входа в облачный конструктор Docker.
  • -t — это тег Docker.
  • us-central1-docker.pkg.dev/$/my-docker-repo/my-image — это имя образа, который будет создан в реестре артефактов. На этапе сборки используется замена идентификатора проекта по умолчанию, поэтому это значение автоматически заменяется во время сборки.
<р>. — это расположение исходного кода, указывающее, что исходный код находится в текущем рабочем каталоге.

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

Следующий фрагмент содержит еще два шага к файлу конфигурации сборки:

    шаг сборки докера для вызова команды docker push для отправки сборки образа на предыдущем шаге в реестр артефактов.

этап сборки для команды Google Cloud SDK с указанной точкой входа gcloud, который создает экземпляр Compute Engine из образа контейнера в реестре артефактов. Поле env включено для указания зоны и региона Compute Engine.

Включите дополнительные поля конфигурации сборки. Вы можете дополнительно настроить сборку, включив такие поля, как machineType, tag или timeout. Полный список полей, которые можно включить в файл конфигурации сборки, см. в разделе Обзор конфигурации сборки.

Полный пример файла конфигурации базовой сборки см. в следующем фрагменте:

В этом примере образы контейнеров хранятся в реестре артефактов. Если ваша сборка создает какие-либо неконтейнерные артефакты, вы можете сохранить их в облачном хранилище с помощью поля артефактов. Инструкции по этому поводу см. в разделе Хранение изображений и артефактов.

Создайте файл конфигурации сборки. В корневом каталоге проекта создайте файл с именем cloudbuild.json. Это ваш файл конфигурации Cloud Build.

Добавьте поле шагов.Раздел шагов в файле конфигурации сборки содержит шаги сборки, которые вы хотите выполнить с помощью Cloud Build.

Добавить первый шаг. В шагах: добавьте поле имени и укажите его на изображение контейнера для выполнения вашей задачи. Cloud Build и его сообщество разработчиков предоставляют несколько образов контейнеров с установленными общими инструментами и языками. Вы можете использовать любой из этих образов (также называемых Cloud Builders) или любой общедоступный образ на этапе сборки. Сведения о различных типах образов контейнеров, которые можно использовать на этапе сборки, см. в разделе Cloud Builders.

В следующем фрагменте показан этап сборки с помощью сборщика докеров gcr.io/cloud-builders/docker , который представляет собой образ контейнера, на котором работает Docker.

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

В следующем примере:

  • build — это точка входа в облачный конструктор Docker.
  • -t — это тег Docker.
  • us-central1-docker.pkg.dev/$/my-docker-repo/my-image — это имя образа, который будет создан в реестре артефактов. На этапе сборки используется замена идентификатора проекта по умолчанию, поэтому это значение автоматически заменяется во время сборки.
<р>. — это расположение исходного кода, указывающее, что исходный код находится в текущем рабочем каталоге.

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

Следующий фрагмент содержит еще два шага к файлу конфигурации сборки:

    шаг сборки докера для вызова команды docker push для отправки сборки образа на предыдущем шаге в реестр артефактов.

этап сборки для команды Google Cloud SDK с указанной точкой входа gcloud, который создает экземпляр Compute Engine из образа контейнера в реестре артефактов. Поле env включено для указания зоны и региона Compute Engine.

Включите дополнительные поля конфигурации сборки. Вы можете дополнительно настроить сборку, включив такие поля, как machineType, tag или timeout. Полный список полей, которые можно включить в файл конфигурации сборки, см. в разделе Обзор конфигурации сборки.

Полный пример файла конфигурации базовой сборки см. в следующем фрагменте:

В этом примере образы контейнеров хранятся в реестре артефактов. Если ваша сборка создает какие-либо неконтейнерные артефакты, вы можете сохранить их в облачном хранилище с помощью поля артефактов. Инструкции по этому поводу см. в разделе Хранение изображений и артефактов.

Что дальше

  • Узнайте, как запускать сборки вручную и с помощью триггеров с помощью файла конфигурации сборки.
  • Узнайте, как писать конфигурации сборки для включения зависимостей, а также сборки, тестирования и развертывания артефактов.

Если не указано иное, содержимое этой страницы предоставляется по лицензии Creative Commons Attribution 4.0, а образцы кода — по лицензии Apache 2.0. Подробнее см. в Правилах сайта Google Developers. Java является зарегистрированным товарным знаком Oracle и/или ее дочерних компаний.

Docker может создавать образы автоматически, читая инструкции из Dockerfile. Dockerfile — это текстовый документ, содержащий все команды, которые пользователь может вызвать в командной строке для сборки образа. С помощью сборки docker пользователи могут создать автоматизированную сборку, которая последовательно выполняет несколько инструкций командной строки.

На этой странице описаны команды, которые вы можете использовать в Dockerfile. Когда вы закончите читать эту страницу, обратитесь к Dockerfile Best Practices за руководством, ориентированным на советы.

Использование

Команда сборки docker создает образ из файла Dockerfile и контекста. Контекст сборки — это набор файлов в указанном месте PATH или URL. PATH — это каталог в вашей локальной файловой системе. URL-адрес представляет собой расположение репозитория Git.

Контекст сборки обрабатывается рекурсивно. Таким образом, PATH включает любые подкаталоги, а URL-адрес включает репозиторий и его подмодули. В этом примере показана команда сборки, которая использует текущий каталог ( . ) в качестве контекста сборки:

Сборка выполняется демоном Docker, а не интерфейсом командной строки. Первое, что делает процесс сборки, это отправляет весь контекст (рекурсивно) демону. В большинстве случаев лучше начать с пустого каталога в качестве контекста и хранить файл Dockerfile в этом каталоге. Добавьте только те файлы, которые необходимы для создания Dockerfile.

Предупреждение

Не используйте корневой каталог / в качестве ПУТИ для контекста сборки, так как это приводит к тому, что сборка передает все содержимое вашего жесткого диска демону Docker.

Чтобы использовать файл в контексте сборки, Dockerfile ссылается на файл, указанный в инструкции, например инструкции COPY. Чтобы повысить производительность сборки, исключите файлы и каталоги, добавив файл .dockerignore в контекстный каталог. Информацию о том, как создать файл .dockerignore, см. в документации на этой странице.

Традиционно файл Dockerfile называется Dockerfile и располагается в корне контекста. Вы используете флаг -f в сборке docker, чтобы указать на файл Dockerfile в любом месте вашей файловой системы.

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

Чтобы пометить образ в несколько репозиториев после сборки, добавьте несколько параметров -t при запуске команды сборки:

Прежде чем демон Docker выполнит инструкции в файле Docker, он выполняет предварительную проверку файла Dockerfile и возвращает ошибку, если синтаксис неверен:

Демон Docker выполняет инструкции в Dockerfile одну за другой, при необходимости фиксируя результат каждой инструкции в новом образе, прежде чем окончательно вывести идентификатор вашего нового образа. Демон Docker автоматически очистит отправленный вами контекст.

Обратите внимание, что каждая инструкция запускается независимо и вызывает создание нового образа, поэтому команда RUN cd /tmp не повлияет на следующие инструкции.

По возможности Docker использует кэш сборки, чтобы значительно ускорить процесс сборки Docker. На это указывает сообщение CACHED в выводе консоли. (Дополнительную информацию см. в руководстве по лучшим практикам Dockerfile):

По умолчанию кэш сборки основан на результатах предыдущих сборок на компьютере, на котором вы выполняете сборку. Параметр --cache-from также позволяет вам использовать build-cache, который распространяется через реестр образов. См. раздел об указании внешних источников кэша в справочнике по командам сборки docker.

Завершив сборку, вы готовы приступить к сканированию образа с помощью docker scan и отправке образа в Docker Hub.

Комплект сборки

Начиная с версии 18.09, Docker поддерживает новый бэкэнд для выполнения ваших сборок, предоставляемый проектом moby/buildkit. Серверная часть BuildKit предоставляет множество преимуществ по сравнению со старой реализацией. Например, BuildKit может:

  • Обнаружение и пропуск выполнения неиспользуемых этапов сборки
  • Параллельное создание независимых этапов сборки
  • Инкрементально передавать только измененные файлы в контексте сборки между сборками
  • Обнаружение и пропуск передачи неиспользуемых файлов в контексте сборки
  • Используйте внешние реализации Dockerfile со множеством новых функций
  • Избегайте побочных эффектов с остальной частью API (промежуточными изображениями и контейнерами)
  • Установите приоритет кэша сборки для автоматического удаления.

Чтобы использовать серверную часть BuildKit, необходимо установить переменную среды DOCKER_BUILDKIT=1 в интерфейсе командной строки перед вызовом сборки docker.

Чтобы узнать о синтаксисе Dockerfile, доступном для сборок на основе BuildKit, обратитесь к документации в репозитории BuildKit.

Формат

Вот формат Dockerfile:

Инструкция не чувствительна к регистру. Однако по соглашению они пишутся ПРОПИСНЫМИ буквами, чтобы их было легче отличить от аргументов.

Docker выполняет инструкции в файле Dockerfile по порядку. Dockerfile должен начинаться с инструкции FROM. Это может быть после директив синтаксического анализатора, комментариев и глобальных ARG. Инструкция FROM указывает Родительский образ, из которого вы строите. FROM может предшествовать только одна или несколько инструкций ARG, которые объявляют аргументы, используемые в строках FROM в Dockerfile .

Строки комментариев удаляются перед выполнением инструкций Dockerfile, что означает, что комментарий в следующем примере не обрабатывается оболочкой, выполняющей команду echo, и оба приведенных ниже примера эквивалентны:

Символы продолжения строки в комментариях не поддерживаются.

Обратите внимание, однако, что пробелы в аргументах инструкций, таких как команды, следующие за RUN , сохраняются, поэтому следующий пример выводит ` hello world` с начальными пробелами, как указано:

Директивы парсера

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

Директивы парсера не чувствительны к регистру. Однако по соглашению они должны быть строчными. Соглашение также заключается в том, чтобы включать пустую строку после любых директив синтаксического анализатора. Символы продолжения строки не поддерживаются в директивах парсера.

Из-за этих правил следующие примеры недействительны:

Неверно из-за продолжения строки:

Неверно, так как встречается дважды:

Рассматривается как комментарий из-за появления после инструкции по сборщику:

Рассматривается как комментарий из-за появления после комментария, который не является директивой синтаксического анализатора:

Неизвестная директива рассматривается как комментарий из-за того, что она не распознана. Кроме того, известная директива рассматривается как комментарий из-за того, что она появляется после комментария, который не является директивой синтаксического анализатора.

В директиве синтаксического анализатора разрешены пробелы без разрыва строки. Следовательно, все следующие строки обрабатываются одинаково:

Поддерживаются следующие директивы парсера:

синтаксис

Эта функция доступна только при использовании бэкенда BuildKit и игнорируется при использовании классического бэкенда конструктора.

Директива синтаксиса определяет расположение синтаксиса Dockerfile, используемого для создания Dockerfile. Серверная часть BuildKit позволяет беспрепятственно использовать внешние реализации, которые распространяются в виде образов Docker и выполняются внутри изолированной программной среды контейнера.

Пользовательские реализации Dockerfile позволяют:

  • Автоматическое получение исправлений без обновления демона Docker
  • Убедитесь, что все пользователи используют одну и ту же реализацию для создания Dockerfile.
  • Используйте новейшие функции без обновления демона Docker
  • Попробуйте новые или сторонние функции, прежде чем они будут интегрированы в демон Docker.
  • Используйте альтернативные определения сборки или создайте собственное

Официальные релизы

Docker распространяет официальные версии образов, которые можно использовать для создания файлов Dockerfile, в репозитории docker/dockerfile на Docker Hub. Есть два канала, по которым выпускаются новые образы: стабильные и экспериментальные .

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

  • docker/dockerfile:1 – постоянно обновляется с помощью последних второстепенных выпусков 1.x.x и исправлений
  • .
  • docker/dockerfile:1.2 – постоянно обновляется с помощью последнего выпуска исправлений 1.2.x и прекращает получать обновления после выпуска версии 1.3.0.
  • docker/dockerfile:1.2.1 — неизменяемый: никогда не обновлялся

Мы рекомендуем использовать docker/dockerfile:1 , который всегда указывает на последнюю стабильную версию синтаксиса версии 1 и получает как «второстепенные», так и «исправления» для цикла выпуска версии 1. BuildKit автоматически проверяет наличие обновлений синтаксиса при выполнении сборки, чтобы убедиться, что вы используете самую последнюю версию.

Если используется определенная версия, например 1.2 или 1.2.1, файл Dockerfile необходимо обновить вручную, чтобы продолжать получать исправления ошибок и новые функции. Старые версии Dockerfile остаются совместимыми с новыми версиями компоновщика.

канал лабораторий

Канал «labs» предоставляет ранний доступ к функциям Dockerfile, которые пока недоступны в стабильном канале. Образы канала Labs выпускаются вместе со стабильными выпусками и имеют ту же версию с суффиксом -labs, например:

  • docker/dockerfile:labs — последний выпуск на канале labs
  • docker/dockerfile:1-labs — то же, что и dockerfile:1 в стабильном канале, с включенными экспериментальными функциями
  • docker/dockerfile:1.2-labs — то же, что и dockerfile:1.2 в стабильном канале, с включенными экспериментальными функциями
  • docker/dockerfile:1.2.1-labs — неизменяемый: никогда не обновлялся. То же, что и dockerfile:1.2.1 в стабильном канале, с включенными экспериментальными функциями

Выберите канал, который лучше всего соответствует вашим потребностям; если вы хотите воспользоваться новыми функциями, используйте канал лабораторий. Изображения в канале labs предоставляют расширенный набор функций в стабильном канале; обратите внимание, что стабильные функции в образах экспериментальных каналов следуют семантическому управлению версиями, а «лабораторные» — нет, а более новые версии могут быть несовместимы с предыдущими версиями, поэтому рекомендуется использовать неизменяемый вариант полной версии.

Документацию по экспериментальным функциям, мастер-сборкам и ночным выпускам функций см. в описании исходного репозитория BuildKit на GitHub. Чтобы просмотреть полный список доступных образов, посетите репозиторий образов на Docker Hub и репозиторий образов docker/dockerfile-upstream для сборок для разработки.

побег

Директива escape задает символ, используемый для экранирования символов в файле Dockerfile. Если он не указан, escape-символом по умолчанию является \ .

Эскейп-символ используется как для экранирования символов в строке, так и для перехода от новой строки. Это позволяет инструкции Dockerfile занимать несколько строк. Обратите внимание, что независимо от того, включена ли в Dockerfile директива escape-парсера, экранирование не выполняется в команде RUN, кроме как в конце строки.

Установка escape-символа на ` особенно полезна в Windows, где \ – это разделитель пути к каталогу. ` соответствует Windows PowerShell.

Рассмотрите следующий пример, который неочевидным образом потерпит неудачу в Windows.Второй \ в конце второй строки будет интерпретироваться как переход для новой строки, а не как цель перехода из первого \ . Точно так же \ в конце третьей строки, если предположить, что она фактически обрабатывается как инструкция, заставит ее рассматривать как продолжение строки. В результате этого dockerfile вторая и третья строки считаются одной инструкцией:

Одним из решений вышеизложенного может быть использование / в качестве цели как для инструкции COPY, так и для dir . Однако этот синтаксис в лучшем случае сбивает с толку, поскольку он не является естественным для путей в Windows, а в худшем случае подвержен ошибкам, поскольку не все команды в Windows поддерживают / в качестве разделителя пути.

Благодаря добавлению директивы escape parser следующий файл Dockerfile работает, как и ожидалось, с использованием естественной семантики платформы для путей к файлам в Windows:

Замена окружения

Переменные среды (объявленные с помощью оператора ENV) также могут использоваться в определенных инструкциях как переменные, которые должны интерпретироваться Dockerfile. Экранирование также обрабатывается для буквального включения синтаксиса, подобного переменной, в инструкцию.

Переменные среды обозначаются в файле Dockerfile как $variable_name или $ . Они обрабатываются одинаково, а синтаксис фигурных скобок обычно используется для решения проблем с именами переменных без пробелов, например $_bar .

Синтаксис $ также поддерживает несколько стандартных модификаторов bash, как указано ниже:

  • $ указывает, что если переменная установлена, результатом будет это значение. Если переменная не задана, результатом будет слово.
  • $ указывает, что если установлена ​​переменная, результатом будет слово, в противном случае результатом будет пустая строка.

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

Экранирование возможно путем добавления \ перед переменной: \$foo или \$ , например, преобразуются в литералы $foo и $ соответственно.

Переменные среды поддерживаются следующим списком инструкций в Dockerfile:

  • ДОБАВИТЬ
  • КОПИРОВАТЬ
  • ОКРУГ
  • ПОКАЗАТЬ
  • ОТ
  • ЭТИКЕТКА
  • СТОП-СИГНАЛ
  • ПОЛЬЗОВАТЕЛЬ
  • ОБЪЕМ
  • РАБОЧИЙ КАТАЛОГ
  • ONBUILD (в сочетании с одной из поддерживаемых выше инструкций)

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

приведет к тому, что def будет иметь значение hello , а не bye . Однако ghi будет иметь значение bye, потому что это не часть той же инструкции, которая устанавливает abc в bye .

файл .dockerignore

Прежде чем docker CLI отправит контекст демону docker, он ищет файл с именем .dockerignore в корневом каталоге контекста. Если этот файл существует, интерфейс командной строки изменяет контекст, чтобы исключить файлы и каталоги, соответствующие шаблонам в нем. Это помогает избежать ненужной отправки больших или конфиденциальных файлов и каталогов демону и потенциального добавления их к изображениям с помощью ADD или COPY .

CLI интерпретирует файл .dockerignore как список шаблонов, разделенных новой строкой, аналогичный файловым шаблонам в оболочках Unix. В целях сопоставления корень контекста считается как рабочим, так и корневым каталогом. Например, шаблоны /foo/bar и foo/bar исключают файл или каталог с именем bar в подкаталоге foo пути PATH или в корне репозитория git, расположенного по адресу URL. Ни то, ни другое не исключает ничего.

Вот пример файла .dockerignore:

Этот файл вызывает следующее поведение сборки:

Сопоставление выполняется с использованием правил Go filepath.Match. На этапе предварительной обработки удаляются начальные и конечные пробелы, а также удаляется . и .. элементы, использующие путь к файлу Go.Clean. Строки, оставшиеся пустыми после предварительной обработки, игнорируются.

Помимо правил Go filepath.Match, Docker также поддерживает специальную строку с подстановочными знаками **, которая соответствует любому количеству каталогов (включая ноль). Например, **/*.go исключит все файлы, оканчивающиеся на .go, которые находятся во всех каталогах, включая корень контекста сборки.

Строки, начинающиеся с ! (восклицательный знак) можно использовать, чтобы сделать исключения из исключений. Ниже приведен пример файла .dockerignore, в котором используется этот механизм:

Все файлы уценки, кроме README.md, исключаются из контекста.

Размещение ! правила исключения влияют на поведение: последняя строка .dockerignore, соответствующая конкретному файлу, определяет, включен он или исключен. Рассмотрим следующий пример:

В контекст не включаются файлы уценки, кроме файлов README, отличных от README-secret.md .

Теперь рассмотрим этот пример:

Включены все файлы README. Средняя строка не действует, потому что !README*.md совпадает с README-secret.md и идет последним.

Вы даже можете использовать файл .dockerignore, чтобы исключить файлы Dockerfile и .dockerигнорировать файлы. Эти файлы по-прежнему отправляются демону, потому что они нужны ему для выполнения своей работы. Но инструкции ADD и COPY не копируют их в образ.

Наконец, вы можете указать, какие файлы включать в контекст, а какие исключать. Для этого укажите * в качестве первого шаблона, за которым следует один или несколько ! шаблоны исключений.

Примечание

По историческим причинам шаблон . игнорируется.

Читайте также: