Skip to content

Instantly share code, notes, and snippets.

@vgoma
Last active August 3, 2017 14:36
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save vgoma/2456789058d378b00e4e164c11285866 to your computer and use it in GitHub Desktop.
Save vgoma/2456789058d378b00e4e164c11285866 to your computer and use it in GitHub Desktop.
Gitlab Virtualbox Windows XP runner

Gitlab Virtualbox Windows XP runner

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

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

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

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

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

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

C:\dev\cygwin\setup-x86-2.874.exe -X

Снимок_экрана_2017-07-24_13-42-34

Снимок_экрана_2017-07-24_13-43-02

Снимок_экрана_2017-07-24_13-43-21

Снимок_экрана_2017-07-24_13-43-58

Снимок_экрана_2017-07-24_13-44-12

Добавляем и указываем зеркало:

ftp://www.fruitbat.org/pub/cygwin/circa/2016/08/30/104223

Снимок_экрана_2017-07-24_13-45-50

Снимок_экрана_2017-07-24_13-49-21

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

Снимок_экрана_2017-07-24_13-54-00

Добавляем пакет git:

Снимок_экрана_2017-07-24_13-54-22

Снимок_экрана_2017-07-24_13-54-37

Снимок_экрана_2017-07-24_13-54-53

Снимок_экрана_2017-07-24_17-36-21

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

ssh-host-config

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

Снимок_экрана_2017-07-24_17-57-05

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

cygrunsrv -S sshd

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

Снимок_экрана_2017-07-24_18-01-16

Снимок_экрана_2017-07-24_18-01-47

Включаем учетную запись sshd:

Снимок_экрана_2017-07-24_18-19-53

Снимок_экрана_2017-07-24_18-20-09

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

Снимок_экрана_2017-07-24_18-20-27

Снимок_экрана_2017-07-24_18-20-42

Снимок_экрана_2017-07-24_18-20-52

Снимок_экрана_2017-07-24_18-21-12

Задаем пароль для учетки sshd:

Снимок_экрана_2017-07-24_18-02-09

Снимок_экрана_2017-07-24_18-02-18

Снимок_экрана_2017-07-24_18-02-42

Снимок_экрана_2017-07-24_18-02-49

Добавить в файл хостов виртуальной машины: C:\WINDOWS\system32\drivers\etc\hosts запись:

127.0.0.1 gitlab.example.com

Подставить реальный ip

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

Снимок_экрана_2017-07-24_18-12-08

Так же необходимо открыть 22 порт для TCP соединений если он закрыт. Посмотреть список открытых портов в Windows:

netstat -an

Посмотреть IP адрес виртуальной машины (изнутри):

ipconfig

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

Снимок_экрана_2017-07-24_18-48-47

Снимок_экрана_2017-07-24_18-49-34

Снимок_экрана_2017-07-24_18-49-44

Если используется nodejs

Чтобы работать с node/npm из-под пользователя sshd через cygwin, необходимо добавить в системные переменные среды виртуальной машины:

APPDATA: C:\Program Files\nodejs\node_modules\npm\npmrc

NODE_PATH: %AppData%\npm\node_modules

Снимок_экрана_2017-07-25_11-03-58

Снимок_экрана_2017-07-25_11-04-10

Снимок_экрана_2017-07-25_11-04-21

Снимок_экрана_2017-07-25_11-07-32

Снимок_экрана_2017-07-25_11-07-47

Так же необходимо удалить файл: C:\Program Files\nodejs\node_modules\npm\npmrc


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

Снимок_экрана_2017-07-24_18-14-23

Снимок_экрана_2017-07-24_18-14-57

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

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

ssh -p 5521 sshd@127.0.0.1

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

Делаем snapshot.

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

Регистрация runner'a

Чтобы runner смог запускать образы виртуальных машин, регистрировать его нужно из-под того пользователя, под которым установлен Vitualbox (скорее всего не из-под рута). То есть:

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

После регистрации можно посмотреть детали runner'ов:

gitlab-runner list

Будет выведен путь к конфигу: ConfigFile=/home/vgoma/.gitlab-runner/config.toml Подробнее о конфигурационном файле.

Подправим конфиг, указав данные для ssh и название виртуалки:

concurrent = 1
check_interval = 0

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

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

winxp_ie8:
  stage: test
  tags:
    - winxp_ie8
  variables:
    TESTENV: "development"
  script:
    # Инициализируем настройки proxy, путем визита на любой сайт через chrome
    - cygstart chrome "http://www.ya.ru"
    - cd end-to-end
    - npm.cmd i > output.txt
    - node index.js
  cache:
    paths:
      - tests/node_modules/

После этого запускаем сервис:

gitlab-runner run

Если возникли проблемы

Можно попробовать следующие действия:

Включить флаг PasswordAuthentication yes в файле:

vi /etc/sshd_config

Добавить пользователя в группу ssh, и попробовать запустить сервис явно указав пользователя, из-под которого будут работать скрипты gitlab'а:

sudo usermod -a -G ssh vgoma
gitlab-runner run --user=vgoma

При возникновении проблем с nodejs/npm, проделать эти шаги.

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