Skip to content

Instantly share code, notes, and snippets.

@vgoma
Last active June 13, 2023 08:55
Show Gist options
  • Save vgoma/f0af7c3a01c90fe037c0b31ba847d2b8 to your computer and use it in GitHub Desktop.
Save vgoma/f0af7c3a01c90fe037c0b31ba847d2b8 to your computer and use it in GitHub Desktop.
Gitlab Virtualbox Windows 7 runner

Gitlab Virtualbox Windows 7 runner

Первоисточник

В результате выполнения шагов у вас будет готовый runner на виртуальной машине с Windows 7 с Cygwin, к которой можно будет подключиться по ssh.

Устанавливаем Cygwin

Качаем установочный файл cygwin например в C:\dev\cygwin.

Пакеты для Cygwin устанавливаются именно из него

Запускаем файл с правами администратора:

Screenshot_from_2017_07_19_19_16_51.png

Screenshot_from_2017-07-19_19-17-06

Устанавливаем Cygwin:

Screenshot_from_2017-07-19_19-17-15

Screenshot_from_2017-07-19_19-17-21

Указываем, где будет корень системы Cygwin:

Screenshot_from_2017-07-19_19-17-28

Указываем, откуда будут устанавливаться пакеты:

Screenshot_from_2017-07-19_19-17-36

Screenshot_from_2017-07-19_19-17-41

Screenshot_from_2017-07-19_19-17-51

Добавляем в систему пакеты openssh, openssl:

Screenshot_from_2017-07-19_19-18-42

Добавляем в систему git:

Screenshot_from_2017-07-19_19-18-56

Screenshot_from_2017-07-19_19-19-08

Screenshot_from_2017-07-19_19-19-16

Screenshot_from_2017-07-19_19-29-25

Устанавливаем SSH демон:

Screenshot_from_2017-07-19_19-31-30

Screenshot_from_2017-07-19_19-31-40

Запускаем настройку ssh:

ssh-host-config

Отвечаем на вопросы:

Screenshot_from_2017-07-19_19-37-23

Запускаем демон:

cygrunsrv -S sshd

Проверяем, что служба успешно установлена:

Screenshot_from_2017-07-19_19-39-08

Screenshot_from_2017-07-19_19-39-40

Несмотря на то, что в Windows 7 создается учетка cyg_server необходимо включить учетную запись sshd, тк вход по ssh будет осуществляться именно из-под нее:

Screenshot_from_2017-07-19_19-47-39

Screenshot_from_2017-07-19_19-47-53

Включить в группу администраторов:

Screenshot_from_2017-07-19_19-48-04

Screenshot_from_2017-07-19_19-48-17

Screenshot_from_2017-07-19_19-48-24

Screenshot_from_2017-07-19_19-48-39

Задаем пароль пользователю sshd:

Screenshot_from_2017-07-19_19-40-00

Screenshot_from_2017-07-19_19-40-18

Screenshot_from_2017-07-19_19-40-30

Screenshot_from_2017-07-19_19-40-40

Выключаем брэндмауер:

Screenshot_from_2017-07-19_20-03-31

Выключаем виртуальную машину, и маппим порты, чтобы подключиться по ssh:

Screenshot_from_2017-07-19_19-54-50

Screenshot_from_2017-07-19_19-55-19

При выполнении "работы" gitlab-runner маппит порты таким же образом

Запускаем виртуальную машину из-под любого пользователя и подключаемся к ней по ssh:

ssh -p 5421 [email protected]

Screenshot_from_2017-07-19_20-06-04

Так же на этом этапе необходимо включить автологин в учетную запись sshd (чтобы были доступны все службы этого пользователя) и произвести все дополнительные настройки для учетной записи sshd (установить доверенные SSL сертификаты или сертификаты ЭП пользователя).

Делаем snapshot.

Gitlab-runner по умолчанию для каждой "работы" клонирует виртуальную машину с последнего snapshot'а (а не с текущего состояния машины). При этом если в конце истории snapshot'ов несколько одноименных, то gitlab возьмет именно первый из них.

Регистрируем runner в Gitlab

Устанавливаем ПО для запуска и регистрации runner'ов.

Регистрируем runner:

gitlab-runner register \
--url="http://gitlab.example.com/" \
--registration-token="xxxxxxxxxxxxxxxxxx" \
--name="vgoma-windows-7" \
--run-untagged="false" \
--locked="false" \
--tag-list="integration_win7_ie11" \
--executor="virtualbox"

Подправим конфиг путь к которому подскажет gitlab-runner list, указав данные для ssh и название виртуалки:

concurrent = 1
check_interval = 0

[[runners]]
  name = "vgoma-windows-7"
  url = "http://gitlab.example.com/"
  token = "6688aca0e17c436a3f4cf1c5dca89c"
  executor = "virtualbox"
  [runners.ssh]
    user = "sshd"
    password = "qwercvbn"
  [runners.virtualbox]
    base_name = "Windows 7"
    disable_snapshots = false
  [runners.cache]

Пример "работы" из .gitlab-ci.yml:

e2e:
  stage: test
  tags:
    - win7_ie11
  variables:
    TESTENV: "development"
  script:
    - cd end-to-end
    # Если выводить в консоль установка никогда не завершится и заблокирует выполнение скрипта
    - npm i > install-output.txt
    - node index.js
  cache:
    paths:
      - tests/node_modules/

Запускаем сервис:

gitlab-runner run

Теперь Gitlab будет выполнять работы на runner'ах с указанными тэгами.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment