Метки пользовательских (self-hosted) воркеров в SourceCraft
Для продвинутого взаимодействия с пользовательскими (self-hosted) воркерами в SourceCraft предусмотрен специальный механизм меток.
Метки — это строковые значения, с помощью которых можно влиять на выбор пользовательского воркера, на котором будут выполняться задания (tasks) CI/CD. На воркере будут выполняться задания, все метки которых содержатся в метках воркера.
Метки задаются с двух сторон процесса:
- в конфигурации CI/CD
.sourcecraft/ci.yamlв элементах workflows и/или tasks в полеruns_on; - в конфигурации пользовательского воркера
config.yamlв полеtags.
Примечание
В строковых значениях метки может содержаться ограниченный набор символов: буквы латинского алфавита (a-zA-Z), а также -, . и _.
Метка self-hosted проставляется в параметрах пользовательского воркера автоматически. Ее не надо добавлять дополнительно в поле tags файла config.yaml.
Пример конфигураций CI/CD и пользовательского воркера с использованием меток
Конфигурация пользовательского воркера config.yaml:
executor_type: shell
self_hosted:
# Путь до директории, в которой будут создаваться временные
# рабочие директории заданий, выполняемых воркером.
root_dir: /Users/user1/sourcecraft
# Максимальное количество заданий, которые могут параллельно
# выполняться воркером.
max_slots: 3
logger_type: json
logger_level: info
# Адрес сервиса для получения задач и отправки логов и артефактов.
endpoint:
host: ci.sourcecraft.tech
port: 443
## Чтобы отключить верификацию сертификата, установите true.
ssl_no_verify: false
# Список меток. На воркере будут выполняться задания, все метки
# которых содержатся в метках воркера.
# Поддерживаются буквы латинского алфавита и символы «-», «.» и «_».
# Метка «self-hosted» проставляется автоматически.
tags:
- 4gb
- go-builder
auth:
# Персональный токен для аутентификации в сервисе.
pat: <персональный_токен>
Это конфигурация воркера, который параллельно может выполнять не более 3 заданий с метками 4gb и go-builder и создавать временные рабочие директории по пути /Users/user1/sourcecraft.
Конфигурация CI/CD .sourcecraft/ci.yaml:
workflows:
my-awesome-workflow:
runs_on: self-hosted
tasks:
- name: self-hosted-task
cubes:
- name: hello
script:
- echo "hello from self-hosted"
- name: self-hosted-go-builder-task
runs_on: [self-hosted, go-builder]
cubes:
- name: hello
script:
- echo "hello from self-hosted go builder"
В этом случае задания из рабочего процесса my-awesome-workflow, если у них не переопределен параметр runs_on, по умолчанию будут выполняться на любом из ваших пользовательских воркеров. А задание self-hosted-go-builder-task будет выполнено только на пользовательском воркере, которому при инициализации была присвоена метка go-builder.
Продвинутое использование меток в конфигурации CI/CD
Помимо прямого указания в конфигурации CI/CD меток, которые должны присутствовать на пользовательском воркере для выполнения задания, вы можете, наоборот, исключить воркеры с определенными метками. Для этого в файле .sourcecraft/ci.yaml в поле runs_on используйте отрицание ! перед меткой, например ["self-hosted", "!my-worker"]. В этом случае задание не может быть исполнено на воркере с меткой my-worker.
Важно
В файле .sourcecraft/ci.yaml в поле runs_on нельзя указать отрицание ! runtime-метки (compute, serverless, self-hosted).
Например, у вас есть несколько воркеров с разными метками у каждого: small, medium, large и extra-large. Чтобы запустить задание на любом воркере, кроме small, задайте следующую конфигурацию CI/CD:
workflows:
sample-workflow:
tasks:
- name: not-small-task
runs_on: ["self-hosted", "!small"]
cubes:
- ...
При планировании задания not-small-task SourceCraft отправит его на исполнение только пользовательскому воркеру, среди меток которого нет метки small.
Продвинутое использование меток в конфигурации пользовательского воркера
По умолчанию на пользовательском воркере могут выполняться любые задания, все метки которых содержатся в метках воркера.
Со стороны воркера вы можете ограничить перечень заданий, которые могут на нем выполняться, указав, какие метки должны обязательно присутствовать в поле runs_on конфигурации CI/CD. Для этого в файле config.yaml в поле tags используйте символ + перед меткой, например +my-obligatory-tag. В этом случае на воркере может быть исполнено только то задание, в поле runs_on которого содержится указанная метка, например ["self-hosted", "my-obligatory-tag"].
Важно
В файле config.yaml в поле tags нельзя задать обязательность + runtime-метки (compute, serverless, self-hosted).
Например, у вас есть пользовательский воркер с GPU, и вы хотите, чтобы на нем исполнялись только те задания, в поле runs_on которых присутствует метка gpu. Для этого:
-
Сконфигурируйте воркер:
АвтоматическиВручнуюВыполните команду:
self-hosted-processor init \ --token <персональный_токен> \ --tags 4gb,+gpu \ > config.yamlГде:
--token— персональный токен (PAT) для аутентификации в сервисе. С его помощью воркер получает задания, отчитывается о прогрессе, передает в SourceCraft логи и артефакты.--tags— список меток воркера.
Создайте или измените существующий файл
config.yaml:executor_type: shell self_hosted: max_slots: 3 logger_type: json endpoint: host: ci.sourcecraft.tech port: 443 tls: true # Список меток воркера tags: ["4gb", "+gpu"] auth: # Персональный токен для аутентификации в сервисе pat: <персональный_токен> -
Запустите воркер:
self-hosted-processor run \ --config-path <путь_к_конфигурационному_файлу>Где
--config-path— путь к файлуconfig.yaml.
Теперь воркер сможет исполнить только то задание, в поле runs_on которого присутствует метка gpu.