Метки пользовательских (self-hosted) воркеров в SourceCraft

Для продвинутого взаимодействия с пользовательскими (self-hosted) воркерами в SourceCraft предусмотрен специальный механизм меток.

Метки — это строковые значения, с помощью которых можно влиять на выбор пользовательского воркера, на котором будут выполняться задания (tasks) CI/CD. На воркере будут выполняться задания, все метки которых содержатся в метках воркера.

Метки задаются с двух сторон процесса:

Примечание

В строковых значениях метки может содержаться ограниченный набор символов: буквы латинского алфавита (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. Для этого:

  1. Сконфигурируйте воркер:

    Выполните команду:

    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: <персональный_токен>
    
  2. Запустите воркер:

    self-hosted-processor run \
      --config-path <путь_к_конфигурационному_файлу>
    

    Где --config-path — путь к файлу config.yaml.

Теперь воркер сможет исполнить только то задание, в поле runs_on которого присутствует метка gpu.

См. также