Развертывание пользовательского (self-hosted) воркера SourceCraft на виртуальной машине Yandex Compute Cloud
Пользовательские (self-hosted) воркеры
На пользовательские воркеры не действуют ограничения на объем вычислительных ресурсов
При наличии компьютера с подходящей конфигурацией, можно самостоятельно на нем настроить пользовательский воркер для SourceCraft
В руководстве рассматривается пример, как реализовать такую автоматизацию с помощью CI/CD-процессов SourceCraft с использованием сервисного подключения
Варианты использования пользовательского воркера:
-
В том же репозитории, из которого воркер был создан. Для такого случая предусмотрено автоматическое удаление ВМ после выполнения рабочего процесса.
Пример рабочего процесса test-task-and-delete-vm-async
test-task-and-delete-vm-async: runs_on: self-hosted tasks: - test-task - name: delete uses: delete-vm-async needs: [test-task]Задание
test-taskвыполняет полезную работу, например компиляцию проекта.Задание
deleteзапускается только после выполненияtest-task(параметрneeds: [test-task]) и удаляет в асинхронном режиме ВМ, на которой запускался пользовательский воркер.Перед запуском рабочего процесса
test-task-and-delete-vm-asyncнужно запустить рабочий процессcreate-vm, в котором будет создан пользовательский воркер.Примечание
Нельзя задать четкую последовательность выполнения рабочих процессов, поэтому рабочие процессы нужно по одному запустить вручную
. -
В любом другом репозитории организации
. Удалять ВМ с пользовательским воркером в таком случае нужно вручную.
Чтобы развернуть пользовательский воркер SourceCraft на ВМ Compute Cloud:
- Подготовьтесь к работе.
- Разверните инфраструктуру.
- Создайте репозиторий с конфигурацией CI/CD.
- Создайте секреты.
- Настройте сервисное подключение.
- Настройте CI/CD-процесс.
- Проверьте работу воркера.
Если созданные ресурсы вам больше не нужны, удалите их.
Подготовьтесь к работе
-
Зарегистрируйтесь в Yandex Cloud и создайте платежный аккаунт:
- Перейдите в консоль управления
, затем войдите в Yandex Cloud или зарегистрируйтесь. - На странице Yandex Cloud Billing
убедитесь, что у вас подключен платежный аккаунт, и он находится в статусеACTIVEилиTRIAL_ACTIVE. Если платежного аккаунта нет, создайте его и привяжите к нему облако.
Если у вас есть активный платежный аккаунт, вы можете создать или выбрать каталог, в котором будет работать ваша инфраструктура, на странице облака
. - Перейдите в консоль управления
- Аутентифицируйтесь в SourceCraft на главной странице
сервиса или зарегистрируйтесь .
Необходимые платные ресурсы
В стоимость поддержки инфраструктуры пользовательского воркера входят:
- плата за диск и запущенную ВМ (см. тарифы Yandex Compute Cloud);
- плата за использование внешнего IP-адреса (см. тарифы Yandex Virtual Private Cloud).
Разверните инфраструктуру
-
Если у вас еще нет сетевой инфраструктуры в каталоге Yandex Cloud, в котором вы хотите разместить ВМ с пользовательским воркером, создайте облачную сеть, например
default, и подсеть, напримерdefault-ru-central1-d.Примечание
В предложенном в руководстве примере конфигурации CI/CD используются сеть с названиями
defaultи подсетьdefault-ru-central1-d. -
В предложенном примере для ВМ используется группа безопасности по умолчанию. Добавьте в нее следующие правила:
Направление
трафикаОписание
Диапазон портов
Протокол
Источник /
НазначениеCIDR блоки
Входящий
Доступ к ВМ из
интернета0-65535ЛюбойCIDR0.0.0.0/0Исходящий
Доступ ВМ в
интернет0-65535ЛюбойCIDR0.0.0.0/0 -
В каталоге Yandex Cloud, в котором вы хотите разместить ВМ с пользовательским воркером, создайте сервисный аккаунт с ролью
compute.editorна каталог.От имени этого сервисного аккаунта будут создаваться ВМ в Compute Cloud, и осуществляться сервисное подключение
SourceCraft.
Создайте репозиторий с конфигурацией CI/CD
Совет
В примере показано, как создать новый репозиторий с использованием в качестве основы репозитория self-hosted-worker
Вместо создания нового репозитория вы также можете сделатьself-hosted-worker.
-
Создайте
новый пустой репозиторий в организации, чьи облако и каталог будут использоваться для ВМ пользовательского воркера.На открывшейся странице скопируйте ссылку для доступа к новому репозиторию вида:
https://git@git.sourcecraft.dev/<слаг_организации>/<слаг_нового_репозитория>.git. -
Клонируйте
репозиторий self-hosted-worker с примером развертывания пользовательского воркера:git clone https://git@git.sourcecraft.dev/examples/self-hosted-worker.git cd self-hosted-workerРепозиторий
self-hosted-workerсодержит следующие файлы:├── .sourcecraft │ └── ci.yaml # конфигурация CI/CD SourceCraft ├── .gitignore ├── compute-instance-create.sh # скрипт для создания ВМ ├── compute-instance-delete-async.sh # скрипт для удаления ВМ в асинхронном режиме ├── compute-instance-delete.sh # скрипт для удаления ВМ ├── metadata.yaml # метаданные для ВМ └── README.md -
Используйте репозиторий
self-hosted-workerв качестве основы для своего нового репозитория:git remote remove origin git remote add origin https://git@git.sourcecraft.dev/<слаг_организации>/<слаг_нового_репозитория>.git git branch -M main -
Отправьте изменения в новый репозиторий:
git push -u origin main
Создайте секреты
-
Получите
персональный токен (PAT) с рольюАдминистратор репозиторияс доступом к репозиторию, в котором вы хотите использовать пользовательский воркер для CI/CD.Совет
Если вы хотите использовать воркер не только для репозитория, из которого он был создан, укажите для персонального токена соответствующие права.
С помощью этого токена воркер аутентифицируется в SourceCraft.
-
Сгенерируйте SSH-ключи для доступа на ВМ с воркером.
-
Создайте
следующие секреты SourceCraft:- с названием
PATи значением токена; - с названием
SSH_PUBи публичным SSH-ключом.
- с названием
Настройте сервисное подключение
Сервисные подключения
Создайтеdefault-service-connection, используйте для него созданный ранее сервисный аккаунт с ролью compute.editor на каталог.
Важно
Действие гранта от SourceCraft
Настройте CI/CD-процесс
Настройте CI/CD-процесс для развертывания пользовательского воркера.
Сконфигурируйте базовые параметры CI/CD
CI/CD-процесс настраивается.sourcecraft/ci.yaml.
Представленная конфигурация CI/CD
create-vm— создает ВМ с пользовательским воркером.delete-vm— удаляет ВМ с пользовательским воркером.test-task-and-delete-vm-async— выполняет тестовую задачу на пользовательском воркере и удаляет ВМ в асинхронном режиме.
Примечание
Рабочие процессы create-vm и delete-vm выполняются на стандартных облачных воркерах SourceCrafttest-task-and-delete-vm-async выполняется на пользовательском воркере.
Откорректируйте конфигурацию CI/CD под свои задачи или воспользуйтесь существующей.
Задайте параметры ВМ
Конфигурация ВМ для пользовательского воркера задается в блоке переменных env в файле .sourcecraft/ci.yaml:
COMPUTE_INSTANCE_NAME— название и имя хоста ВМ, напримерself-hosted-worker.VPC_SUBNET_NAME— название подсети, созданной ранее, в которой будет размещена ВМ, напримерdefault-ru-central1-d.CREATE_BOOT_DISK— образ диска, из которого будет создана ВМ, напримерimage-folder-id=standard-images,image-family=ubuntu-2204-lts(Ubuntu 22.04 LTS). См. также Получить список публичных образов.PLATFORM— платформа ВМ, напримерstandard-v3.MEMORY— количество RAM, например64GB.CORES— количество ядер vCPU, например8.CORE_FRACTION— гарантированная доля vCPU, например100.PREEMPTIBLE— указание, использовать ли прерываемую ВМ, напримерfalse.SSH_PUB— созданный ранее секрет с публичной частью SSH-ключа в формате${{ secrets.<название_секрета> }}. Задается на случай, если понадобится подключиться к ВМ с пользовательским воркером.
Создание пользователя ВМ с логином builder происходит в файле с метаданными metadata.yaml:
users:
- name: builder
sudo: 'ALL=(ALL) NOPASSWD:ALL'
shell: /bin/bash
ssh_authorized_keys:
- ${SSH_PUB}
Откорректируйте конфигурацию ВМ под свои задачи или воспользуйтесь существующей.
Составьте скрипт установки пользовательского воркера и другого ПО на ВМ
Для установки исполняемого файла пользовательского воркера и другого программного обеспечения, например Dockermetadata.yaml:
- path: "/usr/local/etc/startup.sh"
permissions: "755"
content: |
#!/bin/bash
# install self-hosted-processor
apt-get update
apt-get install -y musl
curl \
--silent \
--show-error \
--location \
https://storage.yandexcloud.net/src-processor-downloads/self-hosted-processor-latest/linux/amd64/self-hosted-processor \
--output self-hosted-processor
chmod +x self-hosted-processor
mv self-hosted-processor /home/builder/sourcecraft
chmod 777 -R /home/builder/sourcecraft
# install docker
apt install ca-certificates curl software-properties-common apt-transport-https -y
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
apt update
apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y
usermod -aG docker builder
При развертывании ВМ, в ней создается и выполняется bash-скрипт /usr/local/etc/startup.sh, который устанавливает исполняемый файл пользовательского воркера и Docker.
Откорректируйте скрипт установки под свои задачи или воспользуйтесь существующим.
Сконфигурируйте пользовательский воркер
Конфигурационный файл воркераconfig.yaml также настраивается в файле с метаданными metadata.yaml:
write_files:
- path: "/home/builder/sourcecraft/config.yaml"
permissions: "644"
content: |
executor_type: shell
self_hosted:
root_dir: /home/builder/sourcecraft/tmp
max_slots: 3
logger_type: json
logger_level: info
endpoint:
host: ci.sourcecraft.tech
port: 443
ssl_no_verify: false
auth:
pat: ${PAT}
Проверьте работу воркера
Создайте ВМ с пользовательским воркером
Запустите вручнуюcreate-vm.
Процесс создания можно контролировать по логам кубиковcreate-vm.
Запустите тестовый рабочий процесс
- Запустите вручную
рабочий процессtest-task-and-delete-vm-async. - В задании
test-taskпроверьте логи кубиковtest-workerиtest-docker:- В логах кубика
test-workerдолжны отобразиться результаты выполнения командuname -aиfree -h, запущенных непосредственно на воркере. - В логах кубика
test-dockerдолжна отобразиться версия утилиты Yandex Cloud CLI, которая будет запущена в Docker-контейнере.
- В логах кубика
После выполнения задания test-task запустится задание delete (delete-vm-async), в котором будет предпринята попытка удалить ВМ в асинхронном режиме. Результат удаления можно увидеть в консоли управленияdelete-vm.
Как удалить созданные ресурсы
Чтобы перестать платить за созданные ресурсы, запустите вручнуюdelete-vm или удалите ВМ с пользовательским воркером в интерфейсе Yandex Cloud.
При необходимости удалите сеть и подсеть.